我正在使用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
theresult.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);
然后得到光标
result.getCursor();