Apache ShardingSphere学习总结(一)

  |   0 评论   |   0 浏览

Apache ShardingSphere

一 基本概念

1 什么是 Sharding Sphere

Apache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生

态圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(规划中)这 3 款相互

独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事

务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

ShardingSphere 定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系

型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它通过关注不变,进

而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未

来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。

2 什么是分库分表

数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,

库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销

也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内

存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。。

分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据

库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数

据表的数据量变小,从而达到提升数据库性能的目的。

2.1 分库分表的方式

数据库的切分指的是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多

个数据库(主机)中,以达到分散单台设备负载的效果,即分库分表。

数据的切分根据其切分规则的类型,可以分为 垂直切分 和水平切分。

(1)垂直切分: 把单一的表拆分成多个表,并分散到不同的数据库(主机)上。

(2)水平切分:根据表中数据的逻辑关系,将表中的数据按照某种条件拆分到多台数据库上。

2.2 垂直切分

一个数据库有多个表构成,每个表对应不同的业务,垂直切分是只按照业务将表进行分类,

将其分布到不同的数据库上,这样就将数据分担到了不同的库上(专库专用)。

垂直切分的优点如下:

(1)拆分后业务清晰,系统之间进行整合或扩展很容易。

(2)按照成本、应用的等级、应用的类型等奖表放到不同的机器上,便于管理,数据维护

简单。

垂直切分的缺点如下:

(1)部分业务表无法关联(Join), 只能通过接口方式解决,提高了系统的复杂度。

(2)受每种业务的不同限制,存在单库性能瓶颈,不易进行数据扩展和提升性能。

(3)事务处理变得复杂。

2.3 水平切分

与垂直切分对比,水平切分不是将表进行分类,而是将其按照某个字段的某种规则分散到

多个库中,在每个表中包含一部分数据,所有表加起来就是全量的数据。

简单来说,我们可以将对数据的水平切分理解为按照数据行进行切分,就是将表中的某些

行切分到一个数据库表中,而将其他行切分到其他数据库表中。

这种切分方式根据单表的数据量的规模来切分,保证单表的容量不会太大,从而保证了单

表的查询等处理能力

例如将用户的信息表拆分成 User1、User2 等,表结构是完全一样的。我们通常根据某些特

定的规则来划分表,比如根据用户的 ID 来取模划分。

水平切分的优点:

(1)单库单表的数据保持在一定的量级,有助于性能的提高。

(2)切分的表的结构相同,应用层改造较少,只需要增加路由规则即可。

(3)提高了系统的稳定性和负载能力。

水平切分的缺点如下:

(1)切分后,数据是分散的,很难利用数据库的 Join 操作,跨库 Join 性能较差。

(2)分片事务的一致性难以解决,数据扩容的难度和维护量极大。

2.4 分库分表带来的问题

综上所述,垂直切分和水平切分的共同点如下:

• 存在跨节点 Join 的问题。

• 存在跨节点合并排序、分页的问题。

• 存在多数据源管理的问题。


标题:Apache ShardingSphere学习总结(一)
作者:gao1feng
地址:http://gao1feng.top/articles/2020/07/12/1594563161737.html