Mysql Search — InnoDB и транзакции против MyISAM для полнотекстового поиска

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

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

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

Любые указатели будут оценены!


person Daniel West    schedule 05.01.2012    source источник


Ответы (3)


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

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

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

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

person Jason Lewis    schedule 05.01.2012
comment
придерживайтесь innodb и делайте что-то подобное, пока производительность не станет проблемой, и в этом случае переключитесь на sphinx on-innodb/4732982#4732982" title="сложный запрос для воссоздания эффекта полнотекстового поиска в innodb">stackoverflow.com/questions/4732067/. Если вы считаете, что myisam лучше прочитать это stackoverflow.com/questions/4419499/ - person Jon Black; 06.01.2012

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

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

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

person vfedorkov    schedule 06.01.2012

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

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

person Morgan Tocker    schedule 18.11.2013