sharding-sphere-01 ss介绍中间件的比较

1.什么是分库分表

一个数据库一张表分成N小表(不把鸡蛋放在一个篮子里)

2.为什么需要分库分表

业务越来越大,单表数据超出了数据库支持的容量。
持久化磁盘IO,传统的数据库性能瓶颈,产品经理业务必须这么做改变程序。数据库下刀子切分优化。

其他解决方案

  • 换数据库(缓存)
  • Sql、索引、字段优化
  • 读写分离(业务有关优化)
  • 分库分表(业务)
  • 分区

2.1 读写分离

什么是读写分离:我们一般应用程序访问数据库无非是读取数据、修改数据、插入数据、删除数据 CRUD。

分开–>分库
前提条件:master–>salve 主从(同步)架构 读写 互联网读多写少
Insert orders 1 select orders N

3.分库分表常见方式

3.1 垂直(字段拆分)

通俗的说法叫做“大表拆小表”,拆分是基于关系型数据库中的“列”(字段)进行的。

sharding-sphere-01 ss介绍中间件的比较

3.1.1 特点

  • 每个库(表)的结构都不一样
  • 每个库(表)的数据都(至少有一列)一样
  • 每个库(表)的并—全量数据

3.1.2 优点

  • 拆分后业务清晰(专库专用按业务拆分)
  • 实现动静分离、冷热数据分离设计体观。冷库:发布说说信息 热:说说点赞评论数据
  • 数据维护简单、按业务不同业务放在不同机器上

3.1.3 缺点

  • 如果单表的数据量大、写读压力大
  • 受某种业务来决定、或者被限制。也就是说一个业务往往会影响到数据库的瓶頭(xing能问题)
  • 部分业务无法关联join、只能通java程序接口去调用,提供了开发复杂度。(商品、订单信息、 会员信息)

3.2 水平(内容拆分)

以某个字段按照一定的规律(取模)讲一个表的数据分到多个库中

sharding-sphere-01 ss介绍中间件的比较

3.2.1 特点

  • 每个库(表)的结构都一样
  • 每个库(表)的数据都不一样
  • 每个库(表)的并集是全量数据

3.2.2 优点

  • 单库(表)的数据保持在一定的量(减少),有助于性能提高
  • 提高了系统的稳定性和负载能力。
  • 切分的表的结构相同、程序改造较少

3.2.3 缺点

  • 数据的扩容很有难度维护量大
  • 拆分规则很难抽象出来
  • 分片事务的一致性的问题部分业务无法关联join、只能通java程序接口去调用

4.分库分表之后带来的问题

  • 读写分离:
    主从同步、数据一致性的问题、网络延迟的问题
  • 分库分表:
    • 增加了我们维护成本
    • 分布式事务(跨库事务)
    • 跨库join
    • 分布式全局唯一ID(snowflake雪花算法)

5.分库分表算法

  • 取模(Hash):通过userid用户表字段值进行123%3=xxxx 数据分散均衡,避免数据热点
    缺点是扩容复杂,于是推出了一致性hash(解决扩容需要O(N))
  • 范围区分(range):按月 按省 A(0-6)B(7-8)C(9 10)
    问题:热点数据11那天
  • 预定义(list):(100w 1亿数据 10库)风投问题

6.常见的中间件

开源中间件:

  • sharding-sphere
  • atlas
  • sharding-jdbc

分两种类型:
Proxy代理:mycat(重)、mysql-proxy atlas、sharding-proxy(sharding-sphere )

sharding-sphere-01 ss介绍中间件的比较
Jdbc直连:TDDL(淘宝 半开源) 、sharding-jdbc(sharding-sphere )

sharding-sphere-01 ss介绍中间件的比较