具有限制的数据存储区查询

Nun*_*osa 6 java google-app-engine google-cloud-datastore

我正在使用RemoteAPI(Java)来浏览大型数据集,~90K实体,并执行一些数据迁移.

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);
Run Code Online (Sandbox Code Playgroud)

与查询LIMIT设置900result.size()是整个数据集,90K〜,而不是900.如果我尝试较低的LIMIT,比方说300,结果大小是预期的一个(300).

我在这里错过了什么?从文档中我无法弄清楚为什么它会产生我在这里描述的行为.

nar*_*eas 0

基于这些示例 ( http://www.programcreek.com/java-api-examples/index.php?api=com.google.appengine.api.datastore.QueryResultList )

我认为你应该使用.withLimit(LIMIT)而不是在选项.limit(LIMIT).asQueryResultList

所以我会按如下方式重组您的代码:

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

QueryResultList<Entity> result = ds.prepare(entityQuery)
    .asQueryResultList(options);
Run Code Online (Sandbox Code Playgroud)

然后获取光标

result.getCursor();
Run Code Online (Sandbox Code Playgroud)