sql >> Base de Datos >  >> NoSQL >> Redis

¿Incrementar cientos de contadores a la vez, redis o mongodb?

Dependiendo de cómo esté diseñada su estructura clave, recomendaría canalizar los comandos zincr. Tiene un disparador de "compromiso" fácil:la solicitud. Si tuviera que iterar sobre sus parámetros y zincr cada tecla, al final de la solicitud, pase el comando de ejecución, será muy rápido. Implementé un sistema como el que usted describe como una aplicación cgi y Django. Configuré una estructura clave a lo largo de las líneas de esto:

AAAA-MM-DD:HH:MM -> conjunto ordenado

Y fue capaz de procesar algo así como 150000-200000 incrementos por segundo en el lado redis con un solo proceso que debería ser suficiente para el escenario descrito. Esta estructura clave me permite capturar datos basados ​​en ventanas de tiempo. También agregué un vencimiento a las claves para evitar escribir un proceso de limpieza de db. Luego tuve un cronjob que establecería operaciones para "resumir" estadísticas en horas, días y semanas usando variantes del patrón clave mencionado anteriormente. Menciono estas ideas ya que son formas en que puede aprovechar las capacidades integradas de Redis para simplificar el lado de los informes. Hay otras formas de hacerlo, pero este patrón parece funcionar bien.

Como señaló eyossi, el bloqueo global puede ser un problema real con los sistemas que realizan escrituras y lecturas simultáneas. Si está escribiendo esto como un sistema en tiempo real, la concurrencia puede ser un problema. Si se trata de un sistema de análisis de registro "fin del día", probablemente no desencadenaría la disputa a menos que ejecute varias instancias del analizador o informes en el momento de la entrada. Con respecto a mantener las lecturas rápidas en Redis, consideraría configurar una instancia de redis de solo lectura esclavizada fuera de la principal. Si lo coloca en el servidor que ejecuta el informe y apunta el proceso de informes hacia él, debería ser muy rápido generar los informes.

Según la memoria disponible, el tamaño del conjunto de datos y si almacena cualquier otro tipo de datos en la instancia de redis, puede considerar ejecutar un servidor redis de 32 bits para mantener bajo el uso de la memoria. Una instancia de 32b debería poder mantener una gran cantidad de este tipo de datos en una pequeña parte de la memoria, pero si ejecutar Redis normal de 64 bits no requiere demasiada memoria, no dude en usarlo. Como siempre, pruebe sus propios patrones de uso para validar