За последние 24 часа нас посетили 15589 программистов и 1545 роботов. Сейчас ищут 954 программиста ...

DBM база большого обема и поиск в ней значений

Тема в разделе "PHP и базы данных", создана пользователем sx000, 23 окт 2011.

  1. sx000

    sx000 Активный пользователь

    С нами с:
    28 авг 2010
    Сообщения:
    35
    Симпатии:
    0
    Дано:
    есть построчно куча словосочетаний:

    Маша пошла в лес
    В лесу было холодно
    корзинка с грибами
    голодный волк
    ...

    таких вот словосочетании очень много, а точнее 250кк.
    И есть запрос (напишу SQL :) чтоб было понятно): %маш% and %лес% or %лес% and %холод% ... (порядок слов не важен!!!!)

    Задача:

    Вытащить строки содержащие условие запроса.

    Варианты решения:
    1. Засунуть в Mysql FULLTEXT, проиндексировать и вытаскивать себе на здоровье
    Этот вариант не подходит так как объем базы вырастает просто до не реальных размеров
    2. Использовать DBM и каким то хитрым образом задавать ключи к словам, и по этим ключам вытаскивать.
    Это круто и это мне подходит, но в данном случае если скажем значение содержит 1 слово не более можно присвоить каждой букве уник. цифру и так строить ключ, а если их три слова?

    Маша пошла в лес
    запрос: %маш% and %лес% or %лес% and %холод% ... (порядок слов не важен!!!!)

    первой идей было удалить пробелы и превратить в единый массив букв, а вот дальше я встал :) while все ключи смотреть на предмет вхождения в ключ сочетаний цифр ... короче на этом месте затырка. И еще: результат выборки может быть не в единственном числе, те строк может быть несколько содержащих эти слова или слово. Да и просто с одним словом были бы проблемы теже так как там есть еще же разные окончания, а нам нужны вхождения. Прошу помощи.
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    угу, индексы важны, индексы нужны :)

    вариант с фуллтекст поиском самый нормальный, т.к. без индексов перебирать каждую строку в поисках искомых - глупо и очень ресурсозатратно.