Sharding-JDBC

数据库中间件 Sharding-JDBC 源码分析 —— JDBC实现与读写分离

淺唱寂寞╮ 提交于 2019-11-30 06:23:11
摘要: 原创出处 http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/ 「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. unspported 包 3. adapter 包 3.1 WrapperAdapter 3.2 AbstractDataSourceAdapter 3.3 AbstractConnectionAdapter 3.4 AbstractStatementAdapter 3.5 AbstractPreparedStatementAdapter 3.6 AbstractResultSetAdapter 4. 插入流程 5. 查询流程 6. 读写分离 666. 彩蛋 ������关注 微信公众号:【芋道源码】 有福利: 1. RocketMQ / MyCAT / Sharding-JDBC 所有 源码分析文章列表 2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 3. 您对于源码的疑问每条留言 都 将得到 认真 回复。 甚至不知道如何读源码也可以请教噢 。 4. 新的 源码解析文章 实时 收到通知。 每周更新一篇左右 。 5. 认真的

sharding-jdbc源码阅读之soft transaction

不问归期 提交于 2019-11-30 05:58:55
先看一段作者张亮,对sharding-jdbc分布式事务理解: 张亮:分布式事务这块,我们认为XA多阶段提交的方式,虽然对分布式数据的完整性有比较好的保障,但会极大的降影响应用性能,并未考虑采用。我们采用的是两种方式,一种称之为弱XA,另一种是柔性事务,即BASE。 弱XA就是分库之后的数据库各自负责自己事务的提交和回滚,没有统一的调度器集中处理。这样做的好处是天然就支持,对性能也没有影响。但一旦出问题,比如两个库的数据都需要提交,一个提交成功,另一个提交时断网导致失败,则会发生数据不一致的问题,而且这种数据不一致是永久存在的。 柔性事务是对弱XA的有效补充。柔性事务类型很多。 Sharding-JDBC主要实现的是最大努力送达型。即认为事务经过反复尝试一定能够成功。如果每次事务执行失败,则记录至事务库,并通过异步的手段不断的尝试,直至事务成功(可以设置尝试次数,如果尝试太多仍然失败则入库并需要人工干预)。在尝试的途中,数据会有一定时间的不一致,但最终是一致的。通过这种手段可以在性能不受影响的情况下牺牲强一致性,达到数据的最终一致性。最大努力送达型事务的缺点是假定事务一定是成功的,无法回滚,因此不够灵活。 还有一种柔性事务类型是TCC,即Try Confirm Cancel。可以通过事务管理器控制事务的提交或回滚,更加接近原生事务,但仍然是最终一致性

Sharding-JDBC分布式ID生成算法snowflake源码详细解读

半腔热情 提交于 2019-11-30 05:58:45
分布式ID生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种。 Snowflake工作原理 对于分布式的ID生成,以Twitter Snowflake为代表的Flake 系列算法,属于划分命名空间并行生成的一种算法,生成的数据为64bit的long型数据,在数据库中应该用大于等于64bit的数字类型的字段来保存该值,比如在MySQL中应该使用BIGINT。 SnowFlake算法生成ID的结构如下图: 1 符号位 等于 0 41 时间戳 从 2016 / 11 / 01 零点开始的毫秒数,支持 2 ^ 41 / 365 / 24 / 60 / 60 / 1000 = 69 .7年 10 工作进程编号 支持 1024 个进程 12 序列号 每毫秒从 0 开始自增,支持 4096 个编号 Sharding-jdbc实现的雪花算法核心源码解读: 源码地址:https://github.com/apache/incubator-shardingsphere/blob/dev/sharding-core/sharding-core-common/src/main/java/org/apache/shardingsphere/core/strategy/keygen/SnowflakeShardingKeyGenerator.java} /* * Licensed to

4. sharding-jdbc源码之分布式ID

邮差的信 提交于 2019-11-30 05:58:31
阿飞Javaer ,转载请注明原创出处,谢谢! 实现动机 传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的支持,比如MySQL的自增键。 对于MySQL而言,分库分表之后,不同表生成全局唯一的Id是非常棘手的问题。因为同一个逻辑表内的不同实际表之间的自增键是无法互相感知的, 这样会造成重复Id的生成。我们当然可以通过约束表生成键的规则来达到数据的不重复,但是这需要引入额外的运维力量来解决重复性问题,并使框架缺乏扩展性。 目前有许多第三方解决方案可以完美解决这个问题,比如UUID等依靠特定算法自生成不重复键(由于InnoDB采用的B+Tree索引特性,UUID生成的主键插入性能较差),或者通过引入Id生成服务等。 但也正因为这种多样性导致了Sharding-JDBC如果强依赖于任何一种方案就会限制其自身的发展。 基于以上的原因,最终采用了以JDBC接口来实现对于生成Id的访问,而将底层具体的Id生成实现分离出来。 摘自 sharding-jdbc分布式主键 sharding-jdbc的分布式ID采用twitter开源的snowflake算法,不需要依赖任何第三方组件,这样其扩展性和维护性得到最大的简化;但是snowflake算法的缺陷(强依赖时间,如果时钟回拨,就会生成重复的ID),sharding-jdbc没有给出解决方案,如果用户想要强化

Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现读写分离

怎甘沉沦 提交于 2019-11-30 05:58:03
转载请标明出处: http://blog.csdn.net/forezp/article/details/94174114 本文出自 方志朋的博客 个人博客纯净版:https://www.fangzhipeng.com/db/2019/06/26/shardingjdbc-master-slave.html Sharding-JDBC简介 Sharding-JDBC是的分布式数据库中间件解决方案。Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)是3款相互独立的产品,共同 组成了ShardingSphere。Sharding-JDBC定位于轻量级的Java框架,它使用客户端直连数据库,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。 适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。 基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。 架构图如下: 支持以下的特效: 分库分表 读写分离 柔性事务 分布式主键 分布式治理能力 工程准备

数据库中间件 Sharding-JDBC 源码分析 —— 结果归并

妖精的绣舞 提交于 2019-11-30 05:57:49
摘要: 原创出处 http://www.iocoder.cn/Sharding-JDBC/result-merger/ 「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. MergeEngine 2.1 SelectStatement#setIndexForItems() 2.2 ResultSetMerger 2.2.1 AbstractStreamResultSetMerger 2.2.2 AbstractMemoryResultSetMerger 2.2.3 AbstractDecoratorResultSetMerger 3. OrderByStreamResultSetMerger 3.1 归并算法 3.2 #next() 4. GroupByStreamResultSetMerger 4.1 AggregationUnit 4.2 #next() 5. GroupByMemoryResultSetMerger 5.1 #next() 6. IteratorStreamResultSetMerger 7. LimitDecoratorResultSetMerger 666. 彩蛋 ������关注 微信公众号:【芋道源码】 有福利: 1. RocketMQ / MyCAT / Sharding-JDBC

数据库分库分表中间件 Sharding-JDBC 源码分析 —— 分布式主键

落爺英雄遲暮 提交于 2019-11-30 05:57:30
������关注 微信公众号:【芋道源码】 有福利: 1. RocketMQ / MyCAT / Sharding-JDBC 所有 源码分析文章列表 2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 3. 您对于源码的疑问每条留言 都 将得到 认真 回复。 甚至不知道如何读源码也可以请教噢 。 4. 新的 源码解析文章 实时 收到通知。 每周更新一篇左右 。 5. 认真的 源码交流微信群。 本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2.KeyGenerator 2.1 DefaultKeyGenerator 2.2 HostNameKeyGenerator 2.3 IPKeyGenerator 2.4 IPSectionKeyGenerator 666. 彩蛋 1. 概述 本文分享 Sharding-JDBC 分布式主键 实现。 官方文档 《分布式主键》 对其介绍及使用方式介绍很完整,强烈先阅读。下面先引用下分布式主键的 实现动机 : 传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的支持,比如MySQL的自增键。对于MySQL而言,分库分表之后,不同表生成全局唯一的Id是非常棘手的问题。因为同一个逻辑表内的不同实际表之间的自增键是无法互相感知的

数据库中间件 Sharding-JDBC 源码分析 —— 分布式事务(一)之最大努力型

青春壹個敷衍的年華 提交于 2019-11-30 05:57:12
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 http://www.iocoder.cn/Sharding-JDBC/transaction-bed/ 「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. 最大努力送达型 3. 柔性事务管理器 3.1 概念 3.2 柔性事务配置 3.3 柔性事务 3.3.1 创建柔性事务 4. 事务日志存储器 4.1 #add() 4.2 #remove() 4.3 #findEligibleTransactionLogs() 4.4 #increaseAsyncDeliveryTryTimes() 4.5 #processData() 5. 最大努力送达型事务监听器 6. 最大努力送达型异步作业 6.1 BestEffortsDeliveryJob 6.2 AsyncSoftTransactionJobConfiguration 6.3 Elastic-Job 是否必须? 7. 适用场景 8. 开发指南 & 开发示例 666. 彩蛋 ???关注**微信公众号:【芋道源码】**有福利: RocketMQ / MyCAT / Sharding-JDBC 所有 源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码

数据库中间件 Sharding-JDBC 源码分析 —— 事务(一)之BED

拈花ヽ惹草 提交于 2019-11-30 05:55:55
摘要: 原创出处 http://www.iocoder.cn/Sharding-JDBC/transaction-bed/ 「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. 最大努力送达型 3. 柔性事务管理器 3.1 概念 3.2 柔性事务配置 3.3 柔性事务 3.3.1 创建柔性事务 4. 事务日志存储器 4.1 #add() 4.2 #remove() 4.3 #findEligibleTransactionLogs() 4.4 #increaseAsyncDeliveryTryTimes() 4.5 #processData() 5. 最大努力送达型事务监听器 6. 最大努力送达型异步作业 6.1 BestEffortsDeliveryJob 6.2 AsyncSoftTransactionJobConfiguration 6.3 Elastic-Job 是否必须? 7. 适用场景 8. 开发指南 & 开发示例 666. 彩蛋 ������关注 微信公众号:【芋道源码】 有福利: 1. RocketMQ / MyCAT / Sharding-JDBC 所有 源码分析文章列表 2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 3.

Sharding-JDBC 源码解析合集

对着背影说爱祢 提交于 2019-11-30 05:55:35
合集访问地址 :http://www.iocoder.cn/categories/Sharding-JDBC/?mp 微信长按二维码访问地址: 《Sharding-JDBC 源码分析 —— 为什么阅读 Sharding-JDBC 源码?》 《Sharding-JDBC 源码分析 —— SQL 解析(一)之词法解析》 《Sharding-JDBC 源码分析 —— SQL 解析(二)之SQL解析》 《Sharding-JDBC 源码分析 —— SQL 解析(三)之查询SQL》 《Sharding-JDBC 源码分析 —— SQL 解析(四)之插入SQL》 《Sharding-JDBC 源码分析 —— SQL 解析(五)之更新SQL》 《Sharding-JDBC 源码分析 —— SQL 解析(六)之删除SQL》 《Sharding-JDBC 源码分析 —— SQL 解析(七)之DDL》 《Sharding-JDBC 源码分析 —— SQL 路由(一)之分库分表配置》 《Sharding-JDBC 源码分析 —— SQL 路由(二)之分库分表路由》 《Sharding-JDBC 源码分析 —— SQL 路由(三)之Spring与YAML配置》 《Sharding-JDBC 源码分析 —— SQL 改写》 《Sharding-JDBC 源码分析 —— 分布式主键》 《Sharding