2010-02-20 2 views
3

Когда я добавил функцию поиска к моему первому Rails-приложению, я использовал Sphinx после прочтения того, что использование встроенного полнотекстового поиска MySQL было плохой идеей. В то время как Sphinx работает хорошо, его немного сложно настроить, и я чувствую, что слишком много перегрузок для простой функции поиска, требуемой в моем приложении.Полнотекстовый поиск MySQL в Rails?

Поиски не выполняются очень часто на моем сайте (не более одного раза каждые 3-4 секунды), поэтому я не слишком беспокоюсь о загрузке.

Мой вопрос: Почему именно использование полного текстового поиска MySQL плохой, по сравнению с Sphinx/Ferret/Solr/etc ..?

ответ

4

MySQL - это реляционная база данных, а не поисковый сервер так сразу, мы говорим об использовании чего-то, что не было создано специально для задачи. При этом полный текстовый поиск MySQL работает очень хорошо; однако, это не хорошо, если вам нужно масштабировать.

  1. Вы не хотите, чтобы ваш сервер БД делал больше, чем ему нужно, поскольку это, как правило, является узким местом приложения даже без чего-то вроде полнотекстового поиска.
  2. Для полнотекстового поиска MySQL требуется, чтобы вы использовали механизм MyISAM, который является проблемой, если вы заботитесь о согласованности ваших данных.
  3. MyISAM не поддерживает многие усовершенствованные средства проверки данных, поддерживаемые такими двигателями, как InnoDB, поэтому вы, как правило, находитесь в невыгодном положении, начиная с MyISAM.

Но YMMV, и если ваше приложение может выжить, если оно подвержено нарушениям MyISAM, обязательно используйте его. Просто знайте, что это не отличный движок для задач MOST (не ВСЕ, но большинство).

+0

Кстати, я не упомянул многие другие объекты MyISAM vs InnoDB, потому что я предполагаю, что они хорошо известны, и вы можете использовать эту информацию для Google. –