Php “适合存储的体系结构”;见;信息

Php “适合存储的体系结构”;见;信息,php,Php,我相信你们所有人都曾在某个网站上看到过一些消息,例如,你们登录后,上面写着“太平洋标准时间周二下午5点将有计划的维护停机”。然后你就有了信息的记号。当你点击它时,你不会再看到消息了 现在,我的问题是如何在数据库中处理这个问题。也就是说,如果您有1M注册用户,并且您决定为每个用户存储此“已看到”记录,那么您将得到一个1M表,该表必须在每次有人登录时读取。另一方面,如果您有10条这样的消息,那么表的增长当然要快得多。最后,可能会有类似“约翰尼、哈里、黛安和你的5个朋友更新了他们的个人资料”的消息 你

我相信你们所有人都曾在某个网站上看到过一些消息,例如,你们登录后,上面写着“太平洋标准时间周二下午5点将有计划的维护停机”。然后你就有了信息的记号。当你点击它时,你不会再看到消息了

现在,我的问题是如何在数据库中处理这个问题。也就是说,如果您有1M注册用户,并且您决定为每个用户存储此“已看到”记录,那么您将得到一个1M表,该表必须在每次有人登录时读取。另一方面,如果您有10条这样的消息,那么表的增长当然要快得多。最后,可能会有类似“约翰尼、哈里、黛安和你的5个朋友更新了他们的个人资料”的消息

你每天可能会收到10-50条这样的信息。我想的是最好的方法。我在过去实施了很多解决方案,但我正在重新思考,并想知道社区中的其他人是如何处理这样的问题的

编辑: @哈克雷
谢谢你的评论。事实上,我确实在问题本身中描述了我处理问题的一种方式。不要误会我的意思,但如果我提出解决方案,答案往往会讨论那些我不喜欢的解决方案。

你手头有任何NoSQL吗

我使用redis,我将创建一个集合,其中所有用户ID都是集合的成员(如果用户应该标记为可见,则添加ID)。。。要检查用户是否看到消息,一个简单的
SISMEMBER
就足够了,它是O(1)

另外,对于
seen
字段,您不需要任何db查询或alter table


您不必阅读整个表格。这就是索引的作用。从技术角度考虑:如果您想知道每条消息以及检查了哪些消息的每个用户,那么就不能将每个检查存储为单个条目。唯一的问题是,是否必须将每个复选标记存储在一行中。您可以使用位字段,这在查看空间使用情况时非常完美,但您必须尝试这些位字段(数千位)的实际行为。从来没有尝试过。所以你以前做过,你不想分享你所做的,但你要求别人分享?嗯,我想说,如果你先走一步,这些东西效果最好。以目前的形式,这是相当广泛的,我可以给你写一本关于这方面的书。一块饼干就足够了吗?您不需要数据库结构。您是说要为每条消息创建一个新的集合吗?不。一个集合,用于存储看到该消息的人的所有用户ID。