Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/05/2013, 08:11
kikeking1
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 14 años, 11 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