9

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

1 回答 1

23

CQL 操作限制将返回给用户的行数和列数。默认情况下,该限制为 10,000。因为 count(*) 操作实际上必须取出所有行才能获得计数,所以它也受到默认 10,000 行的限制。您可以增加查询的限制(尽管我不推荐):

SELECT count(*) FROM users limit 20000;

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

于 2012-01-10T02:27:53.773 回答