首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库中存储主动更新的字段

问在数据库中存储主动更新的字段
EN

Stack Overflow用户
提问于 2010-12-14 11:02:59
回答 3查看 82关注 0票数 3

我有一个数据库,其中一个表存储文章。对于每一篇文章,我都需要存储被浏览的次数。现在,我的想法是将这个值存储在数据库中,每次有人用这篇文章访问页面时更新它,我现在正在考虑两个替代方案:

  1. 在表articles中创建列views并对其进行更新。
  2. 使用指向文章的FK指针和该文章的数字视图创建单独的表view_count。

我的问题是:这两种方法在速度和原因上有什么不同吗?还有更好的选择吗?

我使用的数据库是PostgreSQL。

Note说,我没有考虑以不同的方式将这些值累积到单独的文件中,在数据库之外,然后再插入,因为我没有那么多的点击次数)这个特性是次要的,如果它需要这样的麻烦,我们宁愿放弃它,并为此使用其他服务。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-14 11:27:58

两种方案的差别是相当微妙的,下面是我对它们的看法:

同表

  • 将它保存在同一个表中将允许您以较低的成本检索数据库,
  • 更新可能会锁定队列中其他查询需要减慢的DB部分,从而使表的I/O增加更大(对于表扫描总是增加I/O,但对于索引查找则不那么直接-当记录大小变得更大时,文件系统的块大小就必须执行2x多的I/O;或nx更多I/O取决于记录大小/块大小,如果记录大小比块大小小得多,那么索引查找的效果取决于磁盘上数据的查询/顺序的类型--如果从同一块中选择记录,您将感受到性能的影响,如果选择稀疏的数据,您将感觉不到它)

分离表

I/O)

  • retrieving更新将发生在较小的表上,从而减少I/O (根据隔离级别的不同,检查外键可能仍然需要锁),但应该更短,因为文章所需的联接更少,如果视图计数是其他大多数记录中没有出现的新特性,则会增加I/O

  • ,并且即使连接可能会增加所需的I/O,这可能会提供更好的性能。

Notes

这个注释适用,但很微妙:记录大小可能不会受到显著影响,从而影响所有查询。使用单独的表减少I/O的好处可能是不可察觉的。

票数 4
EN

Stack Overflow用户

发布于 2010-12-14 11:23:55

如果articles表比更新时得到更多的写入,那么由于写入时的表锁,列的速度可能会慢一些。

使用单独的表只是稍微慢一点/重一点,但在更新方面是最轻的。但是,在完成大量的写操作之后,您可以轻松地重新构建表,而不会造成很大的性能损失,因为它将是一个非常轻的表。

但是,如果您的数据库负载不高,那么可以简单地选择添加列。

票数 0
EN

Stack Overflow用户

发布于 2010-12-14 11:29:18

我有另外一种方法,我做更新在一天晚些时候,或当流量是网站太少。我会这样做,当任何用户读取文章时,用户id将存储在一个新的表中,稍后通过脚本,我可以更新文章被用户读取的次数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4438458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档