Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带限制的数据存储查询_Java_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Java 带限制的数据存储查询

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)

我正在使用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);
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();