分库分表

75 阅读2分钟

拆分方式

垂直拆分

更多是从业务角度拆分,主要是降低业务耦合度,如果一行数据字段越多,那么占用数据就越大,那么每一页存储的数据自然越少,那么查询所需 IO 次数就越高因此性能更差。

水平拆分

水平拆分更多是从技术角度进行拆分,拆分后每张表的结构都是一模一样的,简而言之就是通过技术手段进行分片到多张表存储,数据量越少,索引树深度越浅,减少磁盘扫描范围

分库分表

什么适合分库什么时候分表、什么适合读写分离

  1. 读 qps 高,读写分离
  2. 写 qps 高,导致数据库连接不足,分库
  3. 单表数据量大,并发不大,水平分表,减少磁盘扫描范围

ShardingSphere

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈

shardingsphere.apache.org/index_zh.ht…

******Sharding-JDBCSharding-ProxySharding-Sidecar
数据库任意MySQLMySQL
连接消耗数
异构语言仅Java任意任意
性能损耗低损耗略高损耗低
无中心化
静态入口

Sharding-JDBC

  • 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供额外服务
  • 它使用客户端直连数据库,以 jar 包形式提供服务
  • 可以理解为增强版的 JDBC 驱动,完全可以兼容 JDBC 和各种 ORM 框架

ShardingSphere-JDBC 和 ShardingSphere-Proxy 区别

  1. Sharding-JDBC 是一个 jar 包,底层通过重写 JDBC 组件完成 SQL 解析、路由、改写、执行等流程,需要在项目中添加对应功能的配置文件,对应用有一定侵入性
  2. 应用通过 Sharing-JDBC 是直接操作数据库,相当于只有一次网络 IO,而应用连接 Proxy 是一次网络 IO ,Prxoy 再次操作数据库又是一次网络 IO,应用调用链路增加一层,容易形成流量瓶颈,对应用增加了潜在的风险
  3. Sharing-JDBC 易于实现,方便运维
  4. Sharding-Proxy 是一个进程服务,将自己伪装成一个数据库,应用对接后对代码无侵入,对 SQL 的执行逻辑同 Sharding-JDBC 一致