Todavía estamos evaluando a Cassandra para nuestra tienda de datos. Como una prueba simple de muy, inserté un valor para 4 columnas en la familia de columnas Keyspace1/Standard1 en mi máquina local que asciende a aproximadamente 100 bytes de datos. Luego lo leí tan rápido como pude por la tecla de la fila. Puedo leerlo a 160,000/segundo. Estupendo.Velocidad de lectura aleatoria de Cassandra
Luego puse un millón de registros similares, todos con claves en forma de X.Y donde X en (1..10) y Y en (1..100,000) y solicité un registro aleatorio. El rendimiento cayó a 26,000 consultas por segundo. Esto todavía está muy por encima del número de consultas que necesitamos admitir (alrededor de 1.500/seg)
Finalmente coloqué diez millones de registros desde 1.1 hasta 10.1000000 y consulté aleatoriamente uno de los 10 millones de registros. El rendimiento es abismal a 60 consultas por segundo y mi disco se agita como loco.
También verifiqué que si pido un subconjunto de los datos, digamos los 1,000 registros entre 3,000,000 y 3,001,000, regresa lentamente al principio y luego cuando caché, acelera hasta 20,000 consultas por segundo y mi disco deja de volverte loco
He leído que las personas están almacenando miles de millones de registros en Cassandra y llevándolos a 5-6k por segundo, pero no puedo llegar a nada con solo 10mil registros. ¿Alguna idea de lo que estoy haciendo mal? ¿Hay alguna configuración que deba cambiar de los valores predeterminados? Estoy en una caja Core i7 overclocked con 6gigs de ram, así que no creo que sea la máquina.
Aquí está mi código en busca de registros, que estoy de desove en 8 hilos de pedir un valor de una columna a través de una fila de clave:
ColumnPath cp = new ColumnPath(); cp.Column_family = "Standard1"; cp.Column = utf8Encoding.GetBytes ("sitio"); string clave = (1 + sRand.Next (9)) + "." + (1 + sRand.Next (1000000)); ColumnOrSuperColumn logline = client.get ("Keyspace1", clave, cp, ConsistencyLevel.ONE);
Gracias por cualquier idea
Definitivamente no podemos incluirlos a todos en la memoria, pero 10mil registros no parece mucho. ¿Cómo se enfrentan las personas con miles de millones de registros? –
La clave es mantener tanto como sea posible en la memoria RAM, no en el disco. Para gestionar miles de millones de registros, los distribuirá en varias máquinas y los utilizará en su conjunto. Aquí hay un artículo muy bueno [1] sobre cómo se logra esto en Riak, otra popular solución NoSQL. Muchos de los aspectos discutidos en el artículo también se aplican a Cassandra, ya que están basados en las mismas ideas fundamentales. [1]: https://wiki.basho.com/display/RIAK/An+Introduction+to+Riak –