производительность для поиска по 100 миллионам записей - PullRequest
0 голосов
/ 23 октября 2011

Сейчас я занимаюсь PHP и загружаю в массив 11 миллионов доменов в текстовых файлах, а затем перебираю их с помощью Regex. Чтобы сделать это, мне нужно увеличить ограничение памяти до 2 гигабайт, а затем процесс занимает около 10 секунд. Скоро у меня будет 100 миллионов доменов, и я планирую перейти на решение для баз данных, но все же, как вы получаете хорошую производительность при поиске в списке из 100 миллионов доменов?

Я ищу с помощью регулярных выражений, как это:

$ domains = preg_grep ("/ store./", $ array);

foreach ($ domains как $ domain) {echo $ domain;}

Ответы [ 4 ]

3 голосов
/ 23 октября 2011

Как насчет поисковой системы типа lucene: http://lucene.apache.org/java/docs/index.html

Она предназначена именно для этой цели.

1 голос
/ 23 октября 2011

Regex, вероятно, самый медленный способ поиска чего-либо.Вы можете извлечь выгоду из MongoDB, если вы имеете дело с такими большими объемами данных.

0 голосов
/ 23 октября 2011

Если вы знаете, с чего начинается домен, это может представлять интерес.Вы можете разделить свои текстовые файлы на файлы «начинается с».Домен может начинаться с 36 различных символов (это az плюс 0-9).Имейте 36 разных файлов и сохраняйте их таким образом.

Так как ваш пример начинается с 's', вы запустите его для файла 's' и обнаружите, что запрос выполняется намного быстрее - у него меньшедля поиска.

Если вы всегда будете знать первые N символов вашего поиска (т. е. подстановочный знак отсутствует), вы можете получить экспоненциально лучшие результаты, разбив файлы на группы.Поскольку последующие символы могут включать hifen, ваше количество файлов будет не более 36 * (37 ^ (N - 1)), где N> 1 ... что все еще довольно много!

0 голосов
/ 23 октября 2011

Зависит от того, что вы подразумеваете под «поиском».Regex?Сканирование частей строк?Базы данных нуждаются в помощи - индексы бесполезны для полных частичных совпадений.

OTOH для реального сопоставления (особенно если вы храните как доменное имя отдельно от части верхнего уровня) ... Я ожидал бы однозначную мс налюбое достойное оборудование.

Regex - лучше загрузить файл в память РАЗ и сохранить его там.Да, нужно 2 концерта - кому какое дело.64-гигабайтные серверы дешевы;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...