阅读 231

ShardingSphere源码解析 初步准备

简介

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

阅读解析准备

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官网:github.com/apache/shar…

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

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

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

克隆代码到本地

一般来说直接 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 
复制代码

总结

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

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

参考链接

文章分类
后端
文章标签