firemail

标题: 《亿级数据量系统的性能保证之分库分表》 [打印本页]

作者: hshy    时间: 2019-1-19 22:05
标题: 《亿级数据量系统的性能保证之分库分表》
本帖最后由 hshy 于 2019-1-19 22:18 编辑

《亿级数据量系统的性能保证之分库分表》
主要内容:
1,为何需要分库分表的引入
2,详解分库分表
3,学习mycat实现分库分表


业务拆分
单表数据量太大

OOD 面向对象设计
1.分模块
2.面向接口编程


分业务 分库 分表

阿里 建议 行数超过500万或大小超过2G 进行分表


分库分表详解
对数据的库表进行拆分,

分库分表  跨库查询
联表查询变成程序内写逻辑解决
drds
拆分规则
1.垂直拆分
  分布式事务 联表关联
2.水平拆分
userId%100=0
userId%100=1
..
userId%100=99
1亿分成100个100万
离散性的
连续性的

hash
时间
地区

分区还是同一个表
结果集跨多个表怎么办?

Mycat 实现分库分表
mycat.io


逻辑库
逻辑表
    分片表 用户表        
分片规则 uid%2
        全局表 数据字典 数据不常变,数据量不大,可能与其它表都有关联关系
全量copy 每个分库中都有一份
    ER表 1:n n:m n:1 关联表 用户和用户地址表,这个用户在哪个库,对应的用户地址也在那个库
即用户地址表根据用户表动态的落到同一个库上
    非分片表  只有某个业务才有的表,只放到对应的库上

节点
数据库实例,图中有两个节点

节点主机


比如现在是 2取摸 偶数 奇数在2个库 我我突然变成了10个库 取莫 也变成了10 可是 以前的数据还在那两个库 怎么搞?需要自己清洗一遍么?
节点的扩缩容  dataMigrate.sh
规则改变要清洗


原理
explain select * from user where userId=1;
id最好加上表名 如 userId,这样在配置文件中方便识别
全局id怎么生成?
只支持sql92,还与mysql有不同,有些函数mycat是不支持的
全局表 两个都查,谁先返回用谁的




Internet Communications Engine,或Ice,是ZeroC开发的一个面向对象的中间件平台。它提供了面向对象的远程过程调用、网格计算和发布/订阅功能,并有基于GPL的双许可协议和一个私有许可协议。它支持Linux、Solaris、Windows和Mac OS X等最主要的操作系统,和C++、Java、.NET语言(如C#或Visual Basic)、Objective-C、Python、PHP和Ruby等语言。

分库分表 还有其它的中间件选择吗?一般选择原则是什么?

sharding-JDBC -> shardingsphere -> ..









欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3