如何在GAE数据存储中统计满足特定条件的实体?(超过1000个实体)
我正在开发一个应用程序,想要记录发生的事件。每个事件都有一个类型,我还需要按事件类型来报告。
比如说,有事件A、B和C。这些事件会随机周期性地发生。用户登录后,会创建一组实体,这些事件可以归属于这些实体。当用户回来查看状态时,我需要能够告诉他们在特定的时间范围内,比如一天或一个月,发生了多少次A、B和/或C事件。
但是,1000个的限制让我很头疼。我并不需要把所有的实体都取出来展示给用户,但我确实需要显示在特定日期范围内的总数。有什么建议吗?
我对python和GAE还不是很熟悉……
6 个回答
0
我的想法是,创建一个或多个汇总模型,用来记录事件类型、日期和数量。不过,具体该怎么建模还不太确定,因为这要看你的需求。
接着,我会启动一些延迟任务,让它们在用户触发事件时,异步地更新相应的汇总模型。
Nick Johnson的使用延迟库进行后台工作的文章里有更多的信息,提供了一个框架,可能对你想要的那种汇总方式很有帮助。
3
现在,数据存储中使用 count() 查询的结果,以及所有数据存储查询的偏移量,不再限制在1000条记录以内。
自从1.3.6版本开始
7
App Engine 不是一个关系型数据库,所以你不能像这样快速地进行计数。最好的方法是在写入数据的时候更新计数,而不是在读取数据的时候生成计数。
在生成计数时,有两种适合 App Engine 的方法,可以帮助减少写入时的冲突:
- 把计数存储在 Memcache 或本地内存中,然后定期清空。这是最简单的解决方案,但可能会不太稳定,数据丢失的风险比较大。
- 使用 分片计数器。这种方法更可靠,但也更复杂。你不能轻易按计数进行排序,不过你可以定期把计数清空到另一个索引字段,然后按那个字段进行排序。