【问题标题】:Using QuerySplitter in Google Datastore to load chunks of a known size在 Google Datastore 中使用 QuerySplitter 加载已知大小的块
【发布时间】:2016-08-10 04:48:16
【问题描述】:

我想从 Google 数据存储表中加载大量数据。为了提高性能,我想并行运行几个查询,每个查询都加载很多对象。游标不适合并行执行。

QuerySplitter 是。但是,对于 QuerySplitter,您必须告诉它您想要多少拆分,而我关心的是加载一定数量的对象。这个数字是根据我的应用程序的需要选择的,大但不是太大,比如 800 个对象。如果每个查询返回的对象数量只是非常大致相同,那也没关系;不同的线程运行不同的时间不会发生更糟糕的事情。

我该怎么做?我可以只查询所有对象的键来计算它们,然后除以 800。有没有更好的方法。

【问题讨论】:

  • 您可以使用Datastore Statistics API 来获取__Stat_Kind__
  • 谢谢!我对此一无所知,这可能是我加载整个表格时要做的事情。但是,我们希望能够基于过滤器将部分数据加载到表中——尽管仍然是大量数据。我已经相应地编辑了这个问题。如果您想将您的评论放入答案中,我可以投票和/或接受它。

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


【解决方案1】:

查询所有实体(甚至仅键)可能无法很好地扩展,但您可以定期运行查询并将计数保存在数据存储或内存缓存中,具体取决于您需要运行作业的频率。

但是,要查找给定类型的所有实体,您可以使用Datastore Statistics API,这应该会快得多。我不知道统计数据的更新频率,但它可能与控制台中的统计数据相同。

如果您要更频繁地计数或过滤查询的数字,您可能会考虑分片计数器。由于您只需要一个大概的数字,因此您可以在每个新的 put 上异步更新它们。

【讨论】:

猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
相关资源
最近更新 更多