我正在设计一个大型网站。
为了防止重复投票,我将用户的投票(userid,postid)存储在数据库中(我现在使用 mysql)
哪一个更好?1-每个用户只有一行,并将他投票的所有 postid 作为文本字段存储在那里。2-每票有一行并将其存储为integer。
谢谢
我正在设计一个大型网站。
为了防止重复投票,我将用户的投票(userid,postid)存储在数据库中(我现在使用 mysql)
哪一个更好?1-每个用户只有一行,并将他投票的所有 postid 作为文本字段存储在那里。2-每票有一行并将其存储为integer。
谢谢
正确的方法是您的第二个选择。关系数据库擅长这些东西。
用anduservotes
的主键创建一个名为 or 的表。这会自动防止添加重复投票。这也意味着您可以:userid
postid
SELECT SUM(vote) FROM uservotes WHERE postid=42;
并不是说您会那样做...您可能只是将总投票数存储在帖子本身上。
几点注意事项:
SELECT 1 FROM votes WHERE user_id = X and post_id = Y LIMIT 1;
,后者将始终以几乎完全相同的速度运行:如果它被索引,则非常快。(如果不是,它本质上会与基于文本的方法做同样的事情,而且速度非常慢,所以索引在这里非常重要!)另外,请注意,如果你使用 MySQLLONGTEXT
来避免问题 #1,你就站在每次要检查单次投票时传输最多 4GB 的数据。哇。以我的经验,你的每行投票方法实际上会更容易实现(尤其是当你熟悉 SQL 之后),会更好地扩展,并且可能会出现更少的问题。关系数据库在一定程度上变得不可行,但对于几乎所有用户而言,充分发挥 SQL 的潜力是获得出色性能的最佳方式。