我有一个项目,该项目计算有关用户性能的许多“统计数据”,然后将其显示给他们。所有这些统计信息最终都来自一个庞大的“互动”表,该表记录了用户与网站的互动。目前,所有这些统计信息都是通过查看此数据来计算的。我们广泛使用了持久性缓存,以使这些事情快速进行。
我们正在考虑将统计值存储在db中的“迭代设计”,并在记录每次交互时,根据交互对每个得分的贡献来更新值,因此,我们实质上是在迭代地更新值。 (现在,我们只是清空缓存)。
我在迭代设计中遇到了一些麻烦,因为这意味着我们将这些冗余的,可能不同步的信息存储在数据库中,这使得添加新的统计信息变得困难,并且意味着在每个交互日志上需要进行更多工作。好处是,它简化了对单个数据库命中的统计查找!
这种迭代设计中的某些功能为我敲响了警钟,但我不能否认潜在的节省时间的好处。我应该服从这种直觉,还是继续前进?
最佳答案
在进行数据库设计时,我尽量避免存储冗余数据。 (毕竟,这是数据库规范化的对象)。计算的列和视图可以-由SQL Server自动管理和更新。就个人而言,在使用DB进行缓存之前,我会倾向于其他途径(SQL查询确实是需要提高性能的部分吗?可以通过使用SQL视图来简化应用程序中的操作吗?等)
当您说处理数据时,您执行的那项操作是如此昂贵?你是说插入/更新/删除吗?如果对统计数据的使用需要大量写入,则可以考虑删除索引以加快数据更改的速度。