【发布时间】:2016-02-13 05:53:28
【问题描述】:
我正在尝试计算我的数据库中在特定日期之间创建的实体数量。
我知道谷歌取消了每次查询获取超过 1000 个结果的限制,但每次我尝试使用远程 api 时,我只得到 1000 个结果计数。
有谁知道如何计算更多的 1000 个实体以检查我有多少实体?
谢谢。
内塔内尔
【问题讨论】:
我正在尝试计算我的数据库中在特定日期之间创建的实体数量。
我知道谷歌取消了每次查询获取超过 1000 个结果的限制,但每次我尝试使用远程 api 时,我只得到 1000 个结果计数。
有谁知道如何计算更多的 1000 个实体以检查我有多少实体?
谢谢。
内塔内尔
【问题讨论】:
该限制已在较新版本的 SDK 中移除,因此您可能需要检查并升级。
这仍然不能完全解决您的问题,但是...问题是使用 GAE 计数查询是一个非常糟糕的主意 - 因为每当您进行计数时,这不是一个表(它更像是一个分布式数组)它实际上必须命中(也许是获取,我不确定)每个与您的查询匹配的对象。这是一个非常昂贵的操作,所以如果你经常这样做,你就会不必要地消耗资源。如果您有足够的对象,您甚至可能会达到 30 秒的请求限制。
看看其他更具可扩展性的方法,例如 map reduce(计数并存储分钟数,然后是每小时,然后是天,然后是周,然后是月等)或 sharded counter。
【讨论】:
Model.gql("WHERE creation_date >= :start_date AND creation_date <= :end_date",
start_date=startdate, end_date=enddate).count()
应该返回您的查询匹配的实体数量,即使您有超过 1000 个。
您正在使用至少 v1.3.6 的 SDK,因为这是取消计数限制的地方?
【讨论】: