2016-01-27 20 views
6

私はRemoteAPI(Java)を使用して、〜90,000の大きなデータセットを処理し、データの移行を実行しています。 900result.size()にクエリLIMITセットで制限付きデータストアクエリ

int CHUNK_SIZE = 500; 
int LIMIT = 900; 

QueryResultList<Entity> result = ds.prepare(entityQuery) 
.asQueryResultList(
    FetchOptions.Builder 
    .withPrefetchSize(CHUNK_SIZE) 
    .limit(LIMIT) 
    .chunkSize(CHUNK_SIZE) 
).startCursor(cursor); 

ではなく900の全データセット、〜90K、です。私が低いLIMIT、たとえば300を試してみると、結果のサイズは予想されるサイズ(300)です。

私はここで何が欠けていますか?ドキュメントから、私がここで説明している振る舞いを作り出す理由を理解できませんでした。これらの例(http://www.programcreek.com/java-api-examples/index.php?api=com.google.appengine.api.datastore.QueryResultList)に基づいて

+1

私はたぶん何か愚かなことを言っているかもしれませんが、あなたのオプションの順序を変更しようとしましたか? FetchOptions.Builder.withLimit(LIMIT) .withPrefetchSize(CHUNK_SIZE) .chunkSize(CHUNK_SIZE) ).startCursor(カーソル); – yannicksoldati

+0

私が間違っている場合は私を修正しますが、 'FetchOptions.Builder'オブジェクトのメソッドの要約には' .limit'メソッドがありません(https://cloud.google.com/appengine/docsを参照)。 /java/javadoc/com/google/appengine/api/datastore/FetchOptions.Builder)。代わりに '.withLimit'が必要です。 –

答えて

0

私はあなたが以下のようにだから私はあなたのコードを再構築でしょう.asQueryResultListオプション

.withLimit(LIMIT)の代わり.limit(LIMIT)を使うべきだと思う:

FetchOptions options = FetchOptions.Builder 
    .withLimit(LIMIT) 
    .withPrefetchSize(CHUNK_SIZE) 
    .chunkSize(CHUNK_SIZE); 

QueryResultList<Entity> result = ds.prepare(entityQuery) 
    .asQueryResultList(options); 

その後カーソルを取得する

result.getCursor();