Your SlideShare is downloading. ×

大型Sns数据库设计

8,710

Published on

ThinkingInLamp社区MySQL用户大会(上海)分享

ThinkingInLamp社区MySQL用户大会(上海)分享

Published in: Technology, Business
3 Comments
25 Likes
Statistics
Notes
  • want know more detail
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 大型Sns数据库设计
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • f
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
8,710
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
0
Comments
3
Likes
25
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • 们可能会对 MySQL Replication 的功能特性不满意,进而通过第三方开源软件,甚至是通过解析其开源的通信协议自行开发出来的复制软件来进行数据实时(或者异步)复制来达到 Replication 完全相同甚至更好的效果
  • Transcript

    • 1. 盛大网络 大型 SNS 网站数据库设计 赵佳佳
    • 2. SNS 介绍 SNS ( Social Networking Services )即社会性网络服务
    • 3. 思考问题
      • 1 ,前期无盈利,如何支撑?
      • 2 ,爆炸性增长,如何解决?
      • 3 ,业务形态纷繁复杂,如何应对?
    • 4. 前期无盈利?
      • 成本
      • 成本
      • 成本
    • 5. 分布式数据库
      • 优点:
      • 分散负载;
      • 局部应用的响应速度快 ;
      • 体系灵活
      • 可靠性高、可用性好 ;
      • 扩展性好;
      • 致命缺点:
      • 弱关系(避免 join ) ;
      • 避免跨库事务;
      • SNS 以用户为中心,存储的是用户属性及行为数据,一个带有用户 ID 的原子性操作就能满足大部分需求,所以这些缺点对它来说显得并不突出。
      爆炸性增长?
    • 6. 爆炸性增长
      • 垂直切分 (规则简单,实施方便)
      • 垂直切分
      • 水平切分 (相对复杂)
      如何分布式 —— 数据切分
    • 7. 爆炸性增长
      • 一、按范围切分
      • UID 根据取值: 1 ~ 1000 的对应 DB1 , 1001 ~ 2000 的对应 DB2 ,以此类推;
      • 优点:迁移方便
      • 缺点:数据分布不均
      • 二、 hash 取模切分
      • UID mod 4 余数为 0 对应 DB 1 , 1 对应 DB2 , 2 对应 DB3 , 3 对应 DB4
      • 优点:数据分布均匀
      • 缺点:数据迁移的时候麻烦,需重新哈希
      • 三、 建立配置表
      • 表中保存 UID 到 DB 的映射关系,每次访问数据库的时候都要先查询一次这个表,以得到具体的 DB 信息,然后才能进行我们需要的查询操作。
      • 优点:灵活性强,一对一关系
      • 缺点:每次查询之前都要多一次查询,性能大打折扣
      常用切分 (水平切分) 方法
    • 8. 爆炸性增长 先垂直 , 再水平 先哈希 , 再范围 切分案例一、 (利用中间件 / 程序逻辑拆分)
    • 9. 爆炸性增长
      • 切分案例二、
      • (硬路由,避免中间逻辑)
    • 10. 爆炸性增长 拆分流程:
    • 11. 爆炸性增长 原始状态 二次拆分 (配合中间件 / 程序逻辑)
    • 12. 爆炸性增长 二次拆分 (配合中间件 / 程序逻辑) 创建复制
    • 13. 爆炸性增长 二次拆分 (配合中间件 / 程序逻辑) 更改路由
    • 14. 爆炸性增长 二次拆分 (配合中间件 / 程序逻辑) 停止复制
    • 15. 爆炸性增长 二次拆分 (配合中间件 / 程序逻辑) 删除冗余
    • 16. 复杂业务形态?
      • 分类、归纳方法
      • 举例:
      • 读特征非常明显的业务,比如相册、博客;
      • 时效性很强的业务,比如动态、推他;
      • 需求变动频繁的业务;
      • 。。。
      •  
    • 17. 复杂业务形态 读特征明显的业务?答:读写分离
    • 18. 复杂业务形态 读写分离
    • 19. 复杂业务形态
      • 时效性强的业务?
      • 以时间为 partition ,删除整个过期分区
      • 好处:
      • 删除效率高;
      • 无行锁,对前端业务无影响;
      • 控制数据量,平衡性能;
    • 20. 复杂业务形态 需求变动频繁的业务? 数据量小,统计性强,扩展性差 无限扩展,兼顾统计,数据量庞大 扩展性较好,记录数小,结果需要程序解析,数据统计不便
    • 21. DBA 最不容忽视事情 -- SQL 审核
      • select ID, SDID, APP_ID, PHOTO_ID, ALBUM_ID, IMAGE_NAME
      • from SD_PHOTO.IMAGE
      • where SDID=#sdid:BIGINT# AND DEL_FLAG = 0
      • <dynamic>
      • < isNull prepend=&quot;AND&quot; property=&quot;requestRelation&quot; >
      • PRIVILEGE <![CDATA[&]]> 4 = 4
      • </ isNull >
      • < isNotNull prepend=&quot;AND&quot; property=&quot;requestRelation&quot; >
      • PRIVILEGE <![CDATA[&]]> #requestRelation:BIGINT# = #requestRelation:BIGINT#
      • </isNotNull >
      • < isNotNull prepend=&quot;AND&quot; property=&quot;photoId&quot;>
      • PHOTO_ID = #photoId:BIGINT#
      • < /isNotNull >
      • < isNotNull property=&quot;order&quot;>
      • ORDER BY $order$
      • < isNotNull />
      • < isNotNull property=&quot;startIndex&quot;>
      • LIMIT #startIndex:INTEGER#,#itemsPerPage:INTEGER#
      • < /isNotNull >
      • </dynamic>
    • 22. SNS 网站架构
    • 23. 欢迎交流

    ×