转载:SNS用户数据表设计方案 以Facebook和UcHome数据表设计分析为例
NS与博客最大的区别在于关注重点不同,后者以博客为平台,基于博客ID而产生的日志,话题,照片,群组,视频,分享,好友等等,而前者强者个人,基于人ID而与其相关的日志,话题,照片,群组,好友等等,虽然功能上差不多,但关注重点不同,因而对数据库的设计而言,user_id成为全部数据设计的核心,根据我对facebook,ucHome两个数据表结构分析来看,基本上所有的功能都是通过user_id引导,从而延伸到相关的组件,如日志,照片,群组等等,或者是个人的东西,或者是大家的东西,但都有一个共同的特点:都离不开user_id。
facebookuchome
Facebook的数据结构分析:
一,主要基于用户表,这是最基础数据源,设计中避免数据字段过多进行了数据字段分离设计,如学校状态,时间分区,安全问题等,这些分离出来的字段单独成表,既有利于降低数据查询的压力,而且便于扩展,这个数据设计思路是facebook设计数据库的灵魂(个人观点)。我的分析如下:
1,facebook数据表设计,能分离的字段尽量分离,这主要体现在facebook的数据库小表非常多,同样一张数据表,完全可以与其它表合并,但其通过一个user_id查找,再根据相关的ID查找其它信息,实现字段分离。
2,对比ucHome数据表设计,同样一个功能,facebook使用3-4张表设计,而UChome却只用一张表,最突出的特点在于,UcHome数据的约束字段(如访问权限)附属在信息(如每个篇日志,每一张照片中),但facebook却分离了这此信息,非常灵活。
二,Facebook数据中有一张基础档案表,个人认为这是一张非常特别的表,原因如下:
1,表字段是全是ID集合表,如:user_id,intersted_id等等,可以说是一张十通八达的表,通过这张表可以获取用户整个信息,而这些信息对于SNS来说,就是我们上面说的关注的重点。
2,为什么要这样设计?个人认为,提高数据表的查询能力,这种纯ID的字段表要快得多,而每次获取的信息只是个人信息中的一小部分,因此,对于SNS来说,设计数据库要着重在用户资料的细化上,因为大部分查询都是查询用户的一系列操作等上。
三,扩展功能,其实这些所谓的功能完全非常独立,功能上也互不相干,对于日志,群组,相册等等功能来说,只需要一个东西,user_id。其它都完全可以独自处理。同样,facebook的扩展功能数据表设计也是表分离,表结构尽量分离最小化,如:日志(日志表,日志回复表,日志图片表)。