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:
A través de Cassandra CLI
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.