Apache ShardingSphere 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Apache ShardingSphere 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议: Apache-2.0
开发语言: Java 查看源码 »
操作系统: 跨平台
开发厂商: Apache
收录时间: 2016-01-27
提 交 者: ZenPHP

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

Apache ShardingSphere 定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。

Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。 目前,数据分片、读写分离、多数据副本、数据加密、影子库压测等功能,以及对 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。 开发者能够像使用积木一样定制属于自己的独特系统。Apache ShardingSphere 目前已提供数十个 SPI 作为系统的扩展点,而且仍在不断增加中。

ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目。 欢迎通过邮件列表参与讨论。

ShardingSphere-JDBC

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

  • 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC。
  • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。
  • 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。

ShardingSphere-JDBC Architecture

ShardingSphere-Proxy

定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前提供 MySQL 和 PostgreSQL 版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat 等)操作数据,对 DBA 更加友好。

  • 向应用程序完全透明,可直接当做 MySQL/PostgreSQL 服务端使用。
  • 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端。

ShardingSphere-Proxy Architecture

ShardingSphere-Sidecar(TODO)

定位为 Kubernetes 的云原生数据库代理,以 Sidecar 的形式代理所有对数据库的访问。 通过无中心、零侵入的方案提供与数据库交互的的啮合层,即 Database Mesh,又可称数据库网格。

Database Mesh 的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互进行有效地梳理。 使用 Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。

ShardingSphere-Sidecar Architecture

  ShardingSphere-JDBC ShardingSphere-Proxy ShardingSphere-Sidecar
数据库 任意 MySQL/PostgreSQL MySQL/PostgreSQL
连接消耗数
异构语言 仅 Java 任意 任意
性能 损耗低 损耗略高 损耗低
无中心化
静态入口

混合架构

ShardingSphere-JDBC 采用无中心化架构,适用于 Java 开发的高性能的轻量级 OLTP 应用;ShardingSphere-Proxy 提供静态入口以及异构语言的支持,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。

Apache ShardingSphere 是多接入端共同组成的生态圈。 通过混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由地调整适合与当前业务的最佳系统架构。

ShardingSphere Hybrid Architecture

功能列表

数据分片

  • 分库 & 分表
  • 读写分离
  • 分片策略定制化
  • 无中心化分布式主键

分布式事务

  • 标准化事务接口
  • XA 强一致事务
  • 柔性事务

数据库治理

  • 分布式治理
  • 弹性伸缩
  • 可观测性(分布式跟踪、指标度量)
  • 数据加解密
  • 影子表压测
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

Apache ShardingSphere 的相关博客

ShardingSphere

ShardingSphere在中小企业需要分库分表的时候用的会比较多,因为它维护成本低,不需要额外增派人手;而且目前社区也还一直在开...

ShardingSphere学习:02-ShardingSphere介绍

ShardingSphere的发展历程:从Sharding-JDBC到Apache顶级项目 说到 ShardingSphere 的起源,我们不得不提 Sharding-JDBC 框架...

ShardingSphere 分页

分页性能 性能瓶颈 查询偏移量过大的分页会导致数据库获取数据性能低下,以MySQL为例: SELECT * FROM t_order ORDER BY id ...

ShardingSphere 内核

ShardingSphere的3个产品的数据分片主要流程是完全一致的。 核心由SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 ...

1、ShardingSphere基本概念

1 基本概念 什么是Sharding Sphere 1) 一套开源的分布式数据库中间件解决方案 2) 有三个产品: ShardingSphere-JDBC、Shardin...

shardingsphere数据库中间件

shardingsphere组成: sharding-jdbc、sharding-proxy、sharding-sidecar(计划中) 核心功能以及整体框架图 sharding-jdbc特点...

ShardingSphere学习:04-ShardingSphere中的配置体系是如何设计的?

什么是行表达式? 行表达式是 ShardingSphere 中用于实现简化和统一配置信息的一种工具,在日常开发过程中应用得非常广泛。 ...

分库分表-ShardingSphere

前言 一般mysql单表存储数据量小于500万左右或者容量小于2GB的时候,它的读写性能是最好的。但是当业务发展到一定程度,数据增...

shardingsphere 官方文档

https://shardingsphere.apache.org/document/current/cn/overview/...

评论 (59)

加载中
ShardingSphere代理模式,我看了下 只有对表的字段进行加密的 对数据库 用户名、密码 没有加密的功能??
07/09 16:43
回复
举报
order一个库 表order_1 order_2 一个库 order_item 表 order_item_1 order_item2,连接查询 一直说mybatis 系统异常 然后是数据下表越界,这样的sql 不允许吗? 我分表对这两个表新增都是ok的,但是就是连接查询有问题,分别查询也没问题,求大佬解决一下,这样的查询是不允许,还是暂时不支持呢
2019/12/23 14:35
回复
举报
hint分片怎么注入分片字段
2019/06/20 15:51
回复
举报
张亮_Apache软件作者
hint分片无需注入分片字段,是通过SQL之外的元素直接分片的策略。 由于平时只关注邮件列表,如有问题,欢迎订阅: https://shardingsphere.apache.org/community/cn/contribute/subscribe/
2019/11/20 22:00
回复
举报
为什么动态分表要去掉?
2019/06/04 10:07
回复
举报
张亮_Apache软件作者
因为可以使用orchestration模块随时动态修改分片策略,并且可以动态生效(无需重启) 由于平时只关注邮件列表,如有问题,欢迎订阅: https://shardingsphere.apache.org/community/cn/contribute/subscribe/
2019/11/20 22:01
回复
举报

引用来自“叫我小宝就好”的评论

3.0.0版本Hint分片不生效,HintManager hintManager = HintManager.getInstance() 下面的sql不会执行HintShardingAlgorithm分片,切换到3.1.0就可以了,是bug吗,还是配置不一样
跟着源码,找到原因了,3.0.0版本Hint分片需要同时配置databaseStrategy和tableStrategy为hint,才能走到hint分片,而3.1.0单独配置某个虽然也可以,但是代码不是走的routeByHint(没有深入去研究了)
2019/02/27 10:07
回复
举报
您好,我在使用sharding-sphere,3.1.0版本,分页查询只返回第一页的数据。
2019/02/26 14:31
回复
举报
张亮_Apache软件作者
问题的信息比较少,需要提供SQL、分片策略配置以及sql.show的log日志。 由于平时只关注邮件列表,如有问题,欢迎订阅: https://shardingsphere.apache.org/community/cn/contribute/subscribe/
2019/11/20 22:03
回复
举报
3.0.0版本Hint分片不生效,HintManager hintManager = HintManager.getInstance() 下面的sql不会执行HintShardingAlgorithm分片,切换到3.1.0就可以了,是bug吗,还是配置不一样
2019/02/26 11:59
回复
举报

引用来自“叫我小宝就好”的评论

sharding-sphere 3.1.0 执行时由于我配置有误导致内部报错,但是抛出异常时,在ShardingPreparedStatement类,execute()方法,执行finally代码块的 refreshTableMetaData(connection.getShardingContext(), routeResult.getSqlStatement()) 由于routeResult(这应该是内部报错导致的)为空报了NullPointerException异常,导致内部报错无法定位,我是切换到3.0.0才定位到自己的错误,在这里提一下,不知道是不是bug,希望可以修复
只要是内部错误,都报NullPointerException,这个要修复一下,不然自己都不知道错在哪里
2019/02/25 15:51
回复
举报
张亮_Apache软件作者
其实并不一定是错误都会抛出NPE,而是预期之外的错误才会NPE,预期内的错误还是会抛相关异常。因此预期外的错误都算bug,可以具体问题具体分析,看看哪些预期外异常可一一修复。 由于平时只关注邮件列表,如有问题,欢迎订阅: https://shardingsphere.apache.org/community/cn/contribute/subscribe/
2019/11/20 22:04
回复
举报
sharding-sphere 3.1.0 执行时由于我配置有误导致内部报错,但是抛出异常时,在ShardingPreparedStatement类,execute()方法,执行finally代码块的 refreshTableMetaData(connection.getShardingContext(), routeResult.getSqlStatement()) 由于routeResult(这应该是内部报错导致的)为空报了NullPointerException异常,导致内部报错无法定位,我是切换到3.0.0才定位到自己的错误,在这里提一下,不知道是不是bug,希望可以修复
2019/02/25 15:46
回复
举报
sharding-sphere 3.0.0.M4的jpa demo不配置服务编排的情况下也会加载Orchestration Configuration,导致报错 java.lang.IllegalStateException: Missing the type of datasource configuration in orchestration configuration,你们没有这个情况吗?
2018/10/24 00:06
回复
举报
张亮_Apache软件作者
如果使用sharding-jdbc,是否使用治理模块完全取决于用户是否在pom中引用了相关模块的坐标;如果使用sharding-porxy,是自带治理功能的(只要不在yaml中配置就不会开启),这个问题应该是治理的配置中缺失了关键信息(数据源配置)。由于平时只关注邮件列表,如有问题,欢迎订阅: https://shardingsphere.apache.org/community/cn/contribute/subscribe/
2019/11/20 22:10
回复
举报
更多评论
59 评论
803 收藏
分享
返回顶部
顶部