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

问题描述 投票:6回答:1

我正在使用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设置为900theresult.size()是整个数据集,~90K,而不是900。如果我尝试较低的LIMIT,比如300,结果大小是预期的(300)。

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

java google-app-engine google-cloud-datastore
1个回答
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();
© www.soinside.com 2019 - 2024. All rights reserved.