If it matters as of now I'm using MySQL/MyISAM but I'm open to using PostgreSQL. I'm also open to using memcached.
考虑一个用于存储论坛线程的表:
id forum_name post_date
1 Hey! 2009-01-01 12:00:00
- 存储投票、 View 和计数器等线程相关实体的最佳做法是什么?
我应该..
创建一个单独的表如
id thread_id views
1 1 532
还是将其保留为初始线程表中的一列?
id forum_name post_date views
1 Hey! 2009-01-01 12:00:00 532
另一个相关的花絮,显示和增加页面浏览量的实用解决方案是什么?我读了这个thread似乎我可以只缓存一个值一段时间,我对递增部分不是很清楚——也许是像将值存储在某个地方的平面文件中,然后使用 cronjobs 每隔一小时左右定期更新数据库论坛 View ?
编辑: 澄清一下,投票就像每个线程一票一样,并且可以逆转。别管我说的计数器是什么意思。
最佳答案
投票
我建议除了线程表之外还定义两个表 - VOTE_CODES
和 THREAD_VOTES
。乍一看,它可能看起来过于规范化,但这种格式将允许您更改投票值,而无需进行重大的 DML 更改。
VOTE_CODES
表
vote_code
, 主键, IE: up, downvote_cast_value
--归因于赞成/反对票的值vote_caster_value
--可选,如果你想保持 SO 的负面投票风格影响施法者。
THREAD_VOTES
表
thread_id
user_id
vote_code
THREAD_VOTES
中的所有列都是主键 - 这将确保给定用户和线程的行数与投票代码数一样多。假设只有两个代码,这将支持覆盖投票的能力,因为只能有两个记录 - 一个具有任一代码。
观看次数
我建议存储:
- 线程编号
- IP 地址
- user_agent -- 粗略的浏览器捕获
- 时间戳
以上都是主键。您的表将快速填充,但它会让您能够在 View 中创建计算列以获得更准确的报告。
关于sql - 论坛线程投票/ View 的数据库架构,以及增加和显示 View 数量的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1944055/