【问题标题】:php every topic last only 100 commentsphp 每个主题最后只有 100 条评论
【发布时间】:2011-12-10 04:31:51
【问题描述】:

我正在处理一个我允许每个主题只有 100 个 last cmets 的案例

如果一个主题已经有 100 个 cmets,并且我有一个新评论,我想删除 100 cmets 链中的第一个评论并添加新评论,这是一个示例:

1,2,3 .... 99 , 100

2,3,4 ....100 , 101

如您所见,远远落后于其他评论的第一条评论被删除,而新评论则进入了 100 cmets 链

问题从这里开始,如果我在我的案例论坛中,并且这个论坛有数十万个主题,它可以达到数百万个 cmets ,这意味着如果我检查每个新收到的评论有多少 cmets 将导致每添加一条评论都会减慢网站速度,我怎样才能最小化数据库查询?有没有系统/已知的方法来面对这种事情?

【问题讨论】:

  • 如果你的表现有问题,我认为你不应该限制或删除一些东西,它不可能是出路。尝试找出具体导致您的应用变慢的原因并首先对其进行优化。
  • 您可能需要考虑不删除 cmets,而只显示最后 100 个 cmets。
  • 假设您有一个名为ts 的字段,它存储了添加评论时的时间戳。让该列在数据库中建立索引,然后执行 select * from cmets where .... order by ts desc limit 100 !
  • 我同意 user973254 和 Juhana,删除 cmets 可能不是最好的主意。如何创建一个只能容纳 100 cmets 的单独表格并实施 MarcB 下面提到的内容?当您达到 100 条评论时,您会在其中删除最旧的评论。而不是每次需要获得前 100 个 cmets 时,您只需参考此表。

标签: php jquery mysql database coding-style


【解决方案1】:

为什么要删除旧的 cmets?如果您想显示最后 100 个 cmets,则只需 SELECT id, thread_id, user_id, comment_body from COMMENTS where thread_id = @thread_id LIMIT 100。还要确保对外部列进行索引,以便快速查询并仅查询您需要的列。

不,如果您要明智地处理查询,请在需要的地方应用索引,那么您不必担心每条评论都会减慢数据库的速度。你会拥有数以百万计的cmets吗?如果是这样,您可以考虑根据 thread_id 每 1000000* 个线程对数据库进行分区。

您可能对此问题感兴趣:Database architecture for millions of new rows per day


* 对于阅读以下内容的任何人:不要认为这个数字是出于经验的建议或建议。永远不要说:“SO 上的某个人提到了这个数字 x,所以......”我没有经验或基准可以说在这个数字上做这件事会很好。我只是自己创建我的第一个分区。评估自己什么对你有好处。

【讨论】:

  • 好建议。即使您不想分区并且真的不想要旧的 cmets,您也可以执行常规作业来归档/删除所有旧的 cmets。不要在插入时包含归档/删除 cmets 的逻辑,只需让它添加新行并完成它。
【解决方案2】:

你的数据库结构是什么?大概你有一个“posts”表和一个“cmets”表,它们链接回 posts 表。假设设计得体,cmets 将有一个 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.

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 2020-08-18
    • 1970-01-01
    • 2017-10-16
    • 2015-05-15
    • 2010-11-08
    • 1970-01-01
    • 2020-01-09
    • 2015-04-17
    相关资源
    最近更新 更多