Mysql Search - InnoDB и транзакции против MyISAM для поиска FULLTEXT - PullRequest
8 голосов
/ 06 января 2012

В настоящее время я занимаюсь поиском лучших способов обеспечить расширенный поиск для моего проекта php.

Я сузил его до использования поиска FULLTEXT, а не LIKE для поиска подходящих строк в строке таблицы.,Однако, чтобы сделать это, кажется, мне нужно пожертвовать с помощью механизма InnoDB, который заставит меня потерять КИСЛОТНОСТЬ транзакций и связей таблиц.

Действительно ли стоит использовать механизм MYISAM mysql или есть лучшие способы предоставленияфункциональность поиска.

Будем благодарны за любые указатели!

Ответы [ 3 ]

8 голосов
/ 06 января 2012

Это действительно зависит от приложения ... Использование MyISAM для всего, что требует ссылочной целостности, - это мгновенный сбой.В то же время, текстовый поиск не настолько эффективен, чем all .

В принципе, есть два пути.Если вы обнаружите, что вам не нужна истинная ссылочная целостность, рассмотрите хранилище данных NoSQL. MongoDB - отличная база данных хранилища документов.

Если, с другой стороны, вам действительно нужна ссылочная целостность, но также требуется быстрый полнотекстовый поиск по индексу, вам лучше использовать Sphinx или Apache Solr для создания индексированного кэша для полнотекстового поиска.

В любом случае, я считаю MyISAM устаревшим хранилищем данных.Я бы не использовал его в новом проекте.YMMV.

4 голосов
/ 06 января 2012

MyISAM имеет несколько недостатков - отсутствие поддержки транзакций, блокировки на уровне таблиц, что делает его очень медленным при интенсивном типе чтения + записи. Еще одно неудобство таблиц MyISAM - они не защищены от сбоев, поэтому вы можете потерять некоторые данные в случае неожиданного отключения или потери питания на сервере. Однако MyISAM очень быстро выполняет некоторые запросы.

Что касается полнотекстового поиска, я бы предложил использовать внешнюю поисковую систему InnoDB +, такую ​​как Lucene или Sphinx, чтобы вы могли воспользоваться как безопасным и надежным механизмом хранения, так и быстрыми полнотекстовыми запросами.

Для быстрого запуска с InnoDB и Sphinx вы можете обратиться к http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/

3 голосов
/ 19 ноября 2013

MySQL 5.6 поддерживает индексы FULLTEXT с InnoDB (выпущено в феврале 2013 г.). См:

http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html

...