Поиск подстроки в списке из миллиарда уникальных строк

У меня есть список примерно из миллиарда уникальных строк, длина большинства из которых составляет несколько десятков символов. Я хотел бы найти все строки, которые содержат или соответствуют строке поиска, в идеале менее чем за 100-200 мс и на как можно меньшем количестве оборудования (я предполагаю, что мне понадобится хороший объем оперативной памяти). Каков наилучший способ хранения и извлечения этого?

  • Из того, что я прочитал, MySQL LIKE '%search%' не использует индекс, но LIKE '%search' И LIKE 'search%' оба используют. Это приемлемо в крайнем случае, но не идеально, так как я хотел бы найти строку поиска где-нибудь в пределах целевых строк.
  • Использование хранилища ключей и значений, такого как Redis, потребует хранения всех возможных комбинаций подстрок и, как я предполагаю, большого количества оперативной памяти.
  • Список строк составляет примерно дюжину ГБ. Является ли сервер полнотекстового поиска, такой как Lucene, жизнеспособным или даже идеальным для этого вместо миллиардов строк/документов/записей? Это наверняка сэкономит на разборе.

person Kevin    schedule 26.04.2012    source источник
comment
И поскольку на этот вопрос на самом деле нет четкого ответа, следует ли преобразовать его в вики сообщества?   -  person Kevin    schedule 26.04.2012


Ответы (1)


Рассматривали ли вы возможность использования одной из многих сред MapReduce для решения вашей проблемы? Суть MapReduce заключается в том, что вы разделяете и властвуете, поэтому вы решаете очень простую проблему (скажем, содержит ли только одна из ваших миллиардов уникальных строк ваш поисковый запрос) миллиард раз, а затем вы объединяете миллиард ответов в один ответ. И вместо того, чтобы иметь только одну машину с большим объемом оперативной памяти для решения вашей проблемы, вы можете попросить несколько менее оснащенных машин решить вашу проблему вместе. Проверьте это. Возможно, это то, что вы ищете.

person Jason    schedule 04.05.2012