|
本帖最后由 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 -> ..
|
|