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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有限制的数据存储区查询相关的知识,希望对你有一定的参考价值。

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

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

答案

基于这些例子(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();

以上是关于具有限制的数据存储区查询的主要内容,如果未能解决你的问题,请参考以下文章

从数据存储区查询大量 ndb 实体的最佳实践

超出 Appengine 数据存储区读取操作限制

数据存储区 - 单个实体组中的资源争用 -

比较 GCP 数据存储区查询性能

对数据有距离限制的空间查询

实时分布式OLAP数据存储区 - Apache Pinot介绍