适用于存储“;“看见”;消息


Suitable architecture for storing "Seen" messages

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

现在,我的问题是如何在数据库中处理这个问题。也就是说,如果你有100万注册用户,并且你决定为每个用户存储这个"可见"记录,那么你最终会得到一个100万的表,每次有人登录时都必须从中读取。另一方面,如果你拥有10条这样的消息,那么你的表当然会增长得更快。最后,可能会有类似"Johnny、Harry、Diane和你的5个其他朋友更新了他们的个人资料。">

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

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

您手头有NoSQL吗?

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

另外,对于seen字段,您不需要任何数据库查询或alter表。

http://redis.io/commands/sismember