0

我敢肯定,你们所有人都曾在某个网站上看到过一些消息——例如,您登录并显示类似“太平洋标准时间周二下午 5 点将有计划的维护停机时间”之类的内容。然后你有消息的刻度线。当您单击它时,您不会再收到显示的消息。

现在,我的问题是如何在数据库中处理这个问题。即,如果您有 1M 注册用户,并且您决定为每个用户存储此“已见”记录,您最终会得到一个 1M 表,每次有人登录时都必须读取该表。另一方面,如果您有 10像这样的消息 - 当然你的桌子增长得更快。最后,可能会出现“Johnny、Harry、Diane 和您的其他 5 个朋友已更新他们的个人资料”之类的消息。

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

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

4

1 回答 1

1

你手头有 NoSQL 吗?

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

另外,您不需要任何数据库查询或更改该seen字段的表。

http://redis.io/commands/sismember

于 2013-11-03T10:23:55.180 回答