温馨提示:本文翻译自stackoverflow.com,查看原文请点击:database design - storing upvotes/downvotes in mongodb
mongodb database-design

database design - 在mongodb中存储upvotes / downvotes

发布于 2020-04-07 10:12:01

我有一个收集PostsUsers用户可以给予好评/ downvote每个岗位。将其存储在mongodb数据库中以确保用户不能多次投票给定文档的最佳方法是什么?

我想出了被存储user_ids数组每个谁投里面最简单的NoSQL上下的解决方案Post文档(或甚至阵列(user_id, vote),其中vote为+1或-1,这样用户就可以改变他们的投票)。考虑到每个帖子可以获得数千票,从性能的角度来看这是一个好主意吗?

真正受欢迎的网站(如Reddit)的热门帖子可以获得数十万票呢?

查看更多

提问者
ramirami
被浏览
41
Thomas 2012-08-28 03:26

MongoDB文档当前最大限制为16MB,因此,假设Gilbert的计算准确无误,您将无法user_idPost文档中存储所有600万个数据

但是,您可以考虑将投票存储在User文档中(即post_id特定用户投票s)。用户对600万个不同的帖子进行投票的可能性要小得多,这样一来,您就不会很快达到规模限制。

解决此问题的另一种方法:如果您希望某个特定帖子获得很多票,则可能希望将票外的票存储Post在单独的集合中,并执行其他查询,类似于SQL方式的多对多JOIN表:

user_votes { user_id: ObjectId(...), post_id: ObjectId(...), vote:-1 }

并在(user_id,post_id)上创建复合索引。