我正在构建简单的 Web 应用程序,用户可以在其中投票。检查用户是否已经投票的最快方法是什么。我对关系数据库和基于文档的数据库(mongodb,...)都感兴趣
我的想法很少,但我相信它们可以改进:
关系数据库
为投票创建一个单独的表:
|userid|articleid|
在增加文章投票之前,检查是否有一行同时包含用户 ID 和文章 ID。我们有两个查询。可以通过触发器来改善这一点吗?例如:
|useridarticleid| unique column
投票前在应用程序端生成 useridarticleid。尝试插入 useridarticleid。如果字段是新的,触发器将触发,它将增加我们在文章中的投票列。
基于文档
这有点棘手。因此,文档结构如下:
{
"id": "123",
"content": "something",
"num_votes": 2,
"votes" : [
"userid1",
"userid2"
]
}
第一个“查询” - 检查用户 ID 是否在投票数组中。第二个“查询” - 如果不是,则增加 num_votes。
又是两个查询。所以我认为我们可以改变这一点,但我真的不知道它是否会提高性能:
在投票数组中插入用户 ID。当用户想要检查文章“计数”数组中的投票时。但我认为性能可能会下降,因为如果流量很高,计算每篇文章有点浪费。想象一下这里的 Reddit。