我应该在哪里存储需要经常查看的用户统计信息?

时间:2010-03-12 13:21:43

标签: database-design caching statistics

在我的网络应用程序中,我的用户有很多活动。一个这样的事件是“用户更新的Facebook状态”。用户可以拥有数百种类型的事件,并且有10种类型的事件。我需要以非常可扩展的方式基于事件显示事件计数和其他用户统计信息。这是因为每个用户都能看到他或她的统计数据。我们显然无法在每次用户访问网站时运行每个计算,因此缓存这些统计数据肯定是要走的路。

为“统计信息”创建一个单独的表是否有意义,该表具有用户ID和我们正在缓存的每个统计信息的列?该表基本上是行动,所以我想知道是否有更好或不同的方式来做它。

1 个答案:

答案 0 :(得分:1)

您可以计算这些统计数据并将它们放入内存缓存中,根据需要读取/递增它们,因为这些数据不需要持久存在(使用冷缓存可能会导致服务器负载峰值,您可能会考虑速率限制登录/计算等)。然而,这种情况是非关系数据存储的理想候选者,例如Cassandra(“高度可扩展,最终一致,分布式,结构化键值存储”)。 This internal Digg article是一个非常有趣的读物:

  

根本问题是特有的   关系数据库的心态,哪个   把计算的负担放在上面   读取而不是写入。这是   大规模网络完全错误   应用程序,响应时间是   危急。它变得更糟了   大多数应用程序的串行性。   页面的每个组件都会阻塞   从数据存储中读取,以及   完成了那些操作   来吧。

     

非关系数据存储相反   这个模型完全是因为他们   没有复杂的读操作   的SQL。该模型迫使你转移   你对计算的计算,而   将大多数读取简化为简单   操作 - 相当于SELECT   * FROM Table