跳到主要内容

01、Sharding-Sphere 实战:简单介绍及相关概念

一、ShardingSphere简单介绍

出现背景:当数据库数据巨大时,数据库读写性能将变得很低,为了解决此问题,设计时,可以将数据进行分别存储于不同数据库、不同表中,以降低单表量数量大问题;ShardingSphere它是一套开源的分布式数据库中间件。同于统筹协调分库分表下的数据读写,而让业务开发人员只关注数据层之外的工作,而不用去用业务代码判断操作那个库,那个表。

Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC(重点)、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

ShardingSphere的数据分片以及读写分离的使用方式是我们本系列介绍的重点。

二、分库分表概念(数据分片)

分表方式:

  • 垂直分表

垂直分表即专表专用,实际上关系型数据库设计基本都采用的是该模式。将不同的内容拆分到不同的表中。比如订单信息,会拆分为订单基本信息表、订单客户信息表、订单商品表等。所有表结构都不同。

  • 水平分表

所谓水平分表即将数据量过大的表拆分为多张相同结构的表,每张表中都分摊存储数据,来降低数据库查询压力。比如将订单表拆分为 order_0、order_1、order_2。

分库方式:

  • 垂直分库

与水平分表一样,即专库专用。不同的数据库来存储不同模块的表信息。比如将订单系统拆分为订单库和商品库。订单库存放订单相关的表 比如:订单基本信息表、订单详情表;商品库存放商品表、商家表。

  • 水平分库

水平分库即,所有的数据库中存放相同的表信息。比如我们将不同渠道的下单信息分别存储于不同的渠道数据库中。比如通过微信小程序下单的我们存在在数据库a中,将通过手机app下单的订单信息存放在数据库b中,通过电脑pc端下单的订单信息存放在数据库c中。

  • 公共表

公共表即每张数据库中都存在相同接口,相同数据的表,比如数据字典表、地区表等作为每个库都可能用到的表。

三、读写分离

读写分离即,为了减少对一个数据库的读写压力,然后将读和写的操作分别路由到不同的数据库中。比如对a库做增删改操作,对b库做读操作。但是我们需要自己做好主从库的数据同步。数据同步不是ShardingSphere的工作范畴,我们需要通过其他方式实现吗,比如对mysql的通过binlog文件监控实现的主从同步。

四、ShardingSphere-JDBC介绍

本系列教程主要讲解如何使用ShardingSphere-JDBC 来实现对第二部分中的不同拆分场景下的Sharding的配置使用。数据库的设计、表结构的设计,以及采用哪种拆分方式则是有设计人员前期规划好,数据库表提前创建好。Sharding在业务代码和数据库层之间只用来进行做相应的路由到对应的规则下的数据库,对应规则下的表。