论坛首页 Java版 领域模型

请做架构的朋友一起讨论下SNS中好友动态功能建模的设计

浏览 6803 次
该帖已经被评为良好帖
作者 正文
时间:2008-04-12

我此前参与的一个SNS项目,用的是方法3,升级若干次之后的表结构如下:
  `ic_id` bigint(20)  auto_increment,
  `user_id` int(11) ,
  `to_user_id` int(11) ,
  `change_date` datetime ,
  `change_class` int(11) ,
  `oid` bigint(20) ,
  `priv` int(11)  ,
  `extra_info` varchar(255) ,
  `extra_type` int(11) ,
  `status` tinyint(4)  ,
----------------------------------------------------------------------------------

朋友动态这种信息,根据网站的实际情况我觉得考虑如下几个问题:

1、是否只让用户看到最新n条?(海内的最新动态数量是固定的,采用先进先出原则,用户只能看到最新的n条;而UCH则可以每页150条允许用户翻页

2、用户增减好友后,朋友动态是否能够立刻体现出变化?(在海内,我如果在好友名单中删除一个人,好友动态还会有他的信息,只是不新增他的信息而已;而UCH里面,他的信息立刻消失。加一个人为朋友,也是一样的效果。

问题1和2有一定的联系,涉及到如何对朋友动态进行优化、缓存。

3、用户能否删除自己产生的动态?

4、阅读者是否可以删除其朋友动态中某一条动态?(在校内用户可以删除某一条朋友动态,在UCH用户可以屏蔽某人或者所有人的某类动态,在海内你只能看不能屏蔽

5、动态是否有阅读权限?

6、动态所指向的信息被修改、删除,动态是否要同步变化?(如果你修改了日志的标题,校内网的动态是不变的,而海内是变化的

ithero 写道

如果大家用过fackbook或者及国内的一些SNS对facebook拷贝的交友网站,就发现在在用户登录后首页有一个好友动态。它把好友最近发生的事情都罗列出来。
如用户个人首页对应有几种好友最近发生状态,blog,music,friend,video等等
实现方法个人考虑了几种(注意,前两种理论上可以实现,没具体去操作):
1),最简单那种,如果从不计较性能来考虑。实现这个功能就很简单。那就是对上面blog,music……等表都发起一条查询,再显示到页面。这种实现显示是不能让人接受的。
2),也笨拙,用sql union来实现,同样可以实现
3),这种实现就是针对好友动态创建一个表。即设计一个好友动态的对象。但怎么样来设计这个对象呢
如好友动态有如下属性:userId,friendUserId,createTime,余下的属性该如何来设计呢?是增加
blog,music,video等等通用名字的冗余字段(如name 对应blog标题,音乐名称,视频名称)又或者
又通过这个表去关联那些表呢
4),用JMS实现。发布订阅模式的应用。

想请问大家在面对这种功能需求的时候。会怎么来考虑?
贴张类似的需求的截图大家看看

 

 

 

   
0 请登录后投票
时间:2008-04-13
表结构及展示上用lllyq类似的架构应该可以满足需求;表可以采用对用户id取模的形式分拆。
另外,我觉得关键不在于展示,而是数据的抓取及合并。

好友信息对实时性的要求肯定不及主业务高,所以抓取这块肯定是通过异步处理,最好是具有分发机制的;但是JMS调用开销又比较大,即使用Lingo,也会多出几ms的开销,相比而言,文本或自定义通讯的机制开销会小一些。

信息合并目前没有好的想法(指类似一段时间内加了两好友,信息显示一条而非两条),只是每次有信息变更时比较下近期有无类似信息需要进行合并。不知大家有何更好的建议。
   
0 请登录后投票
时间:2008-04-17
mingsheng 写道

我此前参与的一个SNS项目,用的是方法3,升级若干次之后的表结构如下:
  `ic_id` bigint(20)  auto_increment,
  `user_id` int(11) ,
  `to_user_id` int(11) ,
  `change_date` datetime ,
  `change_class` int(11) ,
  `oid` bigint(20) ,
  `priv` int(11)  ,
  `extra_info` varchar(255) ,
  `extra_type` int(11) ,
  `status` tinyint(4)  ,
----------------------------------------------------------------------------------

朋友动态这种信息,根据网站的实际情况我觉得考虑如下几个问题:

1、是否只让用户看到最新n条?(海内的最新动态数量是固定的,采用先进先出原则,用户只能看到最新的n条;而UCH则可以每页150条允许用户翻页

2、用户增减好友后,朋友动态是否能够立刻体现出变化?(在海内,我如果在好友名单中删除一个人,好友动态还会有他的信息,只是不新增他的信息而已;而UCH里面,他的信息立刻消失。加一个人为朋友,也是一样的效果。

问题1和2有一定的联系,涉及到如何对朋友动态进行优化、缓存。

3、用户能否删除自己产生的动态?

4、阅读者是否可以删除其朋友动态中某一条动态?(在校内用户可以删除某一条朋友动态,在UCH用户可以屏蔽某人或者所有人的某类动态,在海内你只能看不能屏蔽

5、动态是否有阅读权限?

6、动态所指向的信息被修改、删除,动态是否要同步变化?(如果你修改了日志的标题,校内网的动态是不变的,而海内是变化的

ithero 写道

如果大家用过fackbook或者及国内的一些SNS对facebook拷贝的交友网站,就发现在在用户登录后首页有一个好友动态。它把好友最近发生的事情都罗列出来。
如用户个人首页对应有几种好友最近发生状态,blog,music,friend,video等等
实现方法个人考虑了几种(注意,前两种理论上可以实现,没具体去操作):
1),最简单那种,如果从不计较性能来考虑。实现这个功能就很简单。那就是对上面blog,music……等表都发起一条查询,再显示到页面。这种实现显示是不能让人接受的。
2),也笨拙,用sql union来实现,同样可以实现
3),这种实现就是针对好友动态创建一个表。即设计一个好友动态的对象。但怎么样来设计这个对象呢
如好友动态有如下属性:userId,friendUserId,createTime,余下的属性该如何来设计呢?是增加
blog,music,video等等通用名字的冗余字段(如name 对应blog标题,音乐名称,视频名称)又或者
又通过这个表去关联那些表呢
4),用JMS实现。发布订阅模式的应用。

想请问大家在面对这种功能需求的时候。会怎么来考虑?
贴张类似的需求的截图大家看看

 

 

 


你上家公司的SNS产品是那个网站,呵呵,对好友动态这个功能分析的很全面.我也是刚着手来做这部分的开发..不过有点没弄明白.你们设计这个表是怎么能组织数据的呢?

   
0 请登录后投票
论坛首页 Java版 领域模型

跳转论坛:
JavaEye推荐
    快速回复 引用上一条消息 (Alt+S)