我制作了一个投票系统,并在投票表中将投票记录为一行,如下所示:
post_id | user_id | votes | date然后,我将此投票添加到用户元表中,该表的结构如下:
user_id | meta_key | meta_value在这个表中,给出一个带有“meta_key”的user_id,我可以将post_ids数组保存或获取为meta_value。
我在两张桌子上省下一票的原因是--
1.为什么使用投票表?
我需要计算所有帖子的vote_total和vote_popularity,如果我只将它保存为用户元表中数组的一个元素,这就不容易做到。
2.为什么使用用户元表?
我需要检查用户是否已经为帖子投票。一旦设置,用户元数据就会被缓存。所以,我只需要检查一下in_array($post_id,$my_voted_posts)。如果没有user-meta表,对于用户访问的每个帖子,我将不得不检查投票表。
有没有更好的方法?
虽然我的投票系统运作良好。但不知何故,我觉得这不是一种有效的方式。我想请教你的专业人士,以了解我可以如何改进它,以获得更好的性能。谢谢!
发布于 2012-08-12 20:15:32
首先,我认为如果你有一个有效的索引,检查投票表是很好的。您可以使用composite indexes来索引post_id和user_id,这将使像select * from votes where post_id = X and vote_id = Y这样的查询具有相当高的性能。
总有一天,为了提高速度,你需要对你的数据进行反规范化,但我认为它不应该与你的规范化数据在同一层。也许您可以使用redis / memcache作为用户元数据?
https://stackoverflow.com/questions/11921798
复制相似问题