SlideShare a Scribd company logo
1 of 25
大型SNS网站数据库设计
Tony Deng
http://twitter.com/wolfdeng
http://friendfeed.com/tonydeng
http://delicious.com/wolf.deng
http://wolfchina.blogbus.com
SNS介绍
• SNS(Social Networking Services) 即社会性网
络服务
思考问题
• 前期无盈利,如何支撑?
• 爆炸性增长,如何解决?
• 业务形态纷繁复杂,如何应对?
前期无盈利,如何支撑?
数据库选型
• 从数据库的角度,如何来控制成本?
• 选择考虑因素
– 开源,免费,成本低廉
– 高性能,稳定
– 部署灵活,维护方便
– 应用广泛,有广泛的成果案例
– 多平台,无硬件依赖
品种 价格(元) 单位
Oracle 10g 250,000 core
SQL Server 2008 140,000 cpu
Mysql 5.1 0
PostgreSQL 8.4 0
爆炸性增长,如何解决
使用分布式数据库?
• 分布式数据库
– 优点:
• 分散负载
• 局部应用响应速度快
• 体系灵活
• 可靠性高,可用性好
• 扩展性好
– 致命缺点:
• 弱关系(避免join)
• 避免跨数据库事务
• SNS应用以用户为中心,存储
的是用户属性及行为数据,一
个带有用户ID的原子性操作就
能满足大部分需求,所以这些
缺点对它来说显得并不突出
如何分布式—数据切分
垂直切分(规则简单,实施方便) 水平切分(相对复杂)
常用水平切分方式
• 按照范围切分
– 根据UID范围切分:1~1000对应DB1,1001~2000对应DB2,以此类推
• 优点:迁移方便
• 缺点:数据分布不均
• 按照Hash取模切分
– UID mod 4 余数为0对应DB1,1对应DB2,2对应DB3,3对应DB4
• 优点:数据分布均匀
• 缺点:数据迁移的时候麻烦,需要重新Hash取模
• 建立配置表
– 在数据库建立一个UID与DB的对应关系表,每次查询数据库的时候先要查询
一下这个表,以得到具体的DB信息,然后在进行我们需要的查询操作。
• 优点:灵活性强,一对一关系
• 缺点:每次查询都需要多一次查询,性能大打折扣
拆分案例一
User
Feed
Album
……
Album
Feed
User
User UserUser
Feed FeedFeed
Album Album Album
……
……
……
……
DB
利用中间件/程序逻辑拆分
先垂直,后水平
先哈希,后范围
拆分方案二
USER_profile
DB_USER
USER_profile_00
USER_profile_01
…….
USER_profile_0E
USER_profile_0F
DB_USER_0
USER_profile_10
USER_profile_11
…….
USER_profile_1E
USER_profile_1F
USER_profile_F0
USER_profile_F1
…….
USER_profile_FE
USER_profile_FF
DB_USER_1
DB_USER_F
硬路由,避免中间逻辑
一共有(0,1,2……E,F) 16个数据库节点
每个节点(0,1,2……E,F)16个表
16*16切分
表的命名=原名+后缀(2个字符)字符取值范围为[0,F]
用户定位:16进制MD5哈希值,第一位定位库,第二位定位表
…..
拆分流程
1
2
3
4
5
6
7
8
9
A
B
C
D
E
整体
一次分片
二次分片
三次分片
二次拆分(配合中间件/程序逻辑)ClientClientClient
Proxy
UID mod 4
[0,1] to DB1
[2,3] to DB2
DB1
USER_profile
0,1,4,5
Read/Write
Read/Write
Return
原始状态
客户端通过中间件与数据库进行交互
二次拆分(配合中间件/程序逻辑)
Proxy
UID mod 4
[0,1] to DB1
[2,3] to DB2
DB1
USER_profile
0,1,4,5
Read/Write
Read/Write
Return
ClientClientClient
USER_profile
0,1,4,5
DB1_1
Replication
创建复制
二次拆分(配合中间件/程序逻辑)
Proxy
UID mod 4
[0] to DB1
[1] to DB1_1
[2,3] to DB2
DB1
USER_profile
0,1,4,5,8
Read/Write
ClientClientClient
USER_profile
0,1,4,5,8,9
DB1_1
Replication
更改路由
二次拆分(配合中间件/程序逻辑)
Proxy
UID mod 4
[0] to DB1
[1] to DB1_1
[2,3] to DB2
DB1
USER_profile
0,1,4,5,8
Read/Write
ClientClientClient
USER_profile
0,1,4,5,8,9
DB1_1
Replication
停止复制
二次拆分(配合中间件/程序逻辑)
Proxy
UID mod 4
[0] to DB1
[1] to DB1_1
[2,3] to DB2
DB1
USER_profile
0,1,4,5,8
Read/Write
ClientClientClient
USER_profile
0,1,4,5,8,9
DB1_1
删除冗余
对应用无影响,无缝拆分
业务形态纷繁复杂,如何应对?
业务分类
• 使用分类、归纳方法
– 读特征非常明显的业务,比如相册、博客
– 时效性很强的业务,比如动态、微博
– 需求变动频繁的业务,比如任务
– ……
读特征明显的业务处理方式
• 读写分离
Master - Slave
Master - Slave
Master - Slave- Slave
读写分离流程
时效性强的业务处理方式
• 以时间作为partition,按照时间来进行分片,过
期的数据可以直接删除分区
• 好处:
– 删除效率高
– 无行锁,对前端业务无影响
– 可以很好的控制数据量,平衡性能
需求变动频繁的业务处理方式
数据量小,统计性强,扩展性差
无限扩展,兼顾统计,数据量庞大
扩展性较好,记录数小,
结果需要逻辑分析,数据统计不便
常见的SNS网站架构
谢谢

More Related Content

Similar to 大型Sns网站数据库设计

薛伟:腾讯广点通——大数据之上的实时精准推荐
薛伟:腾讯广点通——大数据之上的实时精准推荐薛伟:腾讯广点通——大数据之上的实时精准推荐
薛伟:腾讯广点通——大数据之上的实时精准推荐
hdhappy001
 
开源社区生生不息的创新土壤
开源社区生生不息的创新土壤开源社区生生不息的创新土壤
开源社区生生不息的创新土壤
Steven Cheng
 
Sns与系统架构浅谈
Sns与系统架构浅谈Sns与系统架构浅谈
Sns与系统架构浅谈
taobaby365
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
drewz lin
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
drewz lin
 
腾讯组织架构及其战略
腾讯组织架构及其战略腾讯组织架构及其战略
腾讯组织架构及其战略
microgg
 
信息系统架构设计
信息系统架构设计信息系统架构设计
信息系统架构设计
Weijun Zhong
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
drewz lin
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011
Yiwei Ma
 
米聊服务器技术选型与架构
米聊服务器技术选型与架构米聊服务器技术选型与架构
米聊服务器技术选型与架构
Jinping Qu
 
陈跃国:Sql on-hadoop结构化大数据分析系统性能评测
陈跃国:Sql on-hadoop结构化大数据分析系统性能评测陈跃国:Sql on-hadoop结构化大数据分析系统性能评测
陈跃国:Sql on-hadoop结构化大数据分析系统性能评测
hdhappy001
 
数据平台建设进展汇报以及对产品人员工作的认识 王小红20140227
数据平台建设进展汇报以及对产品人员工作的认识 王小红20140227数据平台建设进展汇报以及对产品人员工作的认识 王小红20140227
数据平台建设进展汇报以及对产品人员工作的认识 王小红20140227
Bluer Wang(王小红)
 
Bvod Overview Ch 20090715
Bvod Overview Ch 20090715Bvod Overview Ch 20090715
Bvod Overview Ch 20090715
bvod
 

Similar to 大型Sns网站数据库设计 (20)

使用者中心的網站設計原則 以英國政府入口網gov.uk 為例 / 悠識 蔡明哲
使用者中心的網站設計原則 以英國政府入口網gov.uk 為例 / 悠識 蔡明哲使用者中心的網站設計原則 以英國政府入口網gov.uk 為例 / 悠識 蔡明哲
使用者中心的網站設計原則 以英國政府入口網gov.uk 為例 / 悠識 蔡明哲
 
薛伟:腾讯广点通——大数据之上的实时精准推荐
薛伟:腾讯广点通——大数据之上的实时精准推荐薛伟:腾讯广点通——大数据之上的实时精准推荐
薛伟:腾讯广点通——大数据之上的实时精准推荐
 
开源社区生生不息的创新土壤
开源社区生生不息的创新土壤开源社区生生不息的创新土壤
开源社区生生不息的创新土壤
 
Sns与系统架构浅谈
Sns与系统架构浅谈Sns与系统架构浅谈
Sns与系统架构浅谈
 
台中市創業平台建置計畫
台中市創業平台建置計畫台中市創業平台建置計畫
台中市創業平台建置計畫
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
Oceanus, a social listening/ social software company
Oceanus, a social listening/ social software companyOceanus, a social listening/ social software company
Oceanus, a social listening/ social software company
 
腾讯组织架构及其战略
腾讯组织架构及其战略腾讯组织架构及其战略
腾讯组织架构及其战略
 
信息系统架构设计
信息系统架构设计信息系统架构设计
信息系统架构设计
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
數位培能企業常見系統平台 與臺灣雲市集—20211112
數位培能企業常見系統平台與臺灣雲市集—20211112數位培能企業常見系統平台與臺灣雲市集—20211112
數位培能企業常見系統平台 與臺灣雲市集—20211112
 
以使用者為中心的設計概念跟方法(Inside salon)
以使用者為中心的設計概念跟方法(Inside salon)以使用者為中心的設計概念跟方法(Inside salon)
以使用者為中心的設計概念跟方法(Inside salon)
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011
 
米聊服务器技术选型与架构
米聊服务器技术选型与架构米聊服务器技术选型与架构
米聊服务器技术选型与架构
 
陈跃国:Sql on-hadoop结构化大数据分析系统性能评测
陈跃国:Sql on-hadoop结构化大数据分析系统性能评测陈跃国:Sql on-hadoop结构化大数据分析系统性能评测
陈跃国:Sql on-hadoop结构化大数据分析系统性能评测
 
海量計算的學習歷程分析與雲端資料庫管理系統Sqlmr appliance一體機開發計畫書 20140101
海量計算的學習歷程分析與雲端資料庫管理系統Sqlmr appliance一體機開發計畫書 20140101海量計算的學習歷程分析與雲端資料庫管理系統Sqlmr appliance一體機開發計畫書 20140101
海量計算的學習歷程分析與雲端資料庫管理系統Sqlmr appliance一體機開發計畫書 20140101
 
数据平台建设进展汇报以及对产品人员工作的认识 王小红20140227
数据平台建设进展汇报以及对产品人员工作的认识 王小红20140227数据平台建设进展汇报以及对产品人员工作的认识 王小红20140227
数据平台建设进展汇报以及对产品人员工作的认识 王小红20140227
 
網路廣告的基本架構
網路廣告的基本架構網路廣告的基本架構
網路廣告的基本架構
 
Bvod Overview Ch 20090715
Bvod Overview Ch 20090715Bvod Overview Ch 20090715
Bvod Overview Ch 20090715
 

More from Tony Deng

《我们如何工作》—质量保障
《我们如何工作》—质量保障《我们如何工作》—质量保障
《我们如何工作》—质量保障
Tony Deng
 
《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通
Tony Deng
 
技术债务的形成
技术债务的形成技术债务的形成
技术债务的形成
Tony Deng
 
我们不了解的计算机世界(二)
我们不了解的计算机世界(二)我们不了解的计算机世界(二)
我们不了解的计算机世界(二)
Tony Deng
 
我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历
Tony Deng
 
实时任务调度
实时任务调度实时任务调度
实时任务调度
Tony Deng
 
节约内存:Instagram的redis实践
节约内存:Instagram的redis实践节约内存:Instagram的redis实践
节约内存:Instagram的redis实践
Tony Deng
 

More from Tony Deng (20)

一页纸项目管理
一页纸项目管理一页纸项目管理
一页纸项目管理
 
Docker at the gate
Docker at the gateDocker at the gate
Docker at the gate
 
《我们如何工作》—质量保障
《我们如何工作》—质量保障《我们如何工作》—质量保障
《我们如何工作》—质量保障
 
《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通《我们如何工作》- 产品经理和工程师如何有效沟通
《我们如何工作》- 产品经理和工程师如何有效沟通
 
我们为何工作--找到正确的工作方式
我们为何工作--找到正确的工作方式我们为何工作--找到正确的工作方式
我们为何工作--找到正确的工作方式
 
SDN介绍
SDN介绍SDN介绍
SDN介绍
 
漫谈职业规划
漫谈职业规划漫谈职业规划
漫谈职业规划
 
一次Http请求过程分析
一次Http请求过程分析一次Http请求过程分析
一次Http请求过程分析
 
图解Git
图解Git图解Git
图解Git
 
一次Code review引发的思考
一次Code review引发的思考一次Code review引发的思考
一次Code review引发的思考
 
My sql迁移总结
My sql迁移总结My sql迁移总结
My sql迁移总结
 
一次项目的探险旅程
一次项目的探险旅程一次项目的探险旅程
一次项目的探险旅程
 
Scrum敏捷开发模型
Scrum敏捷开发模型Scrum敏捷开发模型
Scrum敏捷开发模型
 
Shoutv 冯晓东
Shoutv 冯晓东Shoutv 冯晓东
Shoutv 冯晓东
 
技术债务的形成
技术债务的形成技术债务的形成
技术债务的形成
 
我们不了解的计算机世界(二)
我们不了解的计算机世界(二)我们不了解的计算机世界(二)
我们不了解的计算机世界(二)
 
HBase
HBaseHBase
HBase
 
我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历我们不了解的计算机世界(一)--Unix目录结构的来历
我们不了解的计算机世界(一)--Unix目录结构的来历
 
实时任务调度
实时任务调度实时任务调度
实时任务调度
 
节约内存:Instagram的redis实践
节约内存:Instagram的redis实践节约内存:Instagram的redis实践
节约内存:Instagram的redis实践
 

大型Sns网站数据库设计