写点什么

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_TESTorder_id: 636106123476709376, user_id: 2, address_id: 2, status: INSERT_TESTorder_id: 636106123636092928, user_id: 3, address_id: 3, status: INSERT_TESTorder_id: 636106123833225216, user_id: 4, address_id: 4, status: INSERT_TESTorder_id: 636106124013580288, user_id: 5, address_id: 5, status: INSERT_TESTorder_id: 636106124164575232, user_id: 6, address_id: 6, status: INSERT_TESTorder_id: 636106124336541696, user_id: 7, address_id: 7, status: INSERT_TESTorder_id: 636106124508508160, user_id: 8, address_id: 8, status: INSERT_TESTorder_id: 636106124672086016, user_id: 9, address_id: 9, status: INSERT_TESTorder_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_TESTorder_item_id:636106123543818241, order_id: 636106123476709376, user_id: 2, status: INSERT_TESTorder_item_id:636106123749339137, order_id: 636106123636092928, user_id: 3, status: INSERT_TESTorder_item_id:636106123929694209, order_id: 636106123833225216, user_id: 4, status: INSERT_TESTorder_item_id:636106124093272065, order_id: 636106124013580288, user_id: 5, status: INSERT_TESTorder_item_id:636106124248461313, order_id: 636106124164575232, user_id: 6, status: INSERT_TESTorder_item_id:636106124433010689, order_id: 636106124336541696, user_id: 7, status: INSERT_TESTorder_item_id:636106124584005633, order_id: 636106124508508160, user_id: 8, status: INSERT_TESTorder_item_id:636106124747583489, order_id: 636106124672086016, user_id: 9, status: INSERT_TESTorder_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
复制代码

总结

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


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

参考链接

发布于: 5 小时前阅读数: 5
用户头像

关注

还未添加个人签名 2018.09.09 加入

代码是门手艺活,也是门艺术活

评论

发布
暂无评论
ShardingSphere源码解析 初步准备