Insertar actuación con Cassandra

perdón por mi inglés de antemano.

Soy un principiante con Cassandra y su modelo de datos. Estoy tratando de insertar un millón de filas en una base de datos de cassandra en local en un nodo. Cada fila tiene 10 columnas y las inserto solo en una familia de columnas.

Con un hilo, esa operación tomó alrededor de 3 minutos. Pero me gustaría hacer la misma operación con 2 millones de filas y pasar un buen rato. Luego probé con 2 hilos para insertar 2 millones de filas, esperando un resultado similar alrededor de 3-4 minutos. PERO obtengo un resultado como 7min ... el doble del primer resultado. Como reviso en diferentes foros, se recomienda el multihilo para mejorar el rendimiento. Es por eso que hago esa pregunta: ¿es útil usar subprocesos múltiples para insertar datos en el nodo local (el cliente y el servidor están en la misma computadora), en una sola familia de columnas?

Algunas informaciones: - Yo uso pycassa - He separado el repertorio de registros de confirmación y el repertorio de datos en diferentes discos - Utilizo inserción por lotes para cada hilo - Nivel de consistencia: UNO - Factor de replicación: 1

preguntado el 10 de mayo de 11 a las 13:05

¿Alguna vez encontró una solución a esto? Tengo un problema similar y no encuentro ninguna solución. -

4 Respuestas

Es posible estás golpeando el Python GIL pero lo más probable es que estés haciendo algo mal.

Por ejemplo, poner 2 millones de filas en un solo lote sería hacerlo mal.

contestado el 10 de mayo de 11 a las 17:05

Gracias por tu respuesta. No voy a poner 2 millones de filas en un solo lote. Cada hilo se conecta a la base de datos e inserta 1 millón de filas con un lote configurado con un tamaño de cola de 1000. - C. Orán

Debe comenzar con contrib / stress porque entonces sabrá que la parte de generación de carga no es el problema. - jbellis

Intente ejecutar varios clientes en varios procesos, NO en subprocesos.

Luego experimente con diferentes tamaños de inserto.

Las inserciones de 1 M en 3 minutos son aproximadamente 5500 inserciones / seg, lo cual es bastante bueno para un solo cliente local. En una máquina de varios núcleos, debería poder obtener varias veces esta cantidad siempre que utilice varios clientes, probablemente insertando pequeños lotes de filas o filas individuales.

contestado el 11 de mayo de 11 a las 01:05

Gracias por tu ayuda. Solo estoy cambiando mi programa con múltiples procesos (una bifurcación) pero sin mejoras. Estoy pensando que mi programa es demasiado complejo: lee en un archivo csv, inserta datos en lotes y luego los envía a la base de datos. Usé el comando de tiempo y el tiempo del usuario fue de alrededor de 2 minutos ... Para un solo cliente local (con 4 núcleos), probablemente sea demasiado programar mi programa y la base de datos al mismo tiempo. C. Orán

Podría considerar Redis. Se supone que su rendimiento de un solo nodo es más rápido. Sin embargo, es diferente de Cassandra, por lo que si es una opción adecuada o no dependerá de su caso de uso.

contestado el 21 de mayo de 11 a las 04:05

Sí, escuché sobre Redis, pero desafortunadamente no es una buena combinación para mi modelo de datos ... - C. Orán

El tiempo necesario se duplicó porque insertó el doble de datos. ¿Es posible que esté vinculado a E / S?

Respondido el 13 de diciembre de 11 a las 18:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.