使用cassandra-cql错误计数(*)

时间:2012-01-09 22:16:49

标签: cassandra cql

我尝试为我的测试创建一些用户。我使用用于Ruby on Rails的cassandra-cql gem在0..100000的循环中创建用户,然后我计算了数据库中的用户,结果只有10000个用户。如果我创建9000,一切正常。首先我认为用户不存在,但我使用了Apollo WebUI for Cassandra,我可以找到ID为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 个答案:

答案 0 :(得分:23)

CQL操作限制了行数和将返回给用户的列数。默认情况下,限制为10,000。因为count(*)操作实际上必须获取所有行以获取计数,所以它也受到默认值10,000行的限制。您可以增加查询的限制(虽然我不建议):

SELECT count(*) FROM users limit 20000;

请注意,这是一项昂贵的操作,尤其是当您有很多行时。您应该预计这种类型的查询可能需要很长时间才能用于任何中型或大型数据集。如果可能的话,您应该将此计数非规范化为计数器或其他形式,不需要获取列族中的所有行。