java performance nosql cassandra hector

java - Bajo rendimiento de escritura de Cassandra



performance nosql (2)

¿Cuántos hilos / procesos está usando para realizar inserciones? Las llamadas de Hector son síncronas, por lo que si solo está utilizando 1 hilo en el lado del cliente, ese puede ser su cuello de botella.

Soy nuevo en NoSQL y Cassandra. Estoy experimentando con configuraciones para lograr una solución de memoria caché única. Estoy procesando leyendo línea por línea desde un archivo de 100000 líneas y usando Héctor para insertarlo en Cassandra. Estoy notando un rendimiento muy bajo de alrededor de 6000 insertos por segundo. Toda la operación de escritura es de aproximadamente 20.5 segundos, lo cual es inaceptable para nuestra aplicación. Necesitamos algo así como 100000 inserciones por segundo. Estoy probando en una computadora con Windows 7 con 4 GB de RAM.

Estoy haciendo una prueba de inserción única.

Amablemente déjame saber dónde me estoy equivocando. Amablemente sugiera cómo puedo mejorar las inserciones por segundo.

Keyspace: Keyspace1 Read Count: 0 Read Latency: NaN ms. Write Count: 177042 Write Latency: 0.003106884242157228 ms. Pending Tasks: 0 Column Family: user SSTable count: 3 Space used (live): 17691 Space used (total): 17691 Number of Keys (estimate): 384 Memtable Columns Count: 100000 Memtable Data Size: 96082090 Memtable Switch Count: 1 Read Count: 0 Read Latency: NaN ms. Write Count: 177042 Write Latency: NaN ms. Pending Tasks: 0 Key cache capacity: 150000 Key cache size: 0 Key cache hit rate: NaN Row cache capacity: 150000 Row cache size: 0 Row cache hit rate: NaN Compacted row minimum size: 73 Compacted row maximum size: 924 Compacted row mean size: 784

He intentado algunos métodos para configurar el caché de filas y el caché de claves:

  1. A través de Cassandra CLI

  2. A través de NodeCmd: java org.apache.cassandra.tools.NodeCmd -p 7199 setcachecapacity Usuario de Keyspace1 150000 150000


No describiría 6000 escrituras por segundo como "lento", pero Cassandra puede hacerlo mucho mejor. Pero tenga en cuenta que Cassandra está diseñado para escritura duradera, por lo que puede ofrecer un rendimiento menor que las soluciones de almacenamiento en caché solo en memoria.

Como dice sbridges, no se puede obtener un rendimiento completo de Cassandra con un solo cliente. Intente utilizar múltiples hilos de clientes, procesos o máquinas.

No creo que obtenga 100.000 escrituras por segundo en un solo nodo. Solo obtuve alrededor de 20,000-25,000 escrituras por segundo en hardware modesto (aunque Cassandra se ha vuelto mucho más rápido desde que hice ese benchmarking). 6000 por segundo parece ser el adecuado para un solo cliente frente a un único nodo de productos.

Con un grupo de nodos, definitivamente puede obtener 100.000 por segundo (consulte http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html para obtener un punto de referencia reciente de 1,000,000 de escrituras por segundo).

El caché de filas y el caché de claves ayudan a leer el rendimiento, no al rendimiento de escritura.

Además, asegúrese de que está procesando las escrituras (si corresponde), esto reducirá la sobrecarga de la red.