2011-09-21 29 views
16

Estoy tratando de cargar una gran cantidad de datos en Redis lo más rápido posible.Ingesta masiva en Redis

Mis datos se parece a:

771240491921 SOME;STRING;ABOUT;THIS;LENGTH 
345928354912 SOME;STRING;ABOUT;THIS;LENGTH 

Hay un número de dígitos ~ 12 a la izquierda y una cadena de longitud variable a la derecha. La clave va a ser el número de la izquierda y los datos van a ser la cadena de la derecha.

En mi ejemplo Redis que acabo de instalar fuera de la caja y con un archivo de texto sin formato sin comprimir con estos datos, que puede obtener alrededor de un millón de discos en un minuto. Necesito hacer unos 45 millones, lo que tomaría unos 45 minutos. 45 minutos es demasiado largo.

¿Existen algunos ajustes de rendimiento estándar para hacer este tipo de optimización? ¿Obtendría un mejor rendimiento al combinar en distintas instancias?

Respuesta

26

La forma más rápida de hacerlo es la siguiente: generar el protocolo Redis fuera de estos datos. La documentación para generar el protocolo Redis está en el sitio Redis.io, es un protocolo trivial. Una vez que tenga eso, simplemente llámelo appendonly.log y comience redis en el modo de solo agregar.

Incluso puede hacer un comando FLUSHALL y finalmente enviar los datos a su servidor con netcat, redirigiendo la salida a/dev/null.

Esto será muy rápido, no hay RTT que esperar, solo es una carga masiva de datos.

Manera menos hackosa, solo inserte cosas 1000 por vez usando la canalización. Es casi tan rápido como generar el protocolo, pero mucho más limpio :)

+0

¿Qué usa actualmente para insertar datos en Redis? – antirez

+0

¡Gracias! Impresionante para obtener una respuesta directamente de usted :) –

+0

Estaba ingiriendo con la interfaz cli creando un archivo que es comandos cli, como: 'establecer 771240491921 ALGO; STRING; SOBRE; ESTO; LONGITUD' y luego conectarlo a redis-cli –

2

Me gusta lo que ha propuesto Salvadore, pero aquí está una forma más clara: generar feed para cli, p.

SET xxx yyy 
SET xxx yyy 
SET xxx yyy 

hágalo en cli en el servidor cerca de usted. A continuación, guarde, cierre y mueva el archivo de datos al servidor de destino.

+0

Me gusta mucho la simplicidad en esta idea. ¡Gracias! –