一、突如其来的兴趣 自从上周写了一个 ShardingSphere 简单入门之后,突然对这个产品产生了浓厚的兴趣。...SQL解析,分为词法解析和语法解析。 执行器优化,合并和优化分片条件,如OR等。...SQLParserExecutor 文件定位,也就得到了 shardingsphere-sql-parser-engine.jar 这个解析引擎包。...四、jar 源码解析 pom.xml parent 项目是 shardingsphere-sql-parser 工程。...SQLParserEngine SQL 解析引擎,会将 SQL 语句解析成 ParseTree 对象,然后再通过 ParseTreeVisitorFactory 解析成 SQLStatement 对象进行返回
概述 简介 ShardingSphere-JDBC ShardingSphere-Proxy ShardingSphere-Sidecar(TODO) 混合架构 解决方案 线路规划 ShardingSphere...GitHub地址:https://github.com/apache/shardingsphere ShardingSphere 官网:https://shardingsphere.apache.org...ShardingSphere 站在数据库的上层视角,关注他们之间的协作多于数据库自身。 连接、增量和可插拔是 Apache ShardingSphere 的核心概念。...Apache ShardingSphere 是多接入端共同组成的生态圈。...通过混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由地调整适合于当前业务的最佳系统架构
我们今天用ShardingSphere 给大家演示数据分片,包括分库分表、只分表不分库进行说明。 下一节有时间的话在讲讲读写分离吧。...github地址:https://github.com/362460453/boot-sharding-JDBC 正文 目录 前言 正文 ShardingSphere介绍 为什么不用mycat 实践前的准备工作...代码案例 总结 ---- ShardingSphere介绍 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy...ShardingSphere的功能能帮助我们做什么 数据分片 读写分离 编排治理 分布式事务 2016年初Sharding-JDBC被开源,这个产品是当当的,加入了Apache 后改名为 ShardingSphere...,mycat和ShardingSphere是同类型的中间件,主要的功能,数据分片和读写分离两个都能去做,但是姿势却有很大的差别, 从字面意义上看Sharding 含义是分片、碎片的意思,所以不难理解ShardingSphere
分库分表中间件简介 二、ShardingSphere产品路线 1. ShardingSphere-JDBC 2. ShardingSphere-Proxy 3....假设主键ID为bigint类型,长度为8字节,而指针大小在InnoDB源码中设置为6字节,所以就是一个键值指针占用8+6=14字节,一个内部节点中存储的指针个数为 16KB/14B = 16 * 1024B...L3生态层用于对接和融入现有数据库生态,包括数据库协议、SQL解析器和存储适配器,分别对应于ShardingSphere以数据库协议提供服务的方式、SQL方言操作数据的方式以及对接存储节点的数据库类型。...SQL是与数据库交流的标准语言,SQL解析引擎负责将SQL字符串解析为抽象语法树,供ShardingSphere理解并实现其增量功能。...ShardingSphere-Scaling支持将外围数据迁移至ShardingSphere所管理的数据库,或对 ShardingSphere的数据节点进行扩容或缩容。
前言 上一篇我们说了ShardingSphere的读写分离,使用读写分离能够减轻单库的读写操作,从而提升数据库的吞吐量,但是当数据库中表的数据量到达一定数量时,我们可能就会需要进行分片了, 分片又分为垂直分片和水平分片...ShardingSphere数据分片实战 使用ShardingSphere数据分片,我们只需通过简单的配置就能实现,ShardingSphere帮我们屏蔽了底层逻辑,我们也可通过ShardingSphere...底层会进行解析表达式,然后分片到对应的数据表上面, 我们的表达式是document_$->{year},也就是根据年进行分片,当然,我们可以根据自己的需求去写表达式,比如根据主键取模进行分片等,需要根据我们的实际场景去做...分片算法 ShardingSphere的分片算法有多种,我们也可以自己实现一套分片算法,通过SPI,分片算法的顶层接口是ShardingAlgorithm,目前实现了多种算法。...关于ShardingSphere的数据分片,我们就说到这里,感谢你的观看,我们下期再见 ShardingSphere数据库读写分离
在shardingSphere1.0中,在看到mybatis的列子中,我们可以看到需要配置:mybatisContext.xml和shardingContext.xml。 ?...2.DatabaseShardingStrategy 数据源分片策略 SingleKeyModuloDatabaseShardingAlgorithm 单key模库分片算法 如图所示,图片来自shardingSphere
tryAcquire 方法 AQS 中直接抛出一个异常,表明需要子类去实现,子类可以根据同步器的 state 状态来决定是否能够获得锁,接下来我们详细看下 acquire 的源码解析。...png]AQS 对其只是简单的实现,具体获取锁的实现方法还是由各自的公平锁和非公平锁单独实现,实现思路一般都是 CAS 赋值 state 来决定是否能获得锁(阅读后文的 ReentrantLock 核心源码解析即可...来一起研究本小节源码。...最后抢到锁返回了,那么如果被中断过的话,就需要补充一次中断 总结 AQS 的源码实在是太多了,我们只研究核心源码,其他部分源码都可以参考研究。
tryAcquire 方法 AQS 中直接抛出一个异常,表明需要子类去实现,子类可以根据同步器的 state 状态来决定是否能够获得锁,接下来我们详细看下 acquire 的源码解析。...AQS 对其只是简单的实现,具体获取锁的实现方法还是由各自的公平锁和非公平锁单独实现,实现思路一般都是 CAS 赋值 state 来决定是否能获得锁(阅读后文的 ReentrantLock 核心源码解析即可...来一起研究本小节源码。 ?...最后抢到锁返回了,那么如果被中断过的话,就需要补充一次中断 总结 AQS 的源码实在是太多了,我们只研究核心源码,其他部分源码都可以参考研究。
target=https%3A%2F%2Fgitee.com%2Fcreyanghang%2Fspring-example%2Ftree%2Fmaster%2Fspring-shardingsphere...spring-boot-starter-web org.apache.shardingsphere... shardingsphere-jdbc-core-spring-boot-starter <version...name: sharging-jdbc-demo profiles: active: dev 复制 application-dev.yml: # 读写分离配置 spring: shardingsphere...8080/user/insert 图片 在这里插入图片描述 写入主数据源后,查询主数据库中数据是否写入,从数据库数据是否正常同步 2.2、事务测试 为了保证主从库间的事务一致性,避免跨服务的分布式事务,ShardingSphere-JDBC
,后续我们会针对这两个方法进行解析。...= this.aspectBeanNames; // 步骤1:如果aspectNames为空,则试图从IOC中解析出Aspect的beanName列表 if (aspectNames...获得普通增强器 getAdvisor(...)方法的源码如下所示: a> 步骤1:获得切点表达式的相关信息 下面我们来看一下步骤1中的获得切点表达式的相关信息的getPointcut(...)方法源码逻辑...更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」 往期推荐 (五)Spring源码解析:ApplicationContext解析 (四)Spring源码解析...:bean的加载流程 (三)Spring源码解析:自定义标签解析 (二)Spring源码解析:默认标签解析 (一)Spring源码解析:容器的基本实现
executor = (Executor) interceptorChain.pluginAll(executor); return executor; } BaseExecutor源码解析
数据分片的核心由SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并的流程组成。...对源码有兴趣的同学可以阅读 shardingsphere-route.jar 包。
UUID,无序,写入性能差 snowflake·: ShardingSphere提供这个算法, 有序,写入性能好,生成性能无上限。...利用Redis作为发号器: String 类型 key:yyyyMMddHHmmssSSS value: 序号 防止时钟不准,key的有效时间为:30s,生产性能受到redis限制,一般业务够用 ShardingSphere...分片流程 分片流程:解析--> 路由->改写->执行->归并 解析 SQLParserEngine 1.解析成AST 语法树 官网图片如下: 2.提取SQLSegment 3.填充SQL语句 SQLStatement...标准类图,ShardingSphere 改写部分的 略有不同。
spring-boot-starter-web org.apache.shardingsphere... shardingsphere-jdbc-core-spring-boot-starter <version...application: name: sharging-jdbc-demo profiles: active: dev application-dev.yml: # 读写分离配置 spring: shardingsphere.../127.0.0.1:8080/user/insert 写入主数据源后,查询主数据库中数据是否写入,从数据库数据是否正常同步 2.2、事务测试 为了保证主从库间的事务一致性,避免跨服务的分布式事务,ShardingSphere-JDBC
ShardingSphere实战ShardingSphere是一款开源的分布式数据库中间件,它提供了多种数据分片和数据库分布式事务解决方案。...下面是ShardingSphere的实战流程:下载ShardingSphere并解压:可以从ShardingSphere官方网站下载最新稳定版本的安装包,并将其解压到本地目录。...Narayana源码解析Narayana是一个开源的分布式事务管理方案,它提供了可靠的XA事务处理能力。...下面是对Narayana方案源码解析的大致步骤:下载源码:可以从Narayana的官方代码仓库中下载Narayana的源码。...这是对ShardingSphere如何实战并解析Narayana方案的源码的简要介绍,具体的实战和源码分析过程可以根据自身需求和实际场景进行深入研究。
第三部分:ShardingSphere 源码解析之基础设施 围绕 ShardingSphere 的基础架构展开讨论,首先给你高效阅读 ShardingSphere 源码的方法,并介绍微内核架构和分布式主键的设计理念...第四部分:ShardingSphere 源码解析之分片引擎 关注 ShardingSphere 最核心的分片引擎实现原理,从 SQL 的解析引擎开始,一路进行路由引擎、改写引擎、执行引擎、归并引擎等分片引擎中各个核心技术点的源码解析...第五部分:ShardingSphere 源码解析之分布式事务 分布式事务是分布式数据库中间件的必备功能,ShardingSphere 内部也提供了对分布式事务的一种抽象。...第六部分:ShardingSphere 源码解析之治理与集成 讨论如何基于改写引擎实现低侵入性数据脱敏方案、如何基于配置中心实现配置信息的动态化管理、如何基于注册中心实现数据库访问熔断机制、如何基于 Hook...学习从源码分析到日常开发的技巧 从源码解析到日常应用是本专栏的一个核心目标。
LeakCanary是一个开源的,可以用来检测activtiy或者fragment内存泄漏的框架,本篇我们来学习这个框架的源码。...leakcanary-android:2.0-alpha-2' } 然后在application执行如下代码: LeakCanary.install(this); 然后出现内存泄露时候就会出现通知弹窗 2.源码分析...Throwable e) { return failure(e, since(analysisStartNanoTime)); } } 1.创建HprofParser,这个时另一个库里的,用来解析
SpringApplication源码解析 运行SpringApplication的方式 在创建SpringBoot应用,我们经常看到 SpringApplication.run(ApplicationConfiguration.class...其实因为SpringApplication在创建的时候,做了 推断Web应用类型 我们来看看SpringApplication构造方法源码 public SpringApplication(ResourceLoader...这里要注意优选级问题,如果你的优先级低于ConfigFileApplicationListener的优先级,那你这里获取name是获取不到的 推断实际启动引导类 最后便是推断实际启用引导类,老规矩,看看源码...and continue } return null; } 这里可以看到,它推断是获取所有线程,然后取出线程的方法名为main的类名,进行实现的 分析SpringApplication.run()方法 源码解析...先上一波源码,再逐一分析 public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new
下面我们来看下PriorityQueue的源码。
领取专属 10元无门槛券
手把手带您无忧上云