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设置900的result.size()是整个数据集,90K〜,而不是900.如果我尝试较低的LIMIT,比方说300,结果大小是预期的一个(300).
我在这里错过了什么?从文档中我无法弄清楚为什么它会产生我在这里描述的行为.
我认为你应该使用.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)