Неправильный счет (*) с cassandra-cql - PullRequest
9 голосов
/ 10 января 2012

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

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

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

1 Ответ

23 голосов
/ 10 января 2012

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

SELECT count(*) FROM users limit 20000;

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

...