我正在开发一个将使用社交网络功能的网站(例如facebook).
我想实现一个通知系统,显示诸如"X将你添加为朋友","Y邀请你参加聚会","Z已经采取了最新的问题"......以及我不知道该怎么做.
我想知道什么是最好的解决方案:
解决方案1,又名"记录".
专用表"通知".每次发生通知时都会在此表中添加行(朋友添加,quizz应答等).根据向表中添加的通知类型,表"通知"包含包含不同信息的字段.
好:易于编码,通知功能和"正常"功能之间的分离,当我需要阅读表格时,没有太多资源消耗.
错误:通知表可能会增长很大(我想我会在表中添加10k行/天),"重复"信息:通知表中的信息可以使用日期/列表/任何比较在所有其他表中找到.
解决方案2,又名"到处寻找".
每当我需要显示通知列表或显示有多少新通知时,我会查看所有相关的表,比较日期/等以了解自上次用户检查通知后是否发生了新的事情.
好:与解决方案1相比,不是一个太大的表,没有信息的"冗余".
不好:我因为用户数量(~1k +)而感到害怕,它会使服务器爆炸,因为它耗费资源/时间,编码/维护更难.
你能告诉我你认为哪个更好,为什么,或者你有一个我没想到的解决方案?
谢谢=)
编辑: 假设我使用的是一个非常基本的数据库设计:用户有朋友,可以做测验.
1个用户列表,quizz列表,
1表quizz < - >用户关系,
1表用户< - >友情用户.
每当用户访问他自己的个人资料时,他都可以看到发生了什么:新的quizz < - >用户关系,新用户< - >用户关系等.你会如何设计这样的通知?
创建系统队列,添加到此队列的每条消息都有一个"使用者"列表和内容.主消息泵处理每条消息并将消息发送给所有消费者.
让我们说2个人互相交谈.您向主系统队列添加一条消息,A是B的朋友,消费者是A和B.当您的消息"pump"(处理器)看到此消息时,它会将其添加到A队列和B队列中.现在,用户A和用户B有一条新消息,表明他们是朋友.反过来每个用户都有一个消息处理器,所以当它看到一条名为"我是[某人]的朋友"的消息时,它会将此处理为向A的朋友看到的"墙"添加新条目"A是B的朋友"等
这过于简单,但希望显示消息队列如何用于此(非常类似的系统用作Windows UI框架),因此已有一个现有的示例,并且您可以使用大量的同步消息队列模式.
休息取决于你的设计.
真的,这取决于我如何设计一辆车?类型问题类别......
实现取决于设计,将来的位置以及将要实现的环境.您可以选择推特式的实现,SAN支持的XML系统,关系数据库,Hadoop以及其他许多.
对Web技术,经验,试验和错误的充分了解是您可以确定设计任何功能的唯一方法,即您正在以正确(ish)的方式进行设计.
您的表现需求是什么?流量水平?用户要求?您想稍后分发(例如通过webhooks分发吗?).
你的问题需要更具体.
我个人会有一个"通知类型"表,就像枚举...然后用户<>通知表处理通知和用户之间的关系.
通过一些良好的编码,您可以将用户<>通知表拼接在许多服务器上并键入用户ID或类似的...并在每个节点上复制类型表以进行本地缓存/引用.这样的事情.