Estoy jugando con la construcción de una aplicación de chat usando PHP y CodeIgniter.Uso de memcached como buffer de base de datos para mensajes de chat
Para esto, estoy implementando un 'buffer' de caché con memcached para contener los mensajes de chat más recientes en la memoria, reduciendo la carga en la base de datos. Lo que quiero hacer es lo siguiente:
- Cuando llega un mensaje, lo guardo en memcached usando el minuto actual (AAAA-MM-DD-HH-MM) como la clave. No hay E/S de base involucrada. La idea es que todos los mensajes del mismo minuto se recopilen bajo la misma clave.
- Los usuarios reciben nuevos mensajes de chat también recuperados de memcached (por el momento estoy usando long-polling, pero esto se moverá a WebSockets en Node.js por razones obvias de rendimiento). Nuevamente, no hubo E/S en la base de datos involucrada.
- Se ejecutará una secuencia de comandos del servidor automatizada (cronjob) una vez cada 5 minutos, recopilando los datos de memoria de los últimos 5 minutos e insertando los mensajes en la base de datos.
- Los objetos memcached se establecen para echarse a perder después de 6 minutos, por lo que nunca necesitan mantener más de 6 minutos de datos de mensajes en la memoria
Esto para un total de operación de escritura una base de datos por 5 minutos y cero operaciones de lectura de base de datos.
¿Esto suena factible? ¿Hay alguna forma mejor (¿incluso integrada?) De usar memcached para este fin?
actualización: He estado experimentando un poco ahora, y tengo una idea para un acceso directo (es decir: piratear). Puedo 'almacenar temporalmente' los mensajes temporalmente en el script del servidor Node.js hasta que esté listo para almacenarlos. Un objeto/conjunto de mensajes de Javascript en el servidor Node.js es básicamente un caché de memoria, más o menos.
Entonces: Cada N mensajes/segundos, puedo pasar los mensajes almacenados en el búfer (los contenidos de la matriz JS) a mi base de datos, utilizando el método que desee, ya que no se llamará con mucha frecuencia.
Sin embargo, me preocupa que esto pueda paralizar el proceso del servidor Node.js, ya que probablemente no disfrutará transportar esa matriz de 200 KB.
¿Alguna idea de esta estrategia? ¿Está completamente loco?
Tecnologías a tener en cuenta: COMET y erlang/jabber (Facebook utilícelas) O: HTML5 y Web Sockets (con un respaldo de socket flash - Google para estos) –