大投票架构:你会怎么做?

时间:2011-07-27 13:14:40

标签: php sql database-design

好的,所以我一直在考虑Reddit.com等各种网站。有成千上万的帖子,每个帖子都有成千上万的评论,最重要的是,所有评论和帖子都有用户跟踪的投票。

所以,考虑到文章,评论和文章投票(并不真正关心评论投票),我知道如何做的方式将是3个表:

文章:   id,value,username,totalvotes,其他相关数据

评论:   id,articleid,value,username,其他相关数据

票:   id,articleid,username,votevalue(+ 1,-1),其他相关数据

所以基本上是文章和评论/投票之间的一对多关系。以下是我对此提出的问题:

  1. 这是正确的方法吗?

  2. 通过遍历整个投票表寻找正确的文章来计算所有选票是否会非常缓慢?

  3. 每次都会保持一个正在运行的总计或只查询整个投票表(问题2)。

  4. 我的另一个想法是为每篇文章动态制作表格,但这可能有点过分。思考?

2 个答案:

答案 0 :(得分:2)

  1. 不 - 索引是你的朋友
  2. 不 - 这是非规范化的,很难维护
  3. oooh ..没有

答案 1 :(得分:0)

一个答案:缓存

正如Randy所说,如果您的表格编入索引,那么拥有大量数据并不是什么大问题, 但它对于良好的用户体验来说可能太慢了。因此,请考虑缓存所有可能的内容(例如响应数),并仅在发表新评论时更新此内容。 另外,我强烈建议您通过ajax获取不在缓存中的所有相关数据,而不是在页面加载时直接获取。

TLDR:

<强> 1 即可。是

<强> 2 即可。否

第3 即可。高速缓存

<强> 4 即可。没有地狱