当前位置: 首页 > 网站架构 > 正文

feed设计构想

1 星2 星3 星4 星5 星 (3 次投票, 评分: 5.00, 总分: 5)
Loading ... Loading ...
baidu_share

对于sns来说,动态就是核心,动态是传播信息的媒体,用户以动态展开各种交互。

从技术角度来说,动态在读和写方面会很多,用户要先看到动态再去做其它操作,而其它操作都会导致动态的更新,表记录会很多,并只有插入,删除和查询,动态显示每个人都不一样,甚至有很大分别。

先说下好友表,好友表需要有用户id和好友的id两个字段,建唯一索引。连接的时候只需using index,如果内存够大,可以缓冲到内存中,速度够快~好友表肯定是sns中的大表之一,所以必须水平切分,好友表比较好分,因为没有查整张表的业务。

而个人动态,从业务来说,就是分为标题和内容。
例如:

1
2
3
4
5
6
7
8
9
10
[用户a] 上传了 [n] 张照片至 [看图不说话] 
[图片1] [图片2] 
 
[用户b] 更新的头像 
[新头像] 
 
[用户c] 分享了 [用户h] 的日志 [你好,我也好] 
[大家好,才是真的好] 
 
[用户f][用户h] 成为好友

所以可以像设计论坛主题那样来设计这张表,但是为了性能,所以这张表要够小,对于动态字段都保存在持久存储系统中,例如Tokyo Tyrant,memcachedb ,redis

表结构:
引用

1
2
3
4
5
6
feed_id	mediumint(8) 
user_id	mediumint(8) 动态产生人 
feed_type	enum('blog', 'friend', 'album')	 动态类型	
input_date	timestamp 发生动态时间,索引 
feed_title 动态标题 放在持久存储系统中 
feed_content 动态内容 放在持久存储系统中

如果要考虑用户更改数据后更新动态,例如发表日志后,把标题改了,那可以把动态的数据和模板分离,那只需更新动态的数据就可以了,不过要产生动态的应用要记录动态的id

查询的话sql语句如下

1
2
3
4
5
6
7
SELECT *   
FROM  `friend` f,  `feed` fd  
FORCE INDEX ( input_date )   
WHERE f.friend_user_id = fd.user_id  
AND f.user_id =1  
ORDER BY fd.input_date  
LIMIT 30

本文固定链接: http://www.chepoo.com/feed-design.html | IT技术精华网

feed设计构想:等您坐沙发呢!

发表评论