没有合适的资源?快使用搜索试试~ 我知道了~
深度解析ShardingJDBC:Java开发者的分库分表利器
需积分: 5 2 下载量 32 浏览量
2023-12-31
19:22:23
上传
评论
收藏 1.53MB PDF 举报
温馨提示
试读
17页
ShardingJDBC是一个轻量级的Java框架,专为处理分库分表场景而设计。起源于当当网,后经由多家大型互联网企业的验证与发展,它已成为Apache软件基金会的顶级项目。ShardingJDBC通过数据分片和读写分离,使Java应用能透明地访问分库分表的多个数据源。它在JDBC层提供服务,无需额外部署,兼容各种ORM框架。与ShardingProxy不同,ShardingJDBC在客户端执行分库分表逻辑,提供灵活的配置但需要业务方自定义逻辑。 ShardingJDBC实战表明,其核心在于配置分片算法,常见的包括inline、standard、complex和hint分片策略。在具体实施中,它支持定义逻辑表、真实表、数据节点、绑定表和广播表等概念,实现复杂的分片和分布策略。通过配置application.properties文件,开发者可以指定数据源、表的分布、分片策略及其他参数。
资源推荐
资源详情
资源评论
一、ShardingSphere
二、ShardingJDBC实战
1、核心概念:
2、测试项目介绍
3、快速实战
4、ShardingJDBC的分片算法
5、ShardingSphere的SQL使用限制
6、分库分表带来的问题
7、分库分表方案设计实战
一、ShardingSphere
ShardingSphere是一款起源于当当网内部的应用框架。2015年在当当网内部诞
生,最初就叫ShardingJDBC。2016年的时候,由其中一个主要的开发人员张亮,
带入到京东数科,组件团队继续开发。在国内历经了当当网、电信翼支付、京东数
科等多家大型互联网企业的考验,在2017年开始开源。并逐渐由原本只关注于关系
型数据库增强工具的ShardingJDBC升级成为一整套以数据分片为基础的数据生态
圈,更名为ShardingSphere。到2020年4月,已经成为了Apache软件基金会的顶
级项目。
ShardingSphere包含三个重要的产品,ShardingJDBC、ShardingProxy和
ShardingSidecar。其中sidecar是针对service mesh定位的一个分库分表插件,目
前在规划中。而我们今天学习的重点是ShardingSphere的JDBC和Proxy这两个组
件。
其中,ShardingJDBC是用来做客户端分库分表的产品,而ShardingProxy是用
来做服务端分库分表的产品。这两者定位有什么区别呢?我们看下官方资料中给出
的两个重要的图:
ShardingJDBC:
shardingJDBC定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。它
使⽤客户端直连数据库,以 jar 包形式提供服务,⽆需额外部署和依赖,可理解为增
强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
ShardingProxy
Sharding-JDBC Sharding-Proxy
数据库 任意 MySQL/PostgreSQL
连接消耗数 高 低
异构语言 仅java 任意
性能 损耗低 损耗略高
无中心化 是 否
静态入口 无 有
ShardingProxy定位为透明化的数据库代理端,提供封装了数据库⼆进制协议的服
务端版本,⽤于完成对异构语⾔的⽀持。⽬前提供 MySQL 和 PostgreSQL 版本,
它可以使⽤任何兼容 MySQL/PostgreSQL 协议的访问客⼾端。
那这两种方式有什么区别呢?
很显然,ShardingJDBC只是客户端的一个工具包,可以理解为一个特殊的JDBC
驱动包,所有分库分表逻辑均由业务方自己控制,所以他的功能相对灵活,支持的
数据库也非常多,但是对业务侵入大,需要业务方自己定制所有的分库分表逻辑。
而ShardingProxy是一个独立部署的服务,对业务方无侵入,业务方可以像用一个
普通的MySQL服务一样进行数据交互,基本上感觉不到后端分库分表逻辑的存在,
但是这也意味着功能会比较固定,能够支持的数据库也比较少。这两者各有优劣。
二、ShardingJDBC实战
shardingjdbc的核心功能是数据分片和读写分离,通过ShardingJDBC,应用可以
透明的使用JDBC访问已经分库分表、读写分离的多个数据源,而不用关心数据源的
数量以及数据如何分布。
1、核心概念:
逻辑表:水平拆分的数据库的相同逻辑和数据结构表的总称
真实表:在分片的数据库中真实存在的物理表。
数据节点:数据分片的最小单元。由数据源名称和数据表组成
绑定表:分片规则一致的主表和子表。
广播表:也叫公共表,指素有的分片数据源中都存在的表,表结构和表中的数据
在每个数据库中都完全一致。例如字典表。
分片键:用于分片的数据库字段,是将数据库(表)进行水平拆分的关键字段。
SQL中若没有分片字段,将会执行全路由,性能会很差。
分片算法:通过分片算法将数据进行分片,支持通过=、BETWEEN和IN分片。
分片算法需要由应用开发者自行实现,可实现的灵活度非常高。
分片策略:真正用于进行分片操作的是分片键+分片算法,也就是分片策略。在
ShardingJDBC中一般采用基于Groovy表达式的inline分片策略,通过一个包含
分片键的算法表达式来制定分片策略,如t_user_$->{u_id%8}标识根据u_id模
8,分成8张表,表名称为t_user_0到t_user_7。
2、测试项目介绍
测试项目参见配套的ShardingDemo项。首先我们对测试项目的结构做下简单的梳
理:
剩余16页未读,继续阅读
资源评论
光芒软件工匠
- 粉丝: 789
- 资源: 64
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功