您的位置:首页 > 业界新闻

【图灵学院02】大型互联网技术之数据库分库分表

2017-10-04 01:55 253 查看
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)水平拆分、分表散列
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: