【发布时间】:2020-02-11 04:20:09
【问题描述】:
我目前有一个文章数据库,它通过增加 page_load 上的“访问次数”计数器来跟踪一段时间内阅读次数最多的文章。当前的“访问”计数器是articles 表中的一列(见下文):
id | title | description | visits | creation_date
---+--------+-------------+--------+-----------------
1 | test1 | test test.. | 10 | 2019-01-01
2 | test2 | test test.. | 20 | 2019-01-01
有时,我遇到了连接超时,并且我怀疑“访问”写入过程会出现死锁(如果并发用户一次增加同一行,则会锁定数据库)。我认为下面的场景是一种增强:
- 从表
Articles中删除Visits计数器 - 创建一个包含两列的新表
article_visits:article_id和date
文章
id | title | desc | creation_date
---+-------+------+---------------
1 | test1 | desd | 2019-01-01
2 | test1 | desd | 2019-01-01
article_visits
article_id | visit_date
-----------+----------------------
1 | 2019-01-01
1 | 2019-01-01
1 | 2019-01-01
1 | 2019-01-01
1 | 2019-01-01
1 | 2019-01-01
2 | 2019-01-01
2 | 2019-01-01
2 | 2019-01-01
作为替代选项,一旦触发新访问,我会在articles_visits 表中插入一个新行,以避免articles 表上的任何死锁。此解决方案将使articles_visits 表很快变大,但我认为表大小不是问题。
我想知道这是否是记录文章访问的正确方法,以及优化是否是比原始解决方案更好的选择。
【问题讨论】:
标签: sql sql-server database-design deadlock