【问题标题】:Datastore query with limit有限制的数据存储查询
【发布时间】:2016-05-04 07:15:51
【问题描述】:

我正在使用 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 设置为 900result.size() 是整个数据集,~90K,而不是 900。如果我尝试较低的LIMIT,比如300,结果大小就是预期的大小(300)。

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

【问题讨论】:

  • 我可能在说一些愚蠢的事情,但是您是否尝试过更改选项的顺序? FetchOptions.Builder.withLimit(LIMIT) .withPrefetchSize(CHUNK_SIZE) .chunkSize(CHUNK_SIZE) ).startCursor(cursor);
  • 如果我错了,请纠正我,但我没有看到 .limit 方法出现在 FetchOptions.Builder 对象的方法摘要中(请参阅:cloud.google.com/appengine/docs/java/javadoc/com/google/…)。应该改为.withLimit

标签: java google-app-engine google-cloud-datastore


【解决方案1】:

基于这些示例 (http://www.programcreek.com/java-api-examples/index.php?api=com.google.appengine.api.datastore.QueryResultList)

我认为您应该在.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);

然后获取光标

result.getCursor();

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多