Esto es posible un problema por el cual perdí más tiempo para pensar cómo hacer las cosas correctas, pensando en la mejor manera optimizada para hacerlo.La mejor manera de hacer un sistema "hashtag"
Tengo una tabla "Contenido", y necesito agregar la opción para asociar varios "hashtags" o "etiquetas" o "palabras clave" a los contenidos, por ejemplo, el contenido como "patatas fritas con ketchup" tiene el "llaves": "papa", "ketchup" y "frito".
Y cuando hago una búsqueda por una palabra, por ejemplo "patata", necesito mostrar los contenidos que tienen etiquetas esta palabra.
La pregunta es, ¿cuál es la mejor estructura para hacer esto, pensando en la velocidad de los resultados porque la tabla de contenido es un MyISAM con más de 30 Millones de filas.
Creo que en esto:
hacer 2 más mesas, "contents_hashtags" (id(INT11), content_id(INT11), hashtag_id(INT11))
y "hashtags" (id(INT11), hashtag(VARCHAR(40)))
las 2 tablas en InnoDB
Cuando el usuario crear/modificar el contenido de la tabla, que busco en el tabla de hashtags y obtener los ID, si hay un hashtag que no existe, créelo en el hashtag de la tabla, si existe, obtenga el ID, usando estos IDs cree los insertos en la tabla contents_hashtas que asocian contenidos < -contents_hashtas-> hashtahs
En la búsqueda, realice las UNIONES (IZQUIERDA/RIGHT/INNER dude ..) y hacer una búsqueda por LIKE ?? por exacto (hashtag = "XXX") o BÚSQUEDA DE TEXTO COMPLETO?
¿Es este método correcto/rápido? No sé cómo funciona esto con unas grandes cantidades de filas y de gran tráfico ..
Qué son los métodos de ayunar en la búsqueda? el método de 3 tablas o 2 tablas? En el método de la tabla 3 hay una relación directa por JOINs, pero en el método de la tabla 2 el hashtag está "duplicado" para los contenidos (porque id + hashtag no se puede repetir). Si realizo una búsqueda, por ejemplo: content.active = 1 AND (contents.name = 'xxx' OR (Contags.hashtag = 'XXX' y Content.id = Contags.content_id)) – Zenth
Upvoted para "Alternativamente, establezca Hashtags Name and ContentId como clave única". Ninguna necesidad de 3 tablas 2 será suficiente. – DeepBlue