2012-01-05 22 views
8

Actualmente estoy investigando sobre las mejores formas de proporcionar una búsqueda avanzada para mi proyecto php.Mysql Search - InnoDB y transacciones vs MyISAM para búsqueda FULLTEXT

Lo he reducido a utilizar la búsqueda FULLTEXT en lugar de usar LIKE para buscar cadenas coincidentes en una fila de la tabla. Sin embargo, para hacer esto, parece que tengo que sacrificar el uso del motor InnoDB que me hará perder la ACIDity de transacciones y relaciones de tabla.

¿Realmente vale la pena usar el motor mysql de MYISAM o hay mejores formas de proporcionar funcionalidad de búsqueda.

¡Cualquier puntero sería apreciado!

Respuesta

7

Realmente depende de la aplicación ... Usar MyISAM para cualquier cosa que necesite integridad referencial es un error instantáneo. Al mismo tiempo, es la búsqueda de texto no es todos que eficiente.

Básicamente, hay dos maneras de hacerlo. Si encuentra que no necesita una verdadera integridad referencial, considere un datastore NoSQL. MongoDB es una gran base de datos de la tienda de documentos.

Si, por el contrario, lo que realmente necesita la integridad referencial, pero también es necesario, la búsqueda de texto completo indexado rápido, que podría hacer mejor utilizar Sphinx o Apache Solr para crear una caché indexada para la búsqueda de texto completo.

De cualquier manera, considero que MyISAM es un datastore heredado. No lo usaría en un nuevo proyecto. YMMV.

+4

palo con innodb y hacer algo como esto hasta que el rendimiento se convierte en un problema en el que el interruptor caso en Sphinx http://stackoverflow.com/questions/4732067/complex-query-for-recreating-fulltext -search-effect-on-innodb/4732982 # 4732982. Si crees que myisam es mejor, lee esto http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to- choose-the-right-one-on-a/4421601#4421601 –

3

MyISAM tiene varios inconvenientes: falta de soporte de transacciones, bloqueos a nivel de tabla, lo que hace que sea muy lento en el tipo de carga pesada de lectura y escritura. Otro inconveniente de las tablas MyISAM: no son seguros contra fallas, por lo que puede perder algunos datos en caso de apagado inesperado o pérdida de energía en el servidor. Sin embargo, MyISAM es muy rápido en algunas consultas.

En cuanto a la búsqueda de texto completo, sugeriría utilizar el motor de búsqueda externo InnoDB + como Lucene o Sphinx para que pueda beneficiarse tanto del motor de almacenamiento seguro como de las consultas rápidas de texto completo.

Para el arranque rápido con InnoDB y la Esfinge se puede hacer referencia a http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/

Cuestiones relacionadas