1

我在mysql数据库中有两个表

  1. tbl_comments
  2. tbl_votes

当用户点击评论下方的“喜欢”或“不喜欢”按钮时,会在 tbl_votes 中插入一个新行,其中包含 comment_id、user_id 和 vote_type。这意味着如果每天有 100 个用户在 100 条评论上单击“喜欢”或“不喜欢”按钮,它将在 tbl_votes 表中插入 10,000 行。因此,随着用户数量的增加和投票数量的增加,tbl_votes 将迅速增加。并且假设当 tbl_votes 中有 100,000,000 行时,它也会影响性能并减慢 sql 查询。

我该如何处理这个解决方案或任何其他解决方案。

4

4 回答 4

2

这是一个完美的解决方案。只要您将索引设置正确就可以了。(主键上的索引和帖子ID)

以stackoverflow为例,每个帖子,回复评论都有自己的投票系统,无论是向上还是向下,都会记住谁投票,他们有大约2亿多条消息+回复,每个人都有自己的投票,而且它仍然快速响应。

只要索引设置正确,它应该执行得很好。我可能会建议使用 bigint 作为主键...

于 2013-03-05T08:18:27.503 回答
0

我不会担心1 billion可以将索引保留在内存中的机器上的行的应用程序性能。

性能取决于:

  1. 这些查询做了多少连接
  2. 您的索引设置得如何
  3. 机器中有多少RAM
  4. 速度和处理器数量
  5. 硬盘驱动器的类型和主轴转速
  6. 查询中返回的行大小/数据量
于 2013-03-05T08:23:21.867 回答
0

一些结论:

如果您选择 rdbms:如果正确索引表以选择评论的总喜欢数,则插入表中的行数并不重要,当然您需要保持结果缓存。快速数据选择的另一种方法 - 是保持一些投票数据聚合,所以如果用户投票支持评论,那么您的表中将有 1 个插入/删除并在另一个表上更新,例如

comment_id
rate

因此,您将为您需要的任何评论选择费率,并且聚合表的总行数会少得多。

另一个好方法是使用键值存储。假设您的键是comment_id,并存储原始数据的值

user_id
vote_type

根据您选择或不选择Sql 存储,数据可能完全存储在内存中,并且所有选择/更新操作都会非常快速地工作

于 2013-03-05T08:23:31.757 回答
0

表的大小不影响SELECT查询并不完全正确。对于大表,我建议使用 TokuDB。

在这两种情况下,当您想要DELETE一些数据时都会出现问题。此时,您有 2 个选择:集群键或开始考虑不同的架构(水平分片可能是一个好方法):

于 2015-10-05T07:36:06.283 回答