Estoy creando una aplicación de chat y quiero un historial completo de todos los mensajes enviados en la conversación de chat. Por el momento, estoy almacenando cada mensaje como una sola fila en una tabla llamada 'mensajes'. Soy consciente de que esta tabla podría crecer mucho ya que incluso los mensajes pequeños como 'Hola' tendrían su propio registro de base de datos.
¿Alguien puede recomendar una solución mysql más escalable? No necesito que los mensajes individuales se puedan buscar, editar o eliminar. ¿Se podría almacenar toda la conversación en un campo enorme?
¡Me encantaría escuchar tus ideas!
mysql
scalability
chat
wilsonpage
fuente
fuente
Respuestas:
No hay nada de malo en guardar todo el historial en la base de datos, están preparados para ese tipo de tareas.
En realidad, puede encontrar aquí en Stack Overflow un enlace a un esquema de ejemplo para un chat: ejemplo
Si todavía está preocupado por el tamaño, puede aplicar algunas optimizaciones a los mensajes de grupo, como agregar un búfer a su aplicación que solo presione después de un tiempo (como 1 minuto más o menos); de esa manera evitarías tener solo mensajes de 1 línea
fuente
Si puede evitar la necesidad de escrituras simultáneas en un solo archivo, parece que no necesita una base de datos para almacenar los mensajes de chat.
Simplemente agregue la conversación a un archivo de texto (1 archivo por usuario \ conversación). y tener una estructura de directorio / archivo
Aquí hay una vista simplificada de la estructura del archivo:
chat-1-bob.txt 201101011029, hi 201101011030, fine thanks. chat-1-jen.txt 201101011030, how are you? 201101011035, have you spoken to bill recently? chat-2-bob.txt 201101021200, hi 201101021222, about 12:22 chat-2-bill.txt 201101021201, Hey Bob, 201101021203, what time do you call this?
Entonces solo necesitaría almacenar el ID de usuario, el ID de conversación (¿guid?) Y una referencia al nombre del archivo.
Creo que le resultará difícil obtener una solución escalable más simple.
También puede usar
LOAD_FILE
para obtener los datos, consulte: http://dev.mysql.com/doc/refman/5.0/en/string-functions.htmlSi tiene un requisito para reconstruir una conversación, deberá poner un valor (fecha y hora) junto con su mensaje de chat enviado (en el archivo) para permitirle fusionar y ordenar los archivos, pero en este punto probablemente sea una buena idea considerar el uso de una base de datos.
fuente
Puede crear una base de datos para x conversaciones que contenga todos los mensajes de estas conversaciones. Esto le permitiría agregar una nueva base de datos (o servidor) cada vez que x exceda. X es el número de conversaciones que admite su infraestructura (según su hardware, ...).
El problema sigue siendo que puede haber grandes conversaciones (con muchos mensajes) en la misma base de datos. por ejemplo, tiene la base de datos A y la base de datos B y cada una almacena, por ejemplo, 1000 conversaciones. Es posible que haya muchas más conversaciones "grandes" en el servidor A que en el servidor B (ya que este es contenido creado por el usuario). Puede agregar una base de datos "maestra" que contenga una búsqueda, en qué base de datos / servidor se pueden encontrar las conversaciones individuales (o tiene un esquema para asignar una base de datos desde hash / módulo o algo así).
Quizás puedas encontrar arquitecturas del mundo real que lidien con los mismos problemas (puede que tú no seas el primero), y que ya hayan sido resueltos.
fuente