在应用程序引擎(ndb 或 db)中处理计数的合适方法是什么?
我有两个项目是 django-nonrel,另一个是纯 django 项目,但两者都需要能够进行查询并获得计数。结果可能大于 1,000。
我看到一些帖子说我可以使用 Sharded Counters 但他们正在计算所有实体。我需要能够知道有多少实体具有以下属性 x=1,y=True,z=3
#Is this the appropriate way?
count = some_entity.gql(query_string).count(SOME_LARGE_NUMBER)
最佳答案
数据存储不擅长这种查询,因为需要权衡使其分布式。这些包括相当慢的读取和非常有限的索引。
如果您需要的统计数据集有限(用户数、文章数等),那么您可以在单独的实体中继续运行总计。这意味着您需要在发生变化时执行两次写入(放置):一次用于更改的实体,另一次用于更新 stats 实体。但是您只需要一个 read(get) 来获取您的统计信息,而不是从多少实体中提取出来的。
您可能对此感到不舒服,因为它违背了我们所了解的规范化知识,但它的效率要高得多,而且在许多情况下都可以正常工作。如果这很重要,您可以随时使用 cron 作业定期执行查询以检查统计信息是否准确。
关于python - Google App Engine 很重要,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11217185/