apache sharding sphere

Apache Sharding Sphere 是一个开源的分布式数据库中间件,包含 sharding-jdbc 和 sharding-proxy 两款产品,提供数据分片、分布式事务和数据库治理功能。sharding-jDBC 是轻量级 Java 框架,用于数据库分片和读写分离,而 sharding-proxy 则是透明化的数据库代理端,支持异构语言。文章介绍了分库分表的基本概念,包括垂直和水平切分,以及如何通过 sharding-jDBC 进行水平分表操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

apache sharding sphere

一、基本概念

1. 什么是sharding sphere?

(1)基本介绍
  • 官网.
  • 产生背景:传统的关系型数据库当数据量急剧增加时,性能会面临很多的瓶颈,sharding sphere 就是为了应对这种情况而产生的数据库中间件
  • 概念:apache sharding sphere 是一套***开源的分布式数据库中间件解决方案***组成的生态圈,他由*** sharding - jdbc ,sharding - proxy *** 和 sharding - sidecar (规划中)这三款相互独立,却又能够混合部署配合使用的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能。
  • shardingSphere 定位为关系型数据库中间件,旨在充分合理的在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它通过关注不变,进而抓住事务本质。关系型数据库当今依然占有巨大的市场,是各个公司核心业务的基石,它更关注在原有数据上的增量,而非颠覆。
  • apache 是一个孵化器,里面的项目都在不断的完善中,但是在2020.4.16,shardingSphere 称为了apache的顶级项目,即从apache 毕业了。
(2)sharding - jdbc
  • 定位为轻量级的 java 框架,在 java 的 jdbc 层提供的额外服务。它使用客户端直连数据库,以jar包的形式提供服务,无需额外部署和依赖,可以理解为增强版的jdbc服务,完全兼容jdbc和各种orm框架。
    • 适用于任何基于JDBC的ORM框架,如JPA,Hibernate,Mybatis等。
    • 支持任何第三方的数据库连接池,如:DBCP,C3PO等
    • 支持任意实现JDBC规范的数据库
(3)sharding - proxy
  • 定位为透明化的数据库代理端,提供了封装了数据库二进制协议的服务端版本,用于完全对异构语言的支持。目前先提供了Mysql版本

2. 分库分表的基本概念。

(1)背景
  • 数据库中数据量不可控制,随着时间的增加,数据库中的数据会越来越多,会影响数据库增删查改的性能,可能解决方法如下:
    • 硬件上:增加数据库服务器的内存、存储容量等,增加数据库服务器的性能。但这样的方式治标不治本,且成本很高。
    • 分库分表处理:为了解决由于数据量过大而造成的数据库性能降低,将单一数据库和单一的达标拆分为多个数据库和多个小表,使得每次curd的数据变少,提高系统的性能。
(2)分库分表的的两种方式
  • 垂直切分提高效率,但并没有解决数据量大的问题,水平切分解决数据量大的问题。

  • 垂直切分

    • 垂直分表

      • 概念:操作数据库中的某张表,把这张表中的一部分字段存到一张表中,再把这张表的另一部分字段存储到另外一张表中,一般是根据查询频率或者是相关需求进行分表。例如课程信息表,将课程封面、课程价格和课程名称分为一张表,课程详细信息分到另外一张表,如果原来的大表有100条记录,那个拆分后的两个表依然各有100条数据,这叫垂直分表。

      • 好处:

        • 在只需要课程价格名称等简要信息时可以只查询分出来的第一个表,而不关注课程详细信息。
        • 修改课程详细信息时不需要将课程的简要信息也锁定,依旧可以查询简要信息,提高数据库的效率
    • 垂直分库

      • 垂直分表后,一张表分成了多张表,但都在同一个数据库中,这样其实会使数据库的查询压力增大。(与查询效率增大不影响,效率是增加的,压力增大,毕竟得查多张表)
      • 概念:把单一数据库按照业务进行划分,专库专表。部署在不同的服务器上,根据业务的不同去访问不同的服务器数据库。例如将课程信息与订单信息分开到两个数据库中,部署在两台不同的服务器上
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fftRlDEa-1636385212066)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20211030133755417.png)]

  • 水平切分

    垂直分库和垂直分表后,单一表中数据的量并没有发生变化,数据量依然很大,这个问题没有得到解决。

    • 水平分表

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rOJpyMN8-1636385212070)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20211030135748739.png)]
      • 如果一个数据库中某个表中数据量很大,对查询性能有影响,还可以将其分成几个表结构完全一样的表,添加数据时进行判断,满足某一个条件则添加到特定的表中,这样便可以减小每个表中的数据量,提高查询效率。
    • 水平分库

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-68PctLW2-1636385212075)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20211030134557109.png)]

      • 将原本一个数据库分成两个表结构完全一样的数据库,当需要添加数据时,根据设定的条件判断添加到哪个数据库中,例如根据信息的主键id,如果id是奇数,就将他添加到分开的A数据库,如果id是偶数,就将他添加到B数据库,当然这个条件可以根据业务需求进行调整。

(3)分库分表小结以及问题
  • 小结
    • 垂直改变结构,水平改变数据量
    • 垂直分库:将一张表的不同字段拆分成两个表,无法解决数据量大的问题。
    • 垂直分表:专库专表
  • 应用
    • 数据库设计时就要考虑到哪些库需要垂直拆分,哪些表需要拆分。即设计阶段就要考虑垂直分库和垂直分表
    • 随着数据量的增加,不要马上考虑做水平的切分,首先考虑缓存处理,读写分离,使用索引等方式,如果这些方式不能根本解决问题了,再考虑做水平分库和水平分表。
  • 分库分表的优点
    • 可以解决单库单表的问题,解决读写效率低的问题。
  • 分库分表带来的问题
    • 跨节点连接查询的问题
    • 多数据源的管理问题

二、Sharding sphere 的第一个产品:sharding - JDBC 的分库分表操作

1. 简介

  • 轻量级的java 框架,增强版的jdbc驱动
  • 具体作用 :
    • 不是用来做分库分表
    • 主要作用是数据分片和读写分离
    • 只需要引入相关的jar包,然后对数据进行操作,sharding-jdbc会帮我们操作不同的数据库和不同的表
    • 其实就是简化我们分库分表之后的对数据的相关操作

2. sharding - jdbc 实现水平分表

(1)环境搭建

三、Sharding sphere 的另外一个产品 :sharding - proxy 对关系型数据库的分库分表操作

待续。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值