ShardingSphere源码解析 初步准备

ShardingSphere源码分析(一) ShardingJDBC使用 文章目录环境准备读写分离分库分表加密小结 环境准备 这次的分享偏使用, 不探索 ShardingSphere 的代码过程 ( 实际是我还没编译通过… ) 主要准备是 MySQL 主从环境, 我这里直接在 windows 上安装 mysql 5.7, 并拷贝了一份当做从库, 链接如下: https://blog.youkuaiyun.com/a345203172/article/details/106911270 更加方便的方式是启动 docker 来做一主多从的环境. 读写分离 在 ShardingSphere-5 阅读详情

简介

源码阅读解析前,肯定是要对其有一个初步的了解,其用于解决问题,用于哪些场景。并上手本地跑一跑官方示例之类,开始阅读解析的第一步,为后面做准备。

阅读解析准备

GitHub和项目官网是了解的好途径:

初步看GitHub的介绍,Apache ShardingSphere是一个由一组分布式数据库解决方案组成的开源生态系统,下面是介绍:

Apache ShardingSphere is an open-source ecosystem consisting of a set of distributed database solutions, including 3 independent products, JDBC, Proxy & Sidecar (Planning). They all provide functions of data scale-out, distributed transaction and distributed governance, applicable in a variety of situations such as Java isomorphism, heterogeneous language and cloud-native.
来源GitHub官网:https://github.com/apache/shardingsphere

更多相关的介绍就自行查看了,刚开始文档肯定是要自己扫一遍,虽然看不太懂,但起码心中有些印象,知道项目大体是做啥的,有哪些模块之类的

下面是本地环境准备阶段:

  • 克隆代码到本地
  • 运行体验代码示例

克隆代码到本地

一般来说直接 git clone 就基本解决了,但国内的特殊环境,ShardingSphere又太大了,没有点其他东西,还拉不下来

注:ShardingSphere有些文件名太长了,需要运行下面的命令进行设置,不然拉不下来:

# git clone 文件名太长
git config --global core.longpaths true

目前解决克隆速度慢有下面几种方法:

1.只克隆最新的一层:使用–depth=1,只拉取代码最新的一层,这样不会拉取代码历史,之前尝试过此方法可行,多试几次基本都能拉下来
git clone --depth=1 https://github.com/apache/shardingsphere
2.使用Chrome Github 下载插件,使用其提供的地址进行克隆,很快很快,也是博主一直以来使用的方法

此方法嗖嗖的,快滴很,如果在线访问安装不了的话,使用博主提供的网盘链接或者去其他地方下载后,本地安装也可以,本地安装的教程链接也放到下面了,可能还需要自己进行一些处理

安装完成后,进入GitHub网页,获取加速地址,克隆即可

git clone https://github.com.cnpmjs.org/apache/shardingsphere.git

注:如果是fork的项目,后面需要提pr的,需要将地址修改回非加速地址

3.从Gitee上clone

简单学习之类的,从别人同步到Gitee的项目克隆,因为是国内,也是嗖嗖的

4.下载源码包

也可以直接在GitHub上下载源码包,虽然本地解压后好像没有git历史了,但也够学习之用了,当然,速度也是慢吞吞的…

示例代码运行

使用IDEA打开后,先本地使用Maven工具,clean、install操作下,注意跳过测试

这个如果不使用国内镜像的话,也是比较耗时的

博主看着过去两三分钟还没好,就趁着这段时间下楼跑个步,冲个澡后回来继续

在根目录下有个example目录,右键选择作为Maven工程加载,然后再clean、install一下

数据库准备

这里就使用docker启动一个吧,方便,用户和密码都是root

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
数据库初始化

使用官方提供的数据库初始化脚本:examples/src/resources/manual_schema.sql

表之类的,ShardingSphere好像自己在代码里面操作,后面探索下这个

修改MySQL驱动依赖

提供的示例稍有点问题,在MySQL版本是8+时,会报下面的错误:

Unable to load authentication plugin ‘caching_sha2_password‘

修改MySQL的驱动版本,Maven配置文件是:examples/pom.xml

修改内容如下:

<mysql-connector-java.version>8.0.22</mysql-connector-java.version>
修改配置

修改配置文件,这里修改密码即可,大致如下:examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-databases-range.yaml

dataSources:
  ds_0:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/demo_ds_0?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: root
  ds_1:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/demo_ds_1?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: roo
运行示例

这里选择启动类:examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/YamlRangeConfigurationExampleMain.java

通过看代码能准确知道这个启动类的相关配置文件,就直接选它了

运行起来输出大致如下:

[INFO ] 2021-08-22 07:38:28,331 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-1 - Starting... 
[WARN ] 2021-08-22 07:38:28,370 --main-- [com.zaxxer.hikari.util.DriverDataSource] Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation. 
[INFO ] 2021-08-22 07:38:28,871 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-1 - Start completed. 
[INFO ] 2021-08-22 07:38:28,893 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-2 - Starting... 
[WARN ] 2021-08-22 07:38:28,893 --main-- [com.zaxxer.hikari.util.DriverDataSource] Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation. 
[INFO ] 2021-08-22 07:38:28,908 --main-- [com.zaxxer.hikari.HikariDataSource] HikariPool-2 - Start completed. 
-------------- Process Success Begin ---------------
---------------------------- Insert Data ----------------------------
---------------------------- Print Order Data -----------------------
order_id: 636106123225051136, user_id: 1, address_id: 1, status: INSERT_TEST
order_id: 636106123476709376, user_id: 2, address_id: 2, status: INSERT_TEST
order_id: 636106123636092928, user_id: 3, address_id: 3, status: INSERT_TEST
order_id: 636106123833225216, user_id: 4, address_id: 4, status: INSERT_TEST
order_id: 636106124013580288, user_id: 5, address_id: 5, status: INSERT_TEST
order_id: 636106124164575232, user_id: 6, address_id: 6, status: INSERT_TEST
order_id: 636106124336541696, user_id: 7, address_id: 7, status: INSERT_TEST
order_id: 636106124508508160, user_id: 8, address_id: 8, status: INSERT_TEST
order_id: 636106124672086016, user_id: 9, address_id: 9, status: INSERT_TEST
order_id: 636106124839858176, user_id: 10, address_id: 10, status: INSERT_TEST
---------------------------- Print OrderItem Data -------------------
order_item_id:636106123409600513, order_id: 636106123225051136, user_id: 1, status: INSERT_TEST
order_item_id:636106123543818241, order_id: 636106123476709376, user_id: 2, status: INSERT_TEST
order_item_id:636106123749339137, order_id: 636106123636092928, user_id: 3, status: INSERT_TEST
order_item_id:636106123929694209, order_id: 636106123833225216, user_id: 4, status: INSERT_TEST
order_item_id:636106124093272065, order_id: 636106124013580288, user_id: 5, status: INSERT_TEST
order_item_id:636106124248461313, order_id: 636106124164575232, user_id: 6, status: INSERT_TEST
order_item_id:636106124433010689, order_id: 636106124336541696, user_id: 7, status: INSERT_TEST
order_item_id:636106124584005633, order_id: 636106124508508160, user_id: 8, status: INSERT_TEST
order_item_id:636106124747583489, order_id: 636106124672086016, user_id: 9, status: INSERT_TEST
order_item_id:636106124919549953, order_id: 636106124839858176, user_id: 10, status: INSERT_TEST
---------------------------- Delete Data ----------------------------
---------------------------- Print Order Data -----------------------
---------------------------- Print OrderItem Data -------------------
-------------- Process Success Finish --------------
Disconnected from the target VM, address: '127.0.0.1:53730', transport: 'socket'

Process finished with exit code 

总结

本篇做了下源码阅读前的准备,大致扫了下官方文档,虽然还是比较懵,但起码有个大体印象

然后拉取官方的代码,在本地成功运行了,为后面的分析和调试打下基础

参考链接

ShardingSphere内核原理及核心源码剖析 ShardingSphere内核原理及核心源码剖析一、内核剖析1、解析引擎2、路由引擎3、改写引擎4、执行引擎5、归并引擎6、分布式主键6.1 UUID6.2 SNOWFLAKE二、源码环境安装三、ShardingSphere的SPI扩展点1、SPI机制2、ShardingSphere中的SPI扩展点3、实现自定义主键生成策略四、源码大图五、官网中文文档下载 这一部分,我们主要了解ShardingSphere进行分库分表的底层原理,并且深入到源码了解分库分表的实际运行过程。 一方面,我们之前在学习Shard 阅读详情

相关推荐

ShardingSphere代码阅读(一)

ShardingSphere源码阅读(一) ShardingSphere源码阅读前的准备ShardingSphere源码阅读(一)前言一、ShardingSphere是什么?二、跑Demo1.ShardingSphere-JDBC1.1.API接口实现1.2.配置文件实现2.ShardingSphere-Proxy2.1.server.yaml,是用于启动和配置proxy服务的2.2.config-xxx.yaml3.ShardingSphere-UI总结**PS: ShardingSphere里面的库、表

Encin_Li的博客 866

ShardingSphere开发者编译指南

最近需要对接ShardingSphere(后简称SS)做一些开发,所以要编译这个庞大的项目。

寂寞的博客 1311

工程设计-shardingsphere源码解读(2)

数据分片设计,原理,工程设计,实现机制

AI 2226

ShardingSphere源码编译报错有些文件找不到

解决方式 因为org.apache.shardingsphere.sql.parser.autogen 包下的代码由 ANTLR 生成 所以需要执行以下命令快速生成 ./mvnw -Dcheckstyle.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true -Djacoco.skip=true -DskipITs -DskipTests install -T1C 生成的代码例如 org.apache.shardingsphere.sql.parser

念念不忘,必有回响 1916

ShardingSphere内核原理以及核心源码剖析

这一部分,我们主要了解ShardingSphere进行分库分表的底层原理,并且深入到源码了解分库分表的实际运行过程。

Zhuxiaoyu_91的博客 1592

ShardingSphere 5.1.2 版源码

ShardingSphere 5.1.2 版源码

ShardingSphere源码解析 前期准备

在开始 ShardingSphere 源码解析前,应先翻阅相关介绍文档,了解其解决的问题及其使用场景。然后 run 官方 demo,简单串一下使用流程,为后续深入源码做准备。

眼映星辰的博客 646

SD--根据订单创建出库单(相关的函数列表的介绍系列篇(2))

创建订单样例代码参见:http://blog.youkuaiyun.com/CompassButton/archive/2007/05/09/1601712.aspx 可以根据一个订单或者部分订单项来创建出库单,代码如下:* Populating the item data lx_sales_item-ref_doc = l_vbeln. lx_sales_item-ref_item = c_000010

SAP BLOG--Jack Wu 6226

【ShardingSphere】全网最细最全5.x版本 ShardingSphere 保姆级源码详解

【ShardingSphere】全网最细最全5.x版本 ShardingSphere 保姆级源码详解

Hanson的博客 4977

VisionPro脚本实战:用C#替代QuickBuild,让复杂定位项目代码更清爽

本文探讨了如何通过C#脚本重构VisionPro复杂定位项目,替代臃肿的QuickBuild架构。通过实战案例展示了脚本化开发如何减少60%代码量并提升35%运行效率,使项目更易维护。文章详细介绍了环境搭建、多模板定位重构及高级技巧,帮助开发者突破QuickBuild限制,实现更高效的视觉应用开发。

weixin_30417487的博客 501

动态规划法:n*m方格前进问题

在一个n*m的方格中,m为奇数,放置有n*m个数,方格中间的下方有一人,此人可按照正前方相临的五个方向(方格)前进但不能越出方格。人每走过一个方格必须取此方格中的数。要求找到一条从底到顶的路径,使其数相加之和为最大。输出和的最大值。 算法设计: 可以使用动态规划方法,从顶部开始,将第二排的每个数加上顶部第一排的最优解,将6排的问题缩小为5排的问题,然后重复该操作,直到底部最后一排,此时

Winifred_1997的博客 4675

ShardingSphere分库分表3-内核原理及核心源码解析

文章目录一、内核剖析解析引擎路由引擎改写引擎执行引擎归并引擎二、源码环境安装三、ShardingSphere的SPI扩展点1、SPI机制2、ShardingSphere中的SPI扩展点3、实现自定义主键生成策略四、源码大图 这一部分,我们主要了解ShardingSphere进行分库分表的底层原理,并且深入到源码了解分库分表的实际运行过程。 一方面,我们之前在学习ShardingJDBC时,积累了大量的测试实例,对于学习底层原理是非常好的学习入口。 另一方面,也是为了后面学习ShardingProxy做准备。

roykingw的专栏 1670

【网格生成】Gmsh快速入门教程 --1.图形化界面使用

初探 Gmsh软件的主界面如下图所示。通过点击菜单“File” -> "Open"可选择打开已经存在的几何模型或网格文件,初次使用可选择tutorial目录下的t1.geo文件。打开后效果如图所示,t1.geo描述的是一个长方体。 接下来依次尝试左侧菜单栏的功能:Geometry(几何)、Mesh(求解器)。Solver模块需依赖外置求解器,不在本文介绍范围内。 Geometry 该菜单下是与几何相关的功能,如新增一个点/面、体,移动一个体等,具体功能很多可以在后续使用中逐渐尝试学习。本文仅介绍几个

DJ_xiaoming的博客 1万+

ShardingSphere技术解析

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》、(架构篇)、作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

MoneyHacksPro的博客 1046

DeepSeek+Dify实战:零代码构建智能SQL生成器

本文详细介绍了如何利用DeepSeek和Dify零代码构建智能SQL生成器,帮助非技术人员通过自然语言查询数据库。文章涵盖从数据准备、知识库设计到Agent配置的全流程,并提供了优化技巧和实际应用案例,显著提升团队数据查询效率。

weixin_29311017的博客 417

SAP UI5 和 Fiori 的一些小技巧合集 - 持续更新中

本文介绍笔者从事 SAP UI5 和 Fiori 开发多年以来,积累的一些经验和小技巧。会保持更新。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 911

三:ShardingSphere内核原理及核心源码剖析

这一部分,我们主要了解ShardingSphere进行分库分表的底层原理,并且深入到源码了解分库分表的实际运行过程。 一方面,我们之前在学习ShardingJDBC时,积累了大量的测试实例,对于学习底层原理是非常好的学习入口。 另一方面,也是为了后面学习ShardingProxy做准备。因为对于ShardingProxy,如果只是学会几个简单的配置和指令,是无法在实际工作中用好的。而ShardingProxy作为一个黑盒产品,要通过ShardingProxy来了解底层原理是比较困难的。 一、内核剖析

Xx__WangQi的博客 1749

beegfs源码分析

BeeGFS的客户端是由一个内核模块和两个系统服务组成的,这里咱们主要分析内核模块。由于BeeGFS的目录树解析,是在父目录DEntry里找子目录或文件DEntry,逐级迭代完成的,所以在Mount文件系统时,须要从管理节点获取根元数据节点的ID,而后再向根元数据节点查询根目录的DEntry的信息,为后续的目录解析打下基础。获取类似/data/beeond/data/dentries/38/51/root/#fSiDs#/文件fileId的父路径。1.1 FileID的生成。Session网络消息。

wfzy的博客 1913

ShardingSphere解析

ShardingSphere 作为一款功能强大的分布式数据库中间件,为分布式数据库系统的构建提供了全面的解决方案。通过本文的解析,读者可以深入了解 ShardingSphere 的核心分片机制、读写分离体系、分布式治理、数据迁移方案以及生态扩展组件等知识点。在实际应用中,ShardingSphere 可以帮助开发者轻松应对分布式数据库的挑战,提高数据库系统的性能和可靠性。📥博主的人生感悟和目标- 💂博客主页Java程序员廖志伟- 👉开源项目Java程序员廖志伟- 🌥哔哩哔哩。

MoneyHacksPro的博客 756

把 ABAP writable CDS view entity 讲透:从只读建模到可写模型的 ABAP CDS 新能力

摘要:SAP引入的writable CDS view entity突破了传统CDS视图只读的限制,允许通过ABAP SQL直接进行数据修改。该特性通过WRITABLE关键字定义,使CDS视图成为与数据库表同等级别的可写对象。其核心价值在于为数据集成、中间层同步等场景提供结构化写入入口,但需注意不应绕过业务规则。最佳实践建议保持底层表结构简单映射,避免复杂变形。这一特性标志着CDS从单纯消费模型向双向数据交互能力的演进,为ABAP开发提供了新的数据边界设计思路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1313

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ShardingSphere核心技术解析

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》、(架构篇)、作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 640

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: minetest Window编译运行
下一篇: ShardingSphere JDBC 分库分表 读写分离 数据加密
_萧_
博客等级 码龄10年 55粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值