Java 带限制的数据存储查询
我正在使用RemoteAPI(Java)遍历一个大数据集,约90K个实体,并执行一些数据迁移Java 带限制的数据存储查询,java,google-app-engine,google-cloud-datastore,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)
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);
int CHUNK\u SIZE=500;
整数极限=900;
QueryResultList结果=ds.prepare(entityQuery)
.asQueryResultList(
FetchOptions.Builder
.withPrefetchSize(块大小)
.限额
.chunkSize(块大小)
).startCursor(光标);
当查询LIMIT
设置为900
时,result.size()
是整个数据集~90K,而不是900
。如果我尝试一个较低的限制,比如300
,结果大小就是预期的大小(300
)
我错过了什么?从文档中,我无法理解为什么它会产生我在这里描述的行为。基于这些示例()
我认为您应该在.asQueryResultList
选项中使用.withLimit(LIMIT)
而不是.LIMIT(LIMIT)
因此,我将对您的代码进行如下重组:
FetchOptions options = FetchOptions.Builder
.withLimit(LIMIT)
.withPrefetchSize(CHUNK_SIZE)
.chunkSize(CHUNK_SIZE);
QueryResultList<Entity> result = ds.prepare(entityQuery)
.asQueryResultList(options);
我可能在说些愚蠢的话,但你试过改变你选择的顺序吗?FetchOptions.Builder.withLimit(LIMIT).withPrefetchSize(CHUNK\u SIZE).chunkSize(CHUNK\u SIZE)).startCursor(游标);如果我错了,但我没有看到.limit
方法出现在FetchOptions.Builder
对象的方法摘要中,请更正我(请参阅:)。应该是。而不是使用limit
。
result.getCursor();