1. 介绍原理
1.1 数据库介绍
Oracle:
Oracle很强大,一台还是满足不了现有的一个业务、多台Oracle费用,国美一年给甲骨文500多万。
MySQL:免费、广泛(oracle收购)
1.2 集群
集群:并发问题?服务高可用、分组
mysql-proxy官方: 读写分离。解决了高并发,没解决高可用,存在单点问题
1.3 分库分表:
1.3.1 类型:水平、垂直
1.3.2 垂直:
将一个属性比较多、行的数据比较大的表、把这个表的不同属性拆分成不同表、方式来降低单库(表)大小的目的来提高性能
总结特点:
1)每个库(表)的结构都不一样
2)每个库(表)的数据都(至少有一列)一样
3)每个库(表)的并集是全量数据
1.3.3 水平:
以某个字段按照一定的规律(取模)将一个表的数据分割到多个库(表)
总结特点:
1)每个库(表)的结构都一样
2)每个库(表)的数据都不一样
3)每个库(表)的并集是全量数据
1.3.4 分库策略
Hash取模,通过表的一列字段进行hash,取code % 1024
Range范围区分:2016年 A库,2017 B库
List预定义:分布式订单生成策略,100库全局ID生成
1.3.5 分库分表之后的问题
多数据源管理(proxy)
跨库事务处理(避免XA 2pc 伸缩性差)TCC柔弱性事务
查询数据的结果集合并(改写)
分布式全局唯一ID(解决问题)
遵循ACID前提下提高我们的并行能力
2. 实战分库
水平拆分:
路由算法、一致性Hash
hash(userid) = hashcode % 1024 = 777
扩容问题:
2.1 案例
1)有6个库
2)数据存到6个库中
3)可以支持多台mysql数据源
4)监控mysql状态、实现master/slave自动切换
5)水平拆分、分表散列