我们正在尝试使用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年代后超时。我们定期使用实体组和交易,但我希望这些不会影响这些计数查询。我们目前有大约4.2M的MyModel
实体,但source
过滤器会将此限制为210,000。
是否有另一种方法来计算这个数量的数字,而没有一堆自定义memcache-y逻辑?请记住,这些数字不需要精确,只需&#34;通常是正确的#34;。
答案 0 :(得分:4)
我相信现在已经删除了之前为1000的限制。因此,实际限制是在超时之前可以计算多少。
已经提出了一些类似的问题,此时通常会Sharded Counters提出。
<德尔> 但我认为你可能会更好地运行你的计数器作为一项任务(超时到10分钟)或在后端(根本没有超时)。 德尔>正如Guido在评论中指出的那样查询的时间不能超过60秒。
编辑:前一段时间删除了1000限制,1.3.6: Release Notes:
数据存储区不再对计数和偏移强制执行1000实体限制。使用这些查询现在可以安全地执行,直到它们返回或您的应用程序达到请求超时限制。