数据库频繁更新的表,而且这个这个表的部分字段频繁读写排序,我这里经常出现死锁,该怎么设计才能避免死锁呢?

发布于 2022-09-01 06:14:40 字数 534 浏览 20 评论 0

这个表是新闻表

[news]
id

viewTimes 总浏览量
viewTimesToday 今日浏览量
viewTimesWeek 本周 浏览量
viewTimesMonth 本月浏览量

这几个浏览量的字段,页面访问一次就会更新一次
更新非常频繁
而且为了提高检索速度 做了排序索引

select top 100 *from news order by viewTimes desc
select top 100 *from news order by viewTimesToday desc
select top 100 *from news order by viewTimesWeek desc

到底该怎么设计呢?

如果把这些统计的信息单独放到另外一张表,虽然不会有过多的死锁情况,但那样在检索文章的时候就没法排序了

这些情况基本上在网站访问量大的情况下产生

不知道大侠们遇到过这样的问题没

有没有什么好的方法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凝望流年 2022-09-08 06:14:40

可以考虑定期更新统计表。如果只是浏览次数排序的话,我感觉检索到2分钟前的浏览量也不是什么大不了的。
此外这张新闻表实时更新也没有必要。理论上来说应该有张浏览明细纪录表,实时记录每次一条新闻被浏览的时间,然后从这个列表中统计出各种浏览次数。当然这样可能统计次数会很费时间,为此可以每天或更短的时段更新一次统计次数表,同时清空浏览明细。这样的话,统计次数就是一个很少更新的存量,再加一个从较小的明细中获得的当天增量。
而浏览明细纪录可以放在内存里,这样就避免了频繁写入数据库。

昇り龍 2022-09-08 06:14:40

我的做法是把热数据放到了redis中,前几十页的数据都从redis中获取,通过redis来排序,大部分的用户只会访问到redis中的内容,少量用户会访问到redis中不存在的数据,这个时候在查库,数据库的压力非常小,只要要保证redis和数据库中的数据一致性。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文