Ben*_*enM 16 php mysql phpbb forums read-unread
对于个人项目,我需要使用PHP和MySQL构建一个论坛.我不可能使用已经构建的论坛包(例如phpBB).
我目前正在研究构建这样一个应用程序所需的逻辑,但这是漫长的一天,我正在努力处理用户未读帖子的概念.我的一个解决方案是拥有一个单独的表,它基本上保存所有帖子ID和用户ID,以确定它们是否已被读取:
tbl_userReadPosts: user_id, post_id, read_timestamp
显然,如果用户的ID出现在此表中,我们就知道他们已经阅读了帖子.这很好,除非我们每天都有帖子(这比在提议的系统中更有可能)和用户的thousdands.即使不是几小时,这张表也会在几天内变得很大.
另一种选择是将用户的上一个活动作为时间戳跟踪,然后检索在上次活动更新后发布的所有帖子.这在理论上是有效的,但是假设用户正在写一篇非常长的帖子,同时几个成员也开始新的线程或回复其他线程中的帖子.当用户提交他的新帖子时,他的最后一个活动将被更新,因此与那些同时进行的活动不匹配.
有没有人有这方面的经验,你是如何解决它的?
我已经检查了phpBB,似乎系统为每个用户分配了一个自定义会话,并在此基础上工作,但文档对于如何处理未读帖子非常稀疏.
一如既往地感激地收到了想法和意见.
包含所有user_ids和post_id的表是一个坏主意,因为它呈指数级增长.想象一下,如果您的论坛解决方案增长到一百万个帖子和50,000个用户.现在你有500亿条记录.那将是一个问题.
诀窍是如你所说的那样使用一个表,但它只保存自此登录以来已经读过的帖子,这些帖子是在上次登录和此登录之间发布的.
在上次登录之前发布的所有帖子都被视为已读.
IE,我上次登录于2011年4月3日,然后我今天登录.2011年4月3日之前发布的所有帖子都被视为已阅读(对我来说不是新手).2011年4月3日至今之间的所有帖子都是未读的,除非在阅读表中看到它们.每次登录时都会刷新读取表.
这样,您的阅读帖子表不应该为每个成员提供超过几百条记录.
很抱歉快速回答,但我只有一秒钟.您肯定不希望将读取的信息存储在数据库中,正如您已经推断的那样,此表将变得巨大.
在您已经建议的内容之间:存储用户上次活动,并结合存储他们在cookie中看到的内容的信息,以确定他们已经阅读过哪些帖子/帖子.
这会将存储卸载到客户端cookie,这样效率会更高.