如何在GAE数据存储中统计满足特定条件的实体?(超过1000个实体)

4 投票
6 回答
4272 浏览
提问于 2025-04-15 18:54

我正在开发一个应用程序,想要记录发生的事件。每个事件都有一个类型,我还需要按事件类型来报告。

比如说,有事件A、B和C。这些事件会随机周期性地发生。用户登录后,会创建一组实体,这些事件可以归属于这些实体。当用户回来查看状态时,我需要能够告诉他们在特定的时间范围内,比如一天或一个月,发生了多少次A、B和/或C事件。

但是,1000个的限制让我很头疼。我并不需要把所有的实体都取出来展示给用户,但我确实需要显示在特定日期范围内的总数。有什么建议吗?

我对python和GAE还不是很熟悉……

6 个回答

0

我的想法是,创建一个或多个汇总模型,用来记录事件类型、日期和数量。不过,具体该怎么建模还不太确定,因为这要看你的需求。

接着,我会启动一些延迟任务,让它们在用户触发事件时,异步地更新相应的汇总模型。

Nick Johnson的使用延迟库进行后台工作的文章里有更多的信息,提供了一个框架,可能对你想要的那种汇总方式很有帮助。

3

现在,数据存储中使用 count() 查询的结果,以及所有数据存储查询的偏移量,不再限制在1000条记录以内。

自从1.3.6版本开始

7

App Engine 不是一个关系型数据库,所以你不能像这样快速地进行计数。最好的方法是在写入数据的时候更新计数,而不是在读取数据的时候生成计数。

在生成计数时,有两种适合 App Engine 的方法,可以帮助减少写入时的冲突:

  1. 把计数存储在 Memcache 或本地内存中,然后定期清空。这是最简单的解决方案,但可能会不太稳定,数据丢失的风险比较大。
  2. 使用 分片计数器。这种方法更可靠,但也更复杂。你不能轻易按计数进行排序,不过你可以定期把计数清空到另一个索引字段,然后按那个字段进行排序。

撰写回答