база данных по сравнению с плоским файлом, который является более быстрой структурой для соответствия “regex” многим одновременным запросам

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

Предположите, что многие пользователи (100 пользователей) являются одновременно запросом файл/дб. Поиски включают сопоставление с образцом против статического файла/дб. Файл имеет 50 000 уникальных строк (совпадающий тип данных). Могло быть много соответствий. Нет никакой записи в файл/дб, просто читайте.

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

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

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

Если я хочу найти, что все города имеют шаблон "СНГ" на их имена. Который лучше/быстрее, с помощью regex или строковые функции?

Рекомендуйте стратегию

TIA

1
задан Jamex 22 May 2010 в 16:08
поделиться

2 ответа

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

Изменить: (с учетом вашей новой информации) Если на самом деле речь идет только о поиске подстроки в одном известном атрибуте, то использование полнотекстового индекса (который предоставляет БД) вам немного поможет (в зависимости от типа индекса) и может предоставить простое и достаточно быстрое решение, соответствующее вашим требованиям. Конечно, вы можете самостоятельно реализовать индекс в файловой системе, например с использованием варианта суффиксного дерева , которое трудно превзойти по скорости.

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

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

HTH,
Александр

2
ответ дан 3 September 2019 в 00:23
поделиться

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

0
ответ дан 3 September 2019 в 00:23
поделиться
Другие вопросы по тегам:

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