许多整数记录或一个文本字段

时间:2013-07-12 04:44:18

标签: mysql

我正在设计大型网站

为了防止重复投票,我将在数据库中存储用户的投票(userid,postid)(我现在使用mysql)

哪一个更好? 1-每个用户只有一行并存储他在那里投票为文本字段的所有postid。 2-每次投票一行并将其存储为整数

感谢

2 个答案:

答案 0 :(得分:1)

执行此操作的正确方法是您的第二个选择。关系数据库很擅长这个东西。

创建一个名为uservotes或其他内容的表,主键为useridpostid。这会自动阻止添加重复投票。这也意味着你可以做到:

SELECT SUM(vote) FROM uservotes WHERE postid=42;

不是说你会这样做......你可能只是将总投票存放在帖子本身上。

答案 1 :(得分:1)

一些注意事项:

  1. 基于文本的方法有可能溢出。您将不得不为该文本字段设置最大大小,即使这样,足够多的投票数也会超出容量并导致您的代码失败。
  2. 基于文本的方法可能非常慢。假设我投了100,000个帖子。检查我是否已投票支持Post X将涉及下载这100,000个帖子ID,将它们解析为一个数组,并检查数组是否有Post X的ID。这将比SELECT 1 FROM votes WHERE user_id = X and post_id = Y LIMIT 1;的索引查询慢得多,LONGTEXT总是以几乎完全相同的速度运行:如果它已被索引,则相当快。 (如果没有,它基本上与基于文本的方法做同样的事情并且速度超慢,所以索引在这里非常重要!)另外,请注意,如果你使用MySQL的{{1}}来避免问题#1,每次要检查一次投票时,您最多可以传输4GB的数据。 EWW。
  3. 根据我的经验,您的每行投票方法实际上将更简单实现(特别是一旦您熟悉SQL),将会更好地扩展,并且将有更少的方法来实现它可能会破裂。关系数据库变得不可行的规模,但是,对于几乎所有用户来说,充分发挥SQL的潜力是获得卓越性能的最佳方式。

相关问题