Дилемма реализации поиска: полный текст против простого SQL - PullRequest
2 голосов
/ 26 марта 2010

У меня есть приложение MySQL / Rails, которое нуждается в поиске. Вот некоторая информация о данных:

  • Пользователи выполняют поиск только по своим данным, поэтому поиск сужается по user_id для начала.

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

  • Я записал записи типичного пользователя в текстовый файл. Размер файла составляет 2,9 МБ.

  • Поиск должен охватывать два столбца: title и body. title - столбец varchar (255). body - это текст типа столбца.

  • Это будет слегка использоваться. Если бы я усреднял несколько запросов в секунду, это было бы удивительно.

  • Он работает на машине CentOS 5 VPS 500 МБ.

  • Я не хочу ранжирования по релевантности или какой-либо неопределенности. Поиск должен быть для точных строк и надежно возвращать все записи, содержащие строку. Простой порядок дат - от самых новых до самых старых.

  • Я использую тип таблицы InnoDB.

Я просматриваю простой SQL-поиск (через гем searchlogic) или полнотекстовый поиск с использованием Sphinx и гем Thinking Sphinx.

Sphinx очень быстрый, а Thinking Sphinx - крутой, но он добавляет сложности, демон для поддержки, задания cron для поддержки индекса.

Могу ли я получить простой SQL-поиск для небольшого приложения?

Ответы [ 3 ]

3 голосов
/ 26 марта 2010

Я думаю, что простой поиск SQL не будет хорошим выбором. Из-за того, что когда мы выбираем столбцы текстового типа в MySQL, запрос всегда падает на жесткий диск независимо от настроек кэша.

Вы можете использовать обычный поиск SQL только с очень маленькими приложениями.

Я бы предпочел Сфинкса для этого.

1 голос
/ 26 марта 2010

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

Я разрабатываю и поддерживаю приложение с функцией поиска, свойства которой похожи на ваши, и простой поиск SQL до сих пор работал очень хорошо для меня. У меня были подобные проблемы с производительностью, когда я впервые реализовал функцию поиска год или два назад, но я еще не видел никаких проблем с производительностью.

0 голосов
/ 30 марта 2010

Пользуясь полнотекстовым поиском MySQL около 4 лет и просто переходя на Sphinx, я бы сказал, что обычный поиск MySQL с использованием полнотекстового логического (то есть точного) синтаксиса будет нормальным. Это быстро и будет делать именно то, что вы хотите. Количество данных, которые вы будете искать в любой момент времени, будет небольшим.

Единственной проблемой может быть упорядочение результатов. Полнотекстовый поиск в MySQL может замедлиться, когда вы начнете упорядочивать вещи по (например) дате, так как для этого требуется, чтобы вы искали всю таблицу, а не только первые nn найденные результаты. В конце концов, именно по этой причине я переехал в Сфинкс.

Sphinx также потрясающий, так что не бойтесь его попробовать, но, похоже, в вашем случае дополнительные функции могут не потребоваться.

...