2012-01-09 10 views
8

Intenté crear algunos usuarios para mis pruebas. Creé usuarios en un bucle desde 0..100000 usando la gema cassandra-cql para Ruby on Rails, y luego conté a los usuarios en mi base de datos y solo hubo 10000 usuarios como resultado. Si creo 9000, todo funciona bien. Primero pensé que los usuarios no existían, pero utilicé Apollo WebUI para Cassandra, y pude encontrar al usuario con el ID 100000 y los usuarios a continuación. ¿Por qué pasó esto?Cuenta incorrecta (*) con cassandra-cql

Sé que debo usar una columna de contador para proporcionar la cantidad de usuarios en mi aplicación, pero quiero saber si esto es un error o una falla mía.

def self.create_users 
    (0..19000).each do |f| 
    @@db.execute("INSERT INTO users (uid, first_name, last_name, email) VALUES (?,?,?,?)", f.to_s, "first_name", "last_name", "email") 
    end 
end 

def self.count_users 
    count = @@db.execute("SELECT count(*) FROM users") 
    count.fetch do |c| 
    return c[0] 
    end 
end 

Respuesta

23

Las operaciones de CQL limitan el número de filas y el número de columnas que se devolverán al usuario. Por defecto, ese límite es 10,000. Debido a que la operación de recuento (*) en realidad tiene que extraer todas las filas para obtener el recuento, también está limitada por el valor predeterminado de 10.000 filas. Se podría aumentar el límite para la consulta (aunque yo no lo recomiendo):

SELECT count(*) FROM users limit 20000; 

Tenga en cuenta que esta es una operación costosa, especialmente cuando se tiene una gran cantidad de filas. Debe anticipar que este tipo de consulta puede llevar mucho tiempo para cualquier conjunto de datos de tamaño mediano o grande. Si es posible, debe desnormalizar este conteo en un contador o en alguna otra forma que no requiera recuperar todas las filas en su familia de columnas.

+1

gracias por eso! – user934801

+0

Hola, ¿puedo preguntar qué versión de cassandra estás usando? Estoy frente a un problema relacionado con 'select count (*)' y 'limit' parece ser totalmente ignorado: http://stackoverflow.com/questions/36174805/cassandra-cql-select-count-with-limit – light

+0

This La pregunta era de enero de 2012, por lo que probablemente Cassandra 1.0.X. CQL ha sido revisado desde entonces y ahora tiene una semántica completamente diferente. – psanford

Cuestiones relacionadas