首页 文章

设计模式:通知系统

提问于
浏览
39

我正在开发一个将使用社交网络功能的网站(例如facebook) .

我想实现一个通知系统,显示诸如“X将你添加为朋友”,“Y邀请你参加聚会”,“Z已经采取了最新的问题”......以及我不知道该怎么做 .

我想知道什么是最好的解决方案:

  • 解决方案1,又名"logging" .

专用表“通知” . 每次发生通知时都会在此表中添加行(朋友添加,quizz应答等) . 根据向表中添加的通知类型,表“通知”包含包含不同信息的字段 .

Good :易于编码,通知功能和"normal"功能之间的分离,当我需要读取表格时,没有太多资源消耗 .

Bad :通知表可能会增长很大(我想我会在表中添加10k行/天),"duplicated"信息:通知表中的信息可以在所有其他表中找到,使用日期/列表/无论比较 .

  • 解决方案2,又名"look everywhere" .

每当我需要显示通知列表或显示有多少新通知时,我会查看所有相关的表,比较日期/等以了解自上次用户检查通知后是否发生了新的事情 .

Good :与解决方案1相比,不是一个太大的表,没有"redundancy"的信息 .

Bad :由于用户数量(~1k)我很害怕,它会使服务器爆炸,因为它耗费资源/时间,编码/维护难度更大 .

你能告诉我你认为哪个更好,为什么,或者你有一个我没想到的解决方案?

谢谢=)


Edit : 假设我使用了一个非常基本的数据库设计:用户有朋友,可以做测验 .

1个用户列表,quizz列表,

1表quizz < - >用户关系,

1表用户< - >友情用户 .

每当用户访问他自己的 Profiles 时,他都可以看到发生了什么:新的quizz < - >用户关系,新用户< - >用户关系等 . 你会如何设计这样的通知?

4 回答

  • 0

    创建系统队列,添加到此队列的每条消息都有一个“使用者”列表和内容 . 主消息泵处理每条消息并将消息发送给所有消费者 .

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

    这过于简单,但希望显示消息队列如何用于此(非常类似的系统用作Windows UI框架),因此已有一个现有的示例,并且您可以使用大量的同步消息队列模式 .

    休息取决于你的设计 .

  • 15

    真的,这属于 how do I design a car? 类型问题类别......

    实现取决于设计,将来的位置以及将要实现的环境 . 您可以选择推特式的实现,SAN支持的XML系统,关系数据库,Hadoop以及其他许多 .

    对Web技术,经验,试验和错误的充分了解是您可以确定设计任何功能的唯一方法,即您正在以正确(ish)的方式进行设计 .

    您的表现需求是什么?流量水平?用户要求?您想稍后分发(例如通过webhooks分发吗?) .

    你的问题需要更具体 .

    I personally 会有一个"notification-types"表,就像一个枚举...然后是一个用户<>通知表,处理通知和用户之间的关系 .

    通过一些良好的编码,您可以将用户<>通知表拼接在许多服务器上并键入用户ID或类似的...并在每个节点上复制类型表以进行本地缓存/引用 . 这样的事情 .

  • 1

    现在像亚马逊托管的日子服务器正在提供通知框架 . 因此,如果您使用亚马逊通知,您可能不需要担心表格结构 .

    希望这有助于其他人寻找类似的解决方案

  • 21

    我建议使用普通通知 . 没有通知类型或别的 .

    Notifications
    -ID
    -信息
    -href(用户点击通知时转到的链接)
    -receiverUser
    -日期

    用法示例:John(34)赞了Mary(47)的照片 . (我们正在向玛丽发送通知)

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

相关问题