2016-09-27 13 views
1

Cassandraの文書によると、executeを選択クエリの結果として得ることは、完全な結果を返すことを保証するものではありません。カサンドラの検索結果の詳細を見る

ResultSet execute(Statement文)指定されたクエリを実行します。 このメソッドは、少なくともデータベースから の結果を受け取るまでブロックします。ただし、SELECTクエリの場合、結果が完全に受信されたことを保証するものではありません。 しかし、 の応答がデータベースから受信されたことを保証します。特に、 は、要求が無効な場合、このメソッドによって例外がスローされることを保証します。

したがって、クエリの完全な結果を返すAPIがある場合、そのように実装するにはどうすればよいですか?今すぐStatementを作成し、Sessionクラスのexecuteメソッドを使用して結果を取得します。しかし、それはいつもうまくいかないようなドキュメンテーションに基づいています。

答えて

2

ドキュメントでは、ドライバのページング動作について説明しています。全体の結果が完全には取得されないと言うと、コーディネーターが結果セット全体を完全に具体化していないことを意味します。これは、コーディネーター上に大量のオブジェクトが作成されないようにするためです。

https://docs.datastax.com/en/drivers/java/3.0/com/datastax/driver/core/ResultSet.html

あなたは、ResultSet(実行の結果は)いくつかの方法を持っていることがわかります。しかし、1つだけall()が結果セット全体をページし、すぐにドライバにダウンロードします。

iteratorを代わりに使用する場合は、イテレータでnextを呼び出したときに、結果がサーバーからバッチでページングされます。これは、結果セットの一部だけがドライバにプルダウンされ、サーバへの負荷が軽減され、大きなデータセットをラムにすべて取り込まずに処理できることを意味します。

関連する問題