我处理一个案例,我允许每个主题只有100个持续评论
如果一个主题已经有100个评论,并且我想要删除100个评论链中的第一个评论并添加新评论,那么这是一个示例:
1,2,3 .... 99,100
2,3,4 .... 100,101
你可以看到远远落后于其他人的第一条评论被删除了,而新评论则进入了100条评论链
这里开始出现问题,如果我在我的案例论坛中,这个论坛有数十万个主题,它可以达到数百万条评论,这意味着如果我检查每个新收到的评论有多少评论会导致每次添加评论都会减慢网站速度,我如何最小化数据库查询?是否有任何系统/已知的方法来面对这类事情?
答案 0 :(得分:2)
为什么要删除旧评论?如果您想显示最近100条评论,那么只需SELECT id, thread_id, user_id, comment_body from COMMENTS where thread_id = @thread_id LIMIT 100
。还要确保对外部列进行索引,以便快速查询并仅查询所需的列。
不,如果您对查询更明智,请在需要的地方应用索引,然后您不必担心每条评论会减慢数据库的速度。你会有数以百万计的评论吗?如果是这样,您可以考虑根据thread_id对每个1000000 * 线程的数据库进行分区。
您可能对此问题感兴趣:Database architecture for millions of new rows per day
*对于任何读者:不要将此数字视为经验中的一些建议或建议。永远不要说:“有人在SO上提到了这个数字x,所以......”我没有经验或基准来说这样做会很好。我自己只创建了我的第一个分区。评估自己对你有什么好处。
答案 1 :(得分:1)
这个东西的数据库结构是什么?大概你有一个"帖子"表格和评论" table,链接回posts表。假设设计合理,注释将有一个auto_increment主键,因此您的逻辑将是:
1. insert new comment
2. count the comments attached to the post. If it's > 100, then
3. find min(comments.id) and delete that ID.