什么是分库分表:
为什么需要分库分表:
业务越来越大,单表数据超出了数据库支持的容量。
持久化磁盘IO,传统的数据库性能瓶颈,业务需要必须这么做
改变程序。数据库下刀子切分优化
1、换数据库(缓存)
2、Sql、索引、字段优化
3、读写分离(业务有关优化)
4、分库分表(业务)
5、分区
读写分离:
什么是读写分离:我们一般应用程序访问数据库无非是读取数据、修改数据、插入数据、删除数据 CRUD。
分开》分库 前提条件:master》salve 主从(同步)架构
读写 互联网应用读多写少
分库分表常见方式:
垂直
通俗的说法叫做“大表拆小表”,拆分是基于关系型数据库中的“列”(字段)进行的。
字段拆分
特点:1、每个库(表)的结构都不一样
2、每个库(表)的数据都(至少有一列)一样
3、每个库(表)的并集是全量数据
订单里面一般订单id userid(互联网网站
用户为中心 userid)
查看我的订单
Select from orders where orderid=333
and userid=123
查看我的订单列表
Select from orders where
userid=123 1库
查看的商品??购物车(用户)card
水平
以某个字段按照一定的规律(取模)讲一个表的数据分到多个库中
内容拆分
分库分表之后带来的问题:
读写分离:主从同步、数据一致性的问题、网络延迟的问题
分库分表:
增加了我们维护成本
分布式事务(跨库事务)
跨库join
分布式全局唯一ID(snowflake)
分库分表算法:
取模(Hash)通过userid用户表字段值进行123%3=xxxx 数据分散均衡,避免数据热点
一致性hash(扩容需要O(N))
范围区分(range)按月 按省 A(0-6)B(7-8)C(9 10)热点数据 11那天
预定义(list)(100w 1亿数据 10库)风投
常见的中间件:
开源中间件:sharding-sphere
atlas 当当网 张亮、高洪涛 sharding-jdbc 2018
分两种类型:
Proxy代理:mycat(重)、mysql-proxy atlas、sharding-proxy(sharding-sphere
)
Jdbc直连:TDDL(淘宝 半开源) 、sharding-jdbc(sharding-sphere
)缺点 讲清楚
不分上下