Быстрый поиск по большому массиву неоднородных данных, что выбрать?

Допустим есть 10 миллионов записей, каждая в среднем около 5 килобайт.
Данные в записях не являются текстом и отчасти близки к бинарным, и составления словаря (индексация) для них не представляется возможным.

Необходимо организовать полнотекстовый поиск по этим данным.

Какую систему можете посоветовать для этой задачи, чтобы поиск был максимально быстрым (как хранить данные и как искать по ним)?

UPD:
К вопросу можно подойти с другой стороны, например — распределённые вычисления, GAE тот-же, или Amazon SimpleDB, может у кого был такой опыт?
  • Вопрос задан
  • 3752 просмотра
Пригласить эксперта
Ответы на вопрос 7
apangin
@apangin
Примените идею фильтра Блума:
выберите 10-30 признаков, легко вычисляемых как для запроса, так и для содержимого, которые дают примерно одинаковое распределение true/false на вашем множестве данных. Поиск отфильтруйте по тем записям, где встречаются признаки, обнаруженные в запросе.

Например, можно выбрать признаки вида «существует подстрока из N символов, сумма которых равна K». Очевидно, если такая подстрока присутствует в запросе, то она обязана присутствовать и в искомых записях. Ради интереса я провел эксперимент на jpg-аватарках размером в среднем 4К и подобрал такие пары N и К: (3, 97), (3 98), (3, 99), (3, 102), (3, 104), (3, 105), (4, 161), (4, 173), (4, 178), (5, 247), (5, 251), (5, 255)…
Ответ написан
@wanmen
Вот тут не плохо написано про полнотекстовый поиск www.mysql.ru/docs/man/Fulltext_Search.html
Ответ написан
jj_killer
@jj_killer
Тут только «сверху-вниз» возможно. Если данные совершенно случайны и сортировать их не имеет смысла, то другого выхода, наверное, нету. Если все же они поддаются сортировке, то можно попробовать ставить «метки» и искать в промежутке между ними.
Ответ написан
Комментировать
10 000 000 записей по 5 000 байт каждая?
Т.е. примерно 50 гигабайт текстовой информации?

Я бы попробовал shpinx, он неплохо переваривает большие объемы текстовых данных
sphinxsearch.com/about/sphinx/
Ответ написан
YasonBy
@YasonBy
Если Ваши последовательности совершенно случайно имеют отношение к биологии (и даже если нет) — у биоинформатики есть специализированные алгоритмы, типа BLAST.
Ответ написан
@Jazzist
Если данных много — найти возможность работать с индексом. Нет других эффективных решений.
Ответ написан
Комментировать
pietrovich
@pietrovich
50Gb относительно случайных последовательностей байтов? Без разделителей? А длинна искомого фрагмента в среднем какая? И насколько часто будут производиться выборки?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы