2012-01-09 6 views
8

Я попытался создать некоторых пользователей для моего тестирования. Я создал пользователей в цикле от 0..100000, используя камень cassandra-cql для Ruby on Rails, а затем я подсчитал пользователей в моей базе данных, и в результате получилось всего 10000 пользователей. Если я создам 9000, все будет хорошо. Сначала я думал, что пользователей не существует, но я использовал Apollo WebUI для Cassandra, и я мог найти пользователя с идентификатором 100000 и ниже. Почему это происходит?Неверный счет (*) с cassandra-cql

Я знаю, что я должен использовать столбец-столбец, чтобы указать количество пользователей в моем приложении, но я хочу знать, является ли это ошибкой или неудачей.

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 

ответ

23

Операции CQL ограничивают как количество строк, так и количество столбцов, которые будут возвращены пользователю. По умолчанию этот предел составляет 10 000. Поскольку операция count (*) фактически должна извлекать все строки, чтобы получить счет, она также ограничена значением по умолчанию 10 000 строк. Вы можете увеличить лимит для запроса (хотя я не рекомендую):

SELECT count(*) FROM users limit 20000; 

Обратите внимание, что это является дорогостоящей операцией, особенно если у вас есть много строк. Вы должны ожидать, что этот тип запроса может занять много времени для любого набора данных среднего или большого размера. Если это вообще возможно, вы должны денормализовать этот счетчик в счетчик или какую-либо другую форму, которая не потребует выборки всех строк в вашем семействе столбцов.

+1

спасибо за это! – user934801

+0

Привет, могу я просто спросить, какую версию кассандры вы используете? Я сталкиваюсь с связанной проблемой с 'select count (*)' и 'limit', кажется, полностью игнорируется: http://stackoverflow.com/questions/36174805/cassandra-cql-select-count-with-limit – light

+0

Это вопрос был с января 2012 года, поэтому он, скорее всего, был Cassandra 1.0.X. С тех пор CQL был переработан и теперь имеет совершенно другую семантику. – psanford

Смежные вопросы