在app engine(ndb或db)中处理计数的适当方法是什么?在
我有两个项目,一个是django nonrl,另一个是纯django项目,但两者都需要接受查询和进行倒数的能力。结果可能超过1000。在
我看到一些帖子说我可以使用Sharded Counters,但他们正在计算所有实体。我需要知道有多少实体具有以下性质x=1,y=True,z=3
#Is this the appropriate way?
count = some_entity.gql(query_string).count(SOME_LARGE_NUMBER)
Tags:
数据存储不擅长这种查询,因为需要权衡才能使其分布式。其中包括相当慢的读取,以及非常有限的索引。在
如果您需要有限的统计数据集(用户数、文章数等),那么您可以在单独的实体中继续运行合计。这意味着您需要在发生更改时执行两次写入(put):一次用于更改的实体,另一次用于更新stats实体。但是您只需要一次read(get)就可以得到统计信息,而不是从中提取出多少个实体。在
你可能会对此感到不安,因为它违背了我们对正常化的认识,但它的效率要高得多,而且在很多情况下都很好。如果这很关键的话,您可以始终让cron作业定期执行查询,以检查统计数据是否准确。在
由于您使用的是db.Model,这里有一种方法可以告诉您如何使用可能超过1000的过滤器来计算所有实体,这是一个硬限制(如果它仍然适用):
如果您要在请求中使用上述方法,那么您可能会超时,所以考虑使用Task Queues。在
同样,正如FoxyLad提议的那样,出于性能原因,最好将totals保存在一个单独的实体中,并将上述方法作为cron作业定期运行,以使统计数据完全同步。在
相关问题 更多 >
编程相关推荐