2

ユーザー プロファイルを含むファイルを 5M プロファイルの cassandra に書き込んでいます。書き込み操作は正常に終了しました。列ファミリーの行数を数えたいです。

Keyspace keyspaceOperator = HFactory.createKeyspace(KEY_SPACE, cluster);
CqlQuery<String,String,Long> cqlQuery = new CqlQuery<String,String,Long>(keyspaceOperator, se, se, new LongSerializer());
cqlQuery.setQuery("SELECT COUNT(*) FROM up");
QueryResult<CqlRows<String,String,Long>> result = cqlQuery.execute();
System.out.println(result.get().getAsCount());

しかし、次のコードは常に 10000 を出力します。何が間違っているのでしょうか? そして、どうすればcliからこの操作を行うことができますか?

4

4 に答える 4

1

今のところできません。クエリごとに 10,000 行の既定の制限があります。これには未解決のチケットがあります (CASSANDRA-3702) が、まだ修正されていません。

于 2012-07-29T22:54:51.967 に答える
1

カウントしたい大きさの制限を与えるだけです。カウントが 1e9 を超えるとは思わない場合は、次のようにします。

SELECT COUNT(*) FROM up LIMIT 1000000000;

ただし、COUNT (および RangeSlicesQuery も) はまったくパフォーマンスが高くないことに注意してください。それらは本質的に、リレーショナル db 用語の「順次スキャン」と同じです。カウンタは、分散システムでこの種の問題に対処するための優れた方法です。

于 2012-07-30T16:24:15.473 に答える
1

これを行う例については、こちらを参照してください。

コードは自由に使用できます。Astyanaxは から分岐しておりHector、 で非常に優れたCassandraクライアントであることがわかりましたJava

于 2012-09-10T07:17:01.723 に答える
1

他の唯一の代替手段は、RangeSlicesQuery を介して反復することです。行と合計列の両方をカウントする「国勢調査」プログラムを作成しました。これは long タイプのバージョンです。ただし、これが頻繁に行われる場合は、別のカウンター列を使用して追跡するのが一般的な通念のようです。ここでいくつかの議論

于 2012-07-30T14:08:08.547 に答える