我制作了一个投票系统并在投票表中记录了这样一行:
post_id | user_id | votes | date
然后,我将此投票添加到user-meta表,其结构如下:
user_id | meta_key | meta_value
在此表中,为user_id提供meta_key为“votes”,我可以保存或获取post_id数组作为meta_value。
我在两张桌子中保存一票的原因是 -
我需要在所有帖子中计算vote_total和vote_popularity,如果我只将其保存为用户元表中数组的元素,这并不容易。
我需要检查用户是否已经投票支持。用户元一旦被设置就被缓存。所以,我只需要检查in_array($ post_id,$ my_voted_posts)。如果没有user-meta表,对于用户访问的每个帖子,我将必须检查投票表。
虽然我的投票系统运作良好。但不知何故,我觉得这不是一种有效的方法。我想咨询专业人士,了解如何改进它以获得更好的性能。谢谢!
答案 0 :(得分:3)
首先,如果你有一个有效的索引,我认为检查投票表是好的。您可以使用composite indexes对post_id
和user_id
进行索引,这样可以使select * from votes where post_id = X and vote_id = Y
这样的查询具有良好的效果。
为了提高速度,您需要对数据进行非规范化处理,但我认为它不应该与规范化数据位于同一层。也许您可以将redis / memcache用于用户元数据?