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

¿Cómo insertar miles de millones de datos en Redis de manera eficiente?

Algunos puntos sobre la pregunta y el código de muestra.

  1. La canalización no es una bala de plata:debe comprender lo que hace antes de usarla. Lo que hace la canalización es procesar por lotes varias operaciones que se envían de forma masiva, al igual que su respuesta desde el servidor. Lo que gana es que el tiempo de ida y vuelta de la red para cada operación se reemplaza por el del lote. Pero los lotes de tamaño infinito son una verdadera pérdida de recursos:debe mantener su tamaño lo suficientemente pequeño para que sea efectivo. Como regla general, trato de apuntar a 60 KB por canalización y, dado que cada dato es diferente, también lo es la cantidad de operaciones reales en una canalización. Suponiendo que su clave y su valor son ~1 KB, debe llamar a pipeline.execute() cada 60 operaciones más o menos.

  2. A menos que lo entienda muy mal, este código no debería ejecutarse. Estás usando HMSET como si fuera SET , por lo que básicamente te estás perdiendo el mapeo de campo->valor de hashes. Hash (HMSET ) y cadenas (SET ) son tipos de datos diferentes y, por lo tanto, deben usarse en consecuencia.

  3. Parece como si este pequeño bucle estuviera a cargo de la totalidad de los "Millones de datos". también sería muy ineficaz (independientemente de la velocidad de Python). Debe paralelizar la inserción de datos ejecutando varias instancias de este proceso.

  4. ¿Te estás conectando a Redis de forma remota? Si es así, es posible que la red esté limitando su rendimiento.

  5. Considere la configuración de su Redis; tal vez se puedan modificar/ajustar para obtener un mejor rendimiento para esta tarea, suponiendo que de hecho sea un cuello de botella.