一尘不染

PHP论坛-如何应对未读的讨论/主题/帖子

mysql

我知道这个问题已经被问过几次了,但是没有一个答案令我满意。这是因为几乎所有人都涉及与数据库相关的巨大读取/写入过程,我希望不惜一切代价避免这样做。

关于未读的讨论/主题/帖子,有很多需要考虑的地方。我不知道MyBBvBulletinInvision电源板VanillaphpBB等论坛系统如何解决该问题,所以我想向大家介绍您的经验。我知道,仅为此目的使用数据库表是最简单的方法,但是当社区每月有10,000多个成员和1000个新主题时,这将涉及大量的读/写操作。很难,但是应该有一种避免服务器过载的方法。

那么,您如何看待该问题的最佳实践以及其他论坛系统如何应对?


阅读 261

收藏
2020-05-17

共1个答案

一尘不染

没有太多选择。

  1. 每个用户标记每个阅读器线程。

    • 劣势:非常活跃的论坛中有很多行
    • 优点:每个用户都知道与帖子有关的内容。
    • 标记每个用户的每个未读线程。

    • 缺点:如果很多用户不活动,则带有“未读”行的空间很大

    • 解决方案:添加生命周期时间戳记并使用cron删除旧记录
    • 优点:每个用户都知道与帖子有关的内容。
    • 使用时间戳确定是否将其显示为未读。

    • 缺点:用户不知道的是真正的未读线程,标记仅显示自上次登录以来的“新trheads”

    • 优势:节省空间

另一种选择是混合解决方案,即

1和3)如果线程不超过X天并且没有为用户标记为已读的行,则将线程显示为“未读”。X天前可以删除“已读”行,而不会影响任何行。

优点

  • 较少的空间用于确定未读线程

缺点

  • 创建一个cron以保持系统清洁
  • 用户不知道他们读取的线程是否早于x天。

优点

  • 每个用户都知道哪些“新帖子”已读或未读。
2020-05-17