база данных против плоского файла, который является более быстрой структурой для сопоставления регулярных выражений со многими одновременными запросами - PullRequest
1 голос
/ 22 мая 2010

какая структура возвращает более быстрый результат и / или меньшую нагрузку на хост-сервер, плоский файл или базу данных (mysql)?

Предположим, многие пользователи (100 пользователей) одновременно запрашивают файл / db. Поиск включает сопоставление с шаблоном по статическому файлу / db. Файл имеет 50000 уникальных строк (того же типа данных). Там может быть много матчей. Нет записи в файл / db, просто прочитайте.

Можно ли создать дубликат файла / db и записать логический ключ для использования файла резервной копии / db, если используется основной файл?

Какой язык лучше всего подходит для типа структуры? Perl для плоских и PHP для БД?

Информация о дополнении:

Если я хочу найти все города, в их названиях есть шаблон "cis". Что лучше / быстрее, используя регулярные выражения или строковые функции?

Пожалуйста, порекомендуйте стратегию

ТИА

Ответы [ 2 ]

2 голосов
/ 22 мая 2010

Я большой поклонник простых решений и поэтому предпочитаю - для простых задач - плоское хранилище файлов. Реляционная БД с ее возможностями индексирования совсем не поможет вам с произвольными шаблонами регулярных выражений, а кэширование файловой системы в любом случае гарантирует, что этот довольно маленький файл находится в памяти. Я бы пошел по плоскому файлу + perl route.

Edit: (taking your new information into account) Если на самом деле речь идет только о поиске подстроки в одном известном атрибуте, то использование полнотекстового индекса (который предоставляет БД) поможет вам немного (в зависимости от типа применяемого индекса) и может обеспечить легкий и достаточно быстрое решение, которое соответствует вашим требованиям. Конечно, вы можете самостоятельно реализовать индекс в файловой системе, например, используя вариацию Suffix Tree , которую трудно победить по скорости.

Тем не менее, я бы пошел по пути простого файла (и если он соответствует вашей цели, посмотрите на awk), потому что, если бы вы начали его реализовывать, вы бы уже закончили;) Далее я подозреваю, что количество пользователей, о которых вы говорите, не заставит систему почувствовать разницу (ваш процессор все равно будет скучать большую часть времени).

Если вы не уверены, просто попробуйте! Внедрите это решение regex + perl, если вы знаете perl, вам потребуется несколько минут, зацикливайтесь 100 раз и измеряйте с помощью time. Если это достаточно быстро, используйте его, если нет, рассмотрите другое решение. Вы должны иметь в виду, что ваши 50 000 уникальных линий на самом деле невелики с точки зрения современных вычислений. (сравните с этим: Оптимизация индексации таблиц Mysql для запросов на подстроки )

НТН,
александр

0 голосов
/ 22 мая 2010

В зависимости от того, как ваши запросы и ваши данные выглядят как система полнотекстового поиска, например Lucene или Sphinx , может быть хорошей идеей.

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