Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

¿InnoBD con like o MyISAM con fulltext?

Estas en el tema de ¿InnoBD con like o MyISAM con fulltext? en el foro de Mysql en Foros del Web. Buenas a todos, Hoy lo que traigo no es un problema, si no una duda de planteamiento orientada a funcionabilidad futura. Veamos la puesta en ...
  #1 (permalink)  
Antiguo 27/05/2013, 08:11
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 15 años, 5 meses
Puntos: 17
Pregunta ¿InnoBD con like o MyISAM con fulltext?

Buenas a todos,

Hoy lo que traigo no es un problema, si no una duda de planteamiento orientada a funcionabilidad futura. Veamos la puesta en escena de la situación:

Tengo un sistema de usuarios, con una tabla principal donde se guardan los datos de cuenta, y otra tabla para los datos personales (mas sometida a ediciones continua que la primera). Bien nos centraremos en la primera tabla, la de las cuentas.
En esta tabla, como en cualquier sistema de datos de usuarios, hay inserciones, modificaciones y sobretodos consultas de datos. Por lo que en principio me descarto más por una base de datos en InnoDB, pero ahi un detalle importante, que es la posibilidad de busquedas por nombre de usuario.

El nombre del usuario, puede ser un alias (una única palabra) o un nombre "real", con su nombre + 2 apellidos. Todo se guarda en el mismo campo, y esto es imperiosamente necesario que sea así, no puedo meterlos en campos separados pues nunca se a ciencia cierta que tipo de nombre pondra el usuario (el nombre puede ser tanto capturado por la api de facebook, como insertado por el usuario a mano en un formulario).
Para hacer las busquedas de un termino, tenemos el metodo like bastante práctico para el caso, pero para las busquedas de varios terminos, aqui like se vuelve un verdadero demonio.

Y es esta mi cuestión y lo que me gustaria que me comentarais vuestra experiencia y opiniones sobre que camino seria el más sensato seguir.
Apostar por un sistema solido de inserciones y consultas (InnoDB) ó
Apostar por un sistema solido de busquedas fulltext (MyISAM)


Yo en principio, opino que lo más interesante es siempre asegurar las correctas actualizaciones e inserciones de datos, algo que innodb ofrece, pero me obliga a realizar las busquedas mediante like (y todos sabemos que no trabaja demasiado bien varios terminos y los problemas de rendimientos que puede causar).


Sobre que prioridades tiene esto en mi proyecto... Pues es un sitio de contactos, por lo que las busquedas son una de la parte más importante del proyecto, aunque obviamente no la unica (hay sistema de mensajeria, favoritos, etc.. que requieren muchas insersiciones/consultas. Todas, aúnque en diferentes tablas, siempre ligadas a la tabla de cuentas por el identificador del usuario a que corresponda ). En principio no debería influir en nada, pero como añadido destacable, estoy corriendo mysql sobre nodejs (es mysql de verdad, nada de mongo o progrest). Sobre el volumen, inicialmente comenzaremos sobre los 800 1000 usuarios, pero la idea es que estos crezcan de forma exponencial antes de final de año (ya que lo consigamos o no, es otra cosa, jeje, pero el sistema ha de estar preparado para esto y más. bastante más)

¿Me merece la pena trabajar con MyISAM solo por la busqueda de nombres (es el unico cambio "aleatorio" realmente que hay, las demas opciones estan parametrizadas y son introducidas por el usuario mediante select, por lo que su referencias en la base de datos son INT) o es preferible que haga esto con Like, en tal caso ¿Cuantos problemas me podria traer esto en el futuro?

Y si se os ocurre otra forma de llevar acabo lo que estoy intentando, bien venida sea, no le hago asco a nada :) . Lo que más prima, es que sea la opción mas optimizada posible de cara a soportar gran volumen de trafico (tantos de usuarios silmultaneos, como continuas peticiones de estos).

Y bueno, siento el tochazo, pero necesitaba explicar detalladamente los puntos más importantes, si alguien llega a leer hasta esta linea, y se anima a contestar, le estare agradecido y seguramente estos conocimientos hagan bien a futuros usuarios que llegen hasta el hilo.

Un saludo a la comunidad, y de nuevo, gracias por haber dedicado algo de tiempo a leer este hilo y a comentar.

Última edición por kikeking1; 27/05/2013 a las 08:17
  #2 (permalink)  
Antiguo 28/05/2013, 01:11
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 15 años, 5 meses
Puntos: 17
Respuesta: ¿InnoBD con like o MyISAM con fulltext?

Probemos de otra forma...

¿Ustedes que usan en su proyectos del día a día, MyISAM o InnoDB?¿Y porque?

Un saludo.
  #3 (permalink)  
Antiguo 28/05/2013, 08:10
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: ¿InnoBD con like o MyISAM con fulltext?

Hola kikeking1:

Cita:
¿Ustedes que usan en su proyectos del día a día, MyISAM o InnoDB?¿Y porque?
En realidad todo depende de las necesidades del proyecto...

Creo que en tu primer post lo mencionas correctamente, la ventaja de las tablas InnoDB te sirven para mantener integridad referencial en los datos cuando haces actualizaciones continuas, si es el caso bueno, esta sería la primer opción...

Recuerdo que hace tiempo, un compañero me dio un ejemplo muy bueno de cuando usar un motor u otro... imagina que tienes que almacenar los datos de un Censo de Población... al momento de la captura es importante que toda la información captada tenga una integridad referencial fuerte, por lo tanto para la fase de la captura deberías optar por un modelo con tablas InnoDB.

Sin embargo, una vez concluido el Censo, LA INFORMACIÓN NO VA A CAMBIAR, es decir una vez procesada no harás más inserciones ni actualizaciones PORQUE ES INFORMACIÓN HISTÓRICA QUE NO CAMBIA, por lo tanto, para la explotación de la información podrías optar por un modelo con tablas MyISAM e implementar búsquedas de texto completo.

Por lo tanto, no existe en detinitiva un "MEJOR" modelo, insisto, todo depende de tus necesidades... podrías también implementar un modelo mixto, es decir, por un lado tener tu modelo con InnoDB y todas las referencias, pero también manejar una tabla MyISAM sólo con los nombres y las llaves de identificación... el detalle es cómo "sincronizar" estos dos modelos.

Finalmente, te recuerdo que las consultas LIKE no son del todo malas, y tienes otras opciones, como expresiones regulares... es cuestión de que hagas algunas pruebas y veas si en realidad se afectará el rendimiento de tu BD al hacer estas consultas.

Saludos
Leo.
  #4 (permalink)  
Antiguo 28/05/2013, 08:41
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 15 años, 5 meses
Puntos: 17
Respuesta: ¿InnoBD con like o MyISAM con fulltext?

Bueno, lo primero de todo, gracias por animarte a contestar Leo,

Finalmente llege a la misma conclusión que me expones, y realize un sistema mixto sacando ideas de esta entrada que encontre ( http://aspymvc.com/utilizar-fulltext...b/#comment-714 )

Básicamente deje la misma estructura en innoDB que ya tenia y cree una segunda tabla con los campos de textos sobre los que en algun momento realizo busquedas.

Esta segunda tabla, la mantengo siempre sincronizada con la original mediante los triggers y ejecuto sobre ella los fulltext (esta segunda tabla si es myISAM) devolviendome en respuesta los identificadores que necesito para obtener la información de las tablas principales.

Luego desde el script hago una discriminacion si es 1 o más terminos y eligo si realizar el math agains o el like

Como es una consulta con varias tablas unidas, desde esta unica sentencia obtengo directamente todos los campos que necesitos, ya filtrados.


--------------------

Tambien mientras googleaba en busqueda de soluciones, me encontre con este motor de busqueda que pinta muy muy bien: http://sphinxsearch.com/docs/2.1.1/

Lo descarte para mi caso porque no me merecia la pena añadir un motor tan complejo para realizar la busqueda de un texto. Pero el algo que me apunte pues estoy seguro usare en el futuro, y como dedique tiempo en encontrarlo, pues aprobecho y lo comparto aqui con ustedes por si alguno no lo conocia.

Un saludo a la comunidad, y de nuevo gracias a Leo por su participación. :)

Etiquetas: fulltext, innodb, myisam
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:42.