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

时间:2016-01-27 11:08:41

标签: 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);

将查询LIMIT设置为900时,result.size()是整个数据集,约为90K,而不是900。如果我尝试使用较低的LIMIT,例如300,则结果大小为预期值300

我在这里缺少什么?从文档中我无法弄清楚为什么它会产生我在这里描述的行为。

1 个答案:

答案 0 :(得分: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);

然后获取光标

result.getCursor();