2012-01-09 4 views
8

私のテスト用にいくつかのユーザーを作成しようとしました。 Ruby on Rails用のcassandra-cql gemを使用して0..100000のループでユーザを作成した後、データベースのユーザ数をカウントしたところ、結果として10000人のユーザしかいませんでした。 9000を作成すると、すべて正常に動作します。最初はユーザーがいないと思っていましたが、私はCassandraのApollo WebUIを使用しました。id 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

こんにちは、ちょうど使用しているcassandraのバージョンを尋ねてもいいですか?私は 'select count(*) 'に関連する問題に直面していて、' limit'は完全に無視されているようです:http://stackoverflow.com/questions/36174805/cassandra-cql-select-count-with-limit – light

+0

これは2012年1月の質問だったので、おそらくカッサンドラ1.0.Xでした。それ以来、CQLは完全にセマンティクスを持っています。 – psanford

関連する問題