devise模式:通知系统

我正在使用社交networkingfunction(例如Facebook)的网站上工作。

我想实施一个通知系统,显示“X加你为朋友”,“Y邀请你参加派对”,“Z采取了最新的quizz”……我不知道该怎么办。

我不知道什么是最好的解决scheme:

  • 解决scheme1,又名“日志logging”。

一个专门的表格“通知”。 我每次在这个表中添加行时,会引起通知的发生(好友添加,quizz回答等)。 根据向表中添加什么样的通知,表“通知”具有包含不同信息的字段。

:易于编码,通知function与“正常”function分离,不需要太多的资源,当我需要阅读表。

:通知表会增长可能非常大(我想我会在表中添加10k行/天),“重复”的信息:通知表中的信息可以在所有其他表中使用date/列表/任何比较中find。

  • 解决scheme2,又名“无处不在”。

每次我需要显示通知列表或显示有多less新的通知,我期待所有有关的表,比较date/等,以知道是否有新的事情发生以来,用户检查通知。

:与解决scheme1相比,不是太大的表格,没有“冗余”的信息。

不好 :因为用户数量(〜1k +),我感到害怕,因为它耗费资源/时间,使得服务器爆炸,编码/维护困难一点。

你能告诉我你的想法是什么,为什么,或者你有没有想到的解决scheme?

谢谢=)


编辑:比方说,我使用一个非常基本的数据库devise:用户有朋友,可以做测验。 1个用户列表,quizz列表,1个表quizz < – >用户关系,1个表用户< – >友谊用户。 每次用户访问他自己的个人资料,他都可以看到发生了什么:新的用户关系,新用户< – >用户关系等等。您将如何devise这样的通知?

创build一个系统队列,每个添加到这个队列的消息都有一个“消费者”列表和内容。 主消息泵处理每个消息并将消息发送给所有消费者。

让我们说2个人交朋友。 你添加一条消息给主系统队列,A是B的朋友,消费者都是A和B.当你的消息“pump”(处理器)看到这个消息时,它将它添加到队列A和队列B中。现在用户A和用户B有一个新的消息,他们是朋友。 反过来,每个用户都有一个消息处理器,所以当它看到一条名为“我是[某人]的朋友”的消息时,它将处理这个消息,作为向A的朋友可见的“墙”添加一个新条目:“A是B的朋友“等等

这太简单了,但希望能够显示如何使用消息队列(与Windows UI框架非常相似的系统),所以现在已经有了一个例子,可以使用大量的同步消息队列模式。

rest是由你来devise的。

真的这是在我怎么devise一辆车? 键入问题类别…

实现取决于devise,未来的发展方向以及将要实施的环境。您可以select一个twittertypes的实现,一个由SAN支持的XML系统,Relational Databases,Hadoop和其他types的实现。

对networking技术,经验,试验和错误有良好的了解是你devise任何function的唯一方法,就是你正在做的是正确的(ish)方式。

你的性能需求是什么? 交通水平? 用户要求? 你想稍后分发(通过webhooks例如?)。

你的问题需要更具体。

我个人会有一个“通知types”的表格像一个枚举…然后处理通知和用户之间的关系的用户<>通知表。

通过一些很好的编码,你可以在许多服务器上绑定用户<>通知表,并在用户标识符或类似的键上input密钥,然后在每个节点上复制types表以获得本地caching/引用。 就是这样

现在像亚马逊托pipe这样的服务器正在提供通知框架。 所以,如果你使用亚马逊通知,你可能不需要担心表结构。

希望这有助于他人寻找类似的解决scheme。

我build议使用简单的通知。 没有通知types或别的东西。

通知
-ID
-信息
-href(当用户点击通知时链接去)
-receiverUser
-date

用户示例:John(34)喜欢Mary的照片(47)。 (我们正在向玛丽发送通知)

INSERT INTO Notifications(message,href,receiverUser, date) VALUES ('John liked your photo', 'link of the photo', 47, 01.11.2014)