首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP / MySQL中处理未读帖子

在PHP / MySQL中处理未读帖子
EN

Stack Overflow用户
提问于 2011-04-05 23:47:36
回答 4查看 5.3K关注 0票数 16

对于一个个人项目,我需要建立一个论坛使用PHP和MySQL。我不可能使用已经构建的论坛包(例如phpBB)。

我目前正在研究构建这样一个应用程序所需的逻辑,但这是一个漫长的一天,我正在为用户处理未读帖子的概念而苦苦挣扎。我的一个解决方案是有一个单独的表,它实际上包含所有的帖子ID和用户ID,以确定它们是否已被读取:

tbl_userReadPosts: user_id, post_id, read_timestamp

显然,如果一个用户的ID出现在这个表中,我们就知道他们已经阅读了这篇文章。这是很棒的,除非我们每天有成千上万的帖子(这在正在提议的系统中是可能的),以及成千上万的用户。这张桌子会在几天内变得很大,如果不是几个小时的话。

另一种选择是跟踪用户的最后一次活动作为时间戳,然后检索他们最后一次活动更新后发布的所有帖子。这在理论上是可行的,但是假设一个用户正在写一个非常长的帖子,同时几个成员也会开始新的线程或者回复其他线程中的帖子。当用户提交他的新帖子时,他的最后一次活动将被更新,因此与在此期间进行的活动不匹配。

有没有人有这方面的经验,你是怎么解决的?

我签入了phpBB,似乎系统为每个用户分配了一个自定义会话,并在此基础上工作,但文档中关于如何处理未读帖子的文档相当稀少。

像往常一样,感激地接受了我的想法和意见。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-05 23:52:12

很抱歉回答得这么快,但我只有一秒钟的时间。您肯定不希望将读取的信息存储在数据库中,正如您已经推断的那样,这个表会变得非常庞大。

你已经建议的中间部分:存储用户的最后一次活动,并结合存储他们在cookie中看到的信息,以确定他们已经阅读了哪些线程/帖子。

这会将存储负载转移到客户端cookie,这要高效得多。

票数 6
EN

Stack Overflow用户

发布于 2011-04-05 23:53:48

一个包含所有user_ids和post_ids的表不是一个好主意,因为它会呈指数级增长。想象一下,如果您的论坛解决方案增长到一百万条帖子和50,000个用户。现在你有500亿条记录。那会是个问题。

诀窍是像你说的那样使用一个表,但它只保存自这次登录以来阅读的帖子,以及上次登录和这次登录之间发布的帖子。

在最后一次登录之前发布的所有帖子都被视为已读。

例如,我最后一次登录是在2011年4月3日,然后我今天登录了。所有在2011年4月3日之前发表的帖子都被认为是已读的(对我来说并不新鲜)。从2011年4月3日到现在的所有帖子都是未读的,除非它们出现在已读表格中。每次我登录时,都会刷新读取表。

这样,您的read post表中每个成员的记录就不会超过几百条。

票数 7
EN

Stack Overflow用户

发布于 2011-04-06 00:32:29

您可以在user表中使用一个字段,其中包含一个逗号分隔的字符串,其中包含用户已读取的post-ID,而不是为每个post*用户创建一个新行。

显然,用户不需要知道2年前有未读的帖子,所以您只需要显示过去24小时内的帖子的"New post“,而不是逗号分隔的字符串。

您也可以使用会话变量或cookie来解决此问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5554637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档