我正在设计大型网站。
为了防止重复投票,我将在数据库中存储用户的投票(userid,postid)(我现在使用mysql)
哪一个更好? 1-每个用户只有一行并存储他在那里投票为文本字段的所有postid。 2-每次投票一行并将其存储为整数。
感谢
答案 0 :(得分:1)
执行此操作的正确方法是您的第二个选择。关系数据库很擅长这个东西。
创建一个名为uservotes
或其他内容的表,主键为userid
和postid
。这会自动阻止添加重复投票。这也意味着你可以做到:
SELECT SUM(vote) FROM uservotes WHERE postid=42;
不是说你会这样做......你可能只是将总投票存放在帖子本身上。
答案 1 :(得分:1)
一些注意事项:
SELECT 1 FROM votes WHERE user_id = X and post_id = Y LIMIT 1;
的索引查询慢得多,LONGTEXT
总是以几乎完全相同的速度运行:如果它已被索引,则相当快。 (如果没有,它基本上与基于文本的方法做同样的事情并且速度超慢,所以索引在这里非常重要!)另外,请注意,如果你使用MySQL的{{1}}来避免问题#1,每次要检查一次投票时,您最多可以传输4GB的数据。 EWW。根据我的经验,您的每行投票方法实际上将更简单实现(特别是一旦您熟悉SQL),将会更好地扩展,并且将有更少的方法来实现它可能会破裂。关系数据库变得不可行的规模,但是,对于几乎所有用户来说,充分发挥SQL的潜力是获得卓越性能的最佳方式。