简而言之,如何设计一个具有被投票的异构对象的投票系统。
例如,我可以有文章、电影、帖子、评论等,我希望所有这些都是“可投票的”。
问题是如何设计数据库以将性能和可伸缩性保持在合理的水平?
一些信息/要求:
- 只有注册用户才能投票
- 每一个投票都存储在数据库中以供以后统计使用(使用聚合计数器实时+有时验证它们)
- 将来我会添加其他可投票的对象。
- 仅限一名用户投票,每个对象可以投票一次。
- 不会有跨多个对象类别的累积排名。
- 在显示对象时,我几乎总是需要显示投票数,但让聚合值始终保持最新并不是最重要的,因此缓存可能会在这里发挥作用。只有在某些情况下,我才会想保持 ii 可能是最新的。
我的想法:
对于每个包含可投票对象的表,添加一个voteable_id
在所有可投票对象中可能是唯一的列。这里的问题是保持这种唯一性。我正在研究不能像 PostgreSQL 那样简单的序列的 MySQL。
我也可以保存voteable_id
在一个单独的表中,这意味着在对象表中我将是简单的外键。然后我还可以添加一些列,让我在投票方面配置该对象,例如“投票阻止”或在其中保留聚合计数器。
你怎么看?它可以工作吗?请记住,这只是其中一项功能,因此不能占用所有资源。;-)
也许还有其他想法,甚至更好的经过验证的解决方案?