LINUX.ORG.RU

Highload: fulltext поиск + storage

 ,


0

2

Есть примерно 1Тб уникальных текстовых строк длиной около <5к символов. Это все нужно сохранить и сделать по этому полнотекстовый поиск, который даст хотя бы 100 результатов в минуту. Крайне желательна поддержка морфологии для популярных языков.

И тут у меня есть 2 вопроса: в чем хранить данные и чем их индексировать. Данные будут сравнительно редко изменяться (хочется избавиться от изменений вообще). Запись в общую базу будет происходить скорее всего чанками по 100 метров из кэша MySQL && Redis. Т.е. хранилище будет на 99.9% перманентным и использоваться будет только для поиска.

Пока посматриваю в сторону sphinx/solr, потому что приходилось их использовать пару раз. А вот как, где и в чем хранить столько данных не имею понятия.

sphinx вроде не умеет в инкрементальное построение индекса (инфа двухгодичной давности). С такими объемами это может быть критично.

baverman ★★★
()
Ответ на: комментарий от iSage

man delta index.

М-м-м, неплохо, а еще и мерж есть, вообще прекрасно. Бум знать.

ТС, тогда я бы взял sphinx, он не такой прожорливый.

baverman ★★★
()
Ответ на: комментарий от baverman

А что можете посоветовать в качестве чего-нить, где это хранить все? MySQL Cluster / Galera? Там формат данных весьма унылый:

id | resource_id | uid | plain | plain_md5 | text | text_md5

Есть возможность разбросать text && plain по разным таблицам. Как бы, так получается, что SQL и не нужен вовсе.

Лучшим было бы распределенное key-value решение, заточенное под много_данных.

Или хранить все в одном файле на ceph/lustre/и т.д. + вести файл с индексом оффсетов текста для быстрого fseek.

division_hell
() автор топика
Ответ на: комментарий от division_hell

Проще всего хранить в mysql. С распределенными таблицами не работал, так что посоветовать могу мало чего. Хотя вариант с ручным партиционированием достаточно прост. В конфе прописываются несколько баз, и каждому документу назначается, помимо, id, еще сервер, где его можно найти.

Иначе, xmlpipe2 и любой удобный сторадж.

Или хранить все в одном файле на ceph/lustre/и т.д. + вести файл с индексом оффсетов текста для быстрого fseek.

Я очень сомневаюсь в производительности такого решения.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.