PHP存储未读帖子和通知的想法

PHP存储未读帖子和通知的想法,php,mysql,serialization,Php,Mysql,Serialization,因此,我一直在玩一个我正在构建的论坛,并且有一段时间一直停留在其中的一个方面,即如何在不将大量数据存储在数据库中的情况下跟踪未读的帖子和通知。在研究了一些解决方案之后,我相信我找到了一个可能适合我需要的解决方案,但需要一双新的眼睛来指出我没有想到的东西。这是我的想法的架构 1) 当用户登录时,检查当前time()和上次登录time()之间的帖子 2) 若找到POST,则将其添加到数组中,然后将其序列化()数组并保存到数据库中的成员行 3) 如果不为空,则向用户输出数组 这样,它将只检查未读的帖子

因此,我一直在玩一个我正在构建的论坛,并且有一段时间一直停留在其中的一个方面,即如何在不将大量数据存储在数据库中的情况下跟踪未读的帖子和通知。在研究了一些解决方案之后,我相信我找到了一个可能适合我需要的解决方案,但需要一双新的眼睛来指出我没有想到的东西。这是我的想法的架构

1) 当用户登录时,检查当前
time()
和上次登录
time()
之间的帖子

2) 若找到POST,则将其添加到数组中,然后将其序列化()数组并保存到数据库中的成员行

3) 如果不为空,则向用户输出数组

这样,它将只检查未读的帖子,并存储在实际登录论坛的用户上,而不会占用不必要的空间来保存非活动用户的未读ID。我仍然想知道这是否不是一个好主意,因为如果用户不阅读文章,那么数据库中的序列化可能会变得太大而无法管理

有人认为我的思维方式有问题吗?如果是,请告诉我

  • 如果用户登录但未阅读帖子,则您的方案仍将其标记为已读
  • 如果用户同时登录两次(比如从台式电脑和iPad),会发生什么
  • 在每个用户的论坛视图中保留一个标志以指示他们是否阅读了每个论坛,这有什么问题?这种机制显然有助于扩展到向上投票、收藏夹等

  • 如果用户登录但未阅读帖子,则您的方案仍将其标记为已读
  • 如果用户同时登录两次(比如从台式电脑和iPad),会发生什么

  • 在每个用户的论坛视图中保留一个标志以指示他们是否阅读了每个论坛,这有什么问题?这种机制显然有助于扩展到upvoting、favorites等领域。

    在出现实际问题之前,不要担心空间问题。存储post ID(整数)和用户ID(另一个整数)的表将很小。即使您有数千篇文章和数千名用户,您也可以放心地假设:

    • 大部分用户将处于非活动状态(一次性注册以发布内容并忘记整个问题)
    • 即使是活跃的成员也不会阅读所有的帖子,而是只阅读他们感兴趣的主题中的一部分(相对较小)

    还有一件事:如果你真的想最小化空间,就不要存储未读的帖子。在每个线程中只存储最后一次读取的帖子。这是每个用户每个线程一条记录,并且只假设用户曾经打开过线程。

    在出现实际问题之前,不要担心空间问题。存储post ID(整数)和用户ID(另一个整数)的表将很小。即使您有数千篇文章和数千名用户,您也可以放心地假设:

    • 大部分用户将处于非活动状态(一次性注册以发布内容并忘记整个问题)
    • 即使是活跃的成员也不会阅读所有的帖子,而是只阅读他们感兴趣的主题中的一部分(相对较小)

    还有一件事:如果你真的想最小化空间,就不要存储未读的帖子。在每个线程中只存储最后一次读取的帖子。这是每个用户每个线程一条记录,并且只假设用户曾经打开过线程。

    我建议您查看search.phpSMF存储阅读主题中PHPBB的newposts部分。是的,每个用户,每个主题都读过。所以,正如您所说,不存储所有“未读”项目的诀窍是存储“已读”项目。我建议您查看search.phpSMF存储已读主题中PHPBB的newposts部分。是的,每个用户,每个主题都读过。所以,正如您所说,不存储所有“未读”项的诀窍是存储“已读”项。那么,在表中为每个用户读取的每个主题存储主题id和成员id将以指数形式增大。如果用户将所有帖子都标记为已读呢?它将随着帖子数量和用户数量的增加而线性增大。如果它们以相同的速度增长,它将随着时间呈几何级数增长,这并不像指数增长那么糟糕。如果您只是存储ID和标志,那么每个记录都应该是真正微不足道的东西,比如10个字节。在2000个用户和10000个帖子之后,最大可能的规模将是200米。听起来对我来说相当安全。@EdR:它不是指数型的;这两个维度中的每一个都是线性的
    Topic_id*member_id
    对于200万用户和2万个主题来说,只有大约320 GB的存储空间。按目前的价格,这将消耗21美元的购买磁盘空间。没什么大不了的。我想它会线性增大,而不是指数增大。此外,你可以随时删除对超过30天的帖子的引用。我错了。我决定为每个主题/用户使用一个表,并将相应地编制索引。谢谢您的帮助。如果将每个用户阅读的每个主题的主题id和成员id存储在一个表中,则会成倍增加。如果用户将所有帖子都标记为已读呢?它将随着帖子数量和用户数量的增加而线性增大。如果它们以相同的速度增长,它将随着时间呈几何级数增长,这并不像指数增长那么糟糕。如果您只是存储ID和标志,那么每个记录都应该是真正微不足道的东西,比如10个字节。在2000个用户和10000个帖子之后,最大可能的规模将是200米。听起来对我来说相当安全。@EdR:它不是指数型的;这两个维度中的每一个都是线性的
    Topic_id*member_id
    对于200万用户和2万个主题来说,只有大约320 GB的存储空间。按目前的价格,这将消耗21美元的购买磁盘空间。没什么大不了的。我想它会线性增大,而不是指数增大。此外,你可以随时删除对超过30天的帖子的引用。我错了。我决定为每个主题/用户使用一个表,并将