分库分表ShardingSphere<一> _ 概念

目录

一、ShardingSphere介绍

1. ShardingSphere-JDBC

2. ShardingSphere-Proxy

3. ShardingSphere-Sidecar

4. 三种区别

5. 混合架构JDBC + Proxy

​二、数据库拆分

1. 垂直分库 

2. 水平分库 

3. 垂直分表

4. 水平分表 

5. 总结

三、ShardingSphere分库分表相关概念

1. 逻辑表

2. 真实表

3. 数据节点

4. 绑定表

5. 全局表/广播表

6. 分片键

7. 分库分表策略

四、参考资料


一、ShardingSphere介绍

        ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,包括3个独立的产品:JDBC、Proxy & Sidecar。它们都提供了数据横向扩展、分布式事务和分布式治理的功能。

1. ShardingSphere-JDBC

        轻量级java框架,以jar包的形式提供。应用层直接连接数据库(直接实现分库分表),无需额外的部署和依赖,如下图所示。其直接封装JDBC API,且支持JPA、Hibernate、Mybatis、Spring JDBC Template等DAO层框架,支持第三方连接池DBCP、Druid、HikariCP。

        ShardingSphere-JDBC支持分库分表、读写分离、跨库Join/分页/排序、XA事务、柔性事务(最终一致性)。

优点:JDBC层灵活性好,侵入性少

缺点:耦合了分库分表逻辑,连接多导致连接不够用

2. ShardingSphere-Proxy

        自身为一个透明的数据库代理(中间件),提供一个数据库服务器(实现分库分表),如下图所示。

优点:解耦分库分表逻辑,减少数据库连接数,支持多种编程语言

缺点:需要维护,考虑中间件的HA/负载均衡

3. ShardingSphere-Sidecar

        自身为Kubernetes环境的云原生数据库代理,以sidecar的形式负责所有的数据库访问。它提供了一个与数据库交互的网格层,如下图所示。

4. 三种区别

ShardingSphere-JDBCShardingSphere-ProxyShardingSphere-Sidecar
数据库任何MySQL/PostgreSQLMySQL/PostgreSQL
连接消耗数
支持语言仅 Java任何任何
性能低损耗相对较高的损耗低损耗
无中心化
静态入口

5. 混合架构JDBC + Proxy


二、数据库拆分

1. 垂直分库 

垂直分库:按照业务将表进行分类,分布到不同的数据库(不影响表结构),每个库可以放在不同的服务器上,它的核心理念是专库专用。如下图所示。

优点:解耦业务耦合,业务清晰;提升IO、连接数,降低单机硬件资源的瓶颈

缺点:无法解决单表数据量过大问题

2. 水平分库 

水平分库:同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上。 如下图所示。需要事务时,采用分布式事务。提高了并发量,却牺牲数据的强一致。

优点:解决数据量大;并发量

缺点:JOIN/分页/排序、分布式事务性能消耗

3. 垂直分表

垂直分表:将一个表按照字段分成多表,每个表存储其中一部分字段。 如下图所示。

优点:热点字段与冷字段分开(避免IO竞争)

缺点:无法解决单表数据量过大问题

4. 水平分表 

水平分表:同一个数据库内,把同一个表的数据按一定规则拆到多个表。如下图所示。

优点:解决数据量大;并发量

缺点:JOIN/分页/排序消耗

5. 总结

类型垂直分库水平分库垂直分表水平分表
概念业务划分库一个表的数据(按数据行)分到多个不同库宽表字段按访问频次、是否是大字段的原则拆分为多个表一个表的数据(按数据行)分到同一个库
优点业务解耦、提升IO、连接数解决数据量大、并发量大热点字段、减少IO竞争解决数据量大、并发量大
缺点无法解决单表数据量大JOIN/分页/排序性能低无法解决单表数据量大JOIN/分页/排序性能低
总结

垂直拆分:无法解决单表数据量大的问题;

水平拆分:解决单表数据量大,但是出现跨库/跨表的JOIN/分页/排序等问题

三、ShardingSphere分库分表相关概念

1. 逻辑表

水平拆分的表具有相同逻辑和数据结构表的总称。例:订单数据根据主键取模拆分为10 张表, 分别是t_order_0到t_order_9,他们的逻辑表名为t_order。

2. 真实表

数据库中真实存在的物理表。即上示例中的t_order_0到t_order_9。

3. 数据节点

数据分片的最小单元。由数据源名称和表名称组成,如:ds_0.t_order_0。

4. 绑定表

分片规则一致的主表和子表。例如:t_order表和t_order_item表,均按照order_id分片,则此两张表互为绑定表关系。 绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。

5. 全局表/广播表

所有分片中都有这个表。对全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性。查询操作时,只从一个数据节点获取,可以跟任何一个表进行JOIN操作。

6. 分片键

用于分片的数据库字段,是将表水平拆分的关键字段。SQL中如果无分片字段,将执行全路由,性能较差。

7. 分库分表策略

策略包括分片键和分片算法组成,其策略一般有取模、分区、路由表等。数据按照什么算法和规则进行存储,会直接影响数据的写入和读取。

四、参考资料

彻底搞清分库分表(垂直分库,垂直分表,水平分库,水平分表)_传智燕青-CSDN博客_分库分表

Sharding-JDBC 系列 01 - 分库分表 - 小一辈无产阶级码农

MyCAT全局表描述及示例 - 云+社区 - 腾讯云

Sharding :: ShardingSphere

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值