首页 > 解决方案 > 更新用户表上的通知计数或通知表中的 SELECT count(*) 更好?

问题描述

我正在我的 rails 应用程序中创建一个通知系统,我想知道什么会在规模上更好地工作。

我可以为调用的用户创建一个列,notifications_count每次UPDATE创建新通知时都会创建一个列,并且UPDATE每次查看通知以清除计数时都会创建一个列。

我还可以对 Notifications 表进行计数,并通过user_id和 标志对其进行过滤unread

通知将成为此应用程序的一个重要功能,即使对于个人用户,此表的大小也会非常快速地增长。

鉴于该表最终将包含大量数据,哪种方法最好?

是否有另一种可以更好地扩展的解决方案?

标签: ruby-on-railspostgresqldata-modeling

解决方案


从关系建模的角度来看,拥有带有计数的额外列将是多余的,因此很糟糕。

但是,它会使查询计数更快,但代价是数据修改期间的额外工作。

我会根据计数查询与数据修改的相对频率来做出决定。如果对计数的查询将成为您非常频繁的查询之一,我会为了性能而牺牲纯度。

该决定主要与数据库大小无关。


推荐阅读