4

我们正在尝试使用 NDB 查询 App Engine 数据存储区以获取一些常规统计信息。它们不需要 100% 准确(即,我不关心最终的一致性);他们只需要大致反映实体的数量。

使用 NDB,我们发布的内容很简单,例如:

query = MyModel.query(MyModel.source==source, MyModel.created<=some_time).order(-MyModel.created)
count = query.count(keys_only=True)

这是在大约 60 年代后超时。我们经常使用实体组和事务,但我希望这些不会影响这些计数查询。我们目前有大约 420 万个实体MyModel,但source过滤器会将其限制为大约 210,000 个。

是否有另一种方法来计算这种数量级的数字,而不需要一堆自定义的 memcache-y 逻辑?请记住,数字不需要精确,只需“大致正确”即可。

4

1 回答 1

4

我相信这个限制,以前是 1000,现在已经被取消了。所以实际的限制是在超时之前可以计算多少。

已经提出了一些类似的问题,通常此时会提出分片计数器

但我认为您最好将计数器作为任务(超时时间为 10 分钟)或在后端(根本没有超时)运行。

正如 Guido 在评论中指出的那样,查询时间不能超过 60 秒。

编辑:前段时间删除了 1000 限制,1.3.6: 发行说明:

数据存储不再对计数和偏移实施 1000 个实体的限制。使用这些的查询现在将安全地执行,直到它们返回或您的应用程序达到请求超时限制。

于 2013-01-08T15:12:32.390 回答