
数据库中间件
Shareding JDBC,Mycat
weixin_42073629
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分布式事务在 Sharding-Sphere 中的实现
分布式事务的使用场景1、ACID一切从ACID开始说起。ACID是本地事务所具有的四大特征: Atomicity:原子性 事务作为整体来执行,要么全部执行,要么全不执行。 Consistency:一致性 事务应确保数据从一个一致的状态转变为另一个一致的状态。 Isolation:隔离性 多个事务并发执行时,一个事务的执行不应影响其他事务的执行。 Durability:持久性 已提交的事务修改数据会被持久保持。 关系型数据库的本地事务完美的提供了原创 2020-06-20 21:47:50 · 470 阅读 · 0 评论 -
Sharding-Sphere 的应用性能监控实践
1. Sharding-Opentracing简介Sharding-Opentracing是Sharding-Sphere为大家提供的基于Opentracing规范的APM工具包。它采用发布 - 订阅式的组件通信机制实现了对核心链路方法的跟踪记录,包括sql解析路由方法、sql执行方法和结果归并方法。Opentracing(https://github.com/opentracing)规范的产生,目的是为了解决不同的分布式追踪系统API不兼容的问题。它是一个轻量级的标准化层,位于应用程序/类库和追踪原创 2020-06-20 21:44:57 · 710 阅读 · 0 评论 -
分布式数据库中间件解决方案 Sharding-Sphere 3.X
Sharding-Sphere是什么?Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar这3款相互独立的产品组成。他们均提供标准化的数据分片、读写分离、柔性事务和数据治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Sharding-Sphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一原创 2020-06-20 12:56:03 · 270 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— 分布式事务(一)之最大努力型
1. 概述数据库表分库后,业务场景下的单库本地事务可能变成跨库分布式事务。虽然我们可以通过合适的分库规则让操作的数据在同库下,继续保证单库本地事务,这也是非常推崇的,但不是所有场景下都能适用。如果这些场景对事务的一致性有要求,我们就不得不解决分布式事务的“麻烦”。分布式事务是个很大的话题,我们来看看 Sharding-JDBC 对她的权衡:Sharding-JDBC由于性能方面的考量,决定不支持强一致性分布式事务。我们已明确规划线路图,未来会支持最终一致性的柔性事务。Sharding-J原创 2020-06-13 01:30:24 · 1342 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— JDBC实现与读写分离
1. 概述本文主要分享JDBC与读写分离的实现。为什么会把这两个东西放在一起讲呢?客户端直连数据库的读写分离主要通过获取读库和写库的不同连接来实现,和 JDBC Connection 刚好放在一块。OK,我们先来看一段 Sharding-JDBC 官方对自己的定义和定位Sharding-JDBC定位为轻量级java框架,使用客户端直连数据库,以jar包形式提供服务,未使用中间层,无需额外部署,无其他依赖,DBA也无需改变原有的运维方式,可理解为增强版的JDBC驱动,旧代码迁移成本几乎为...原创 2020-06-13 01:12:36 · 530 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— 结果归并
1. 概述本文分享查询结果归并的源码实现。正如前文《SQL 执行》提到的**“分表分库,需要执行的 SQL 数量从单条变成了多条”,多个SQL执行**结果必然需要进行合并,例如:SELECT * FROM t_order ORDER BY create_time在各分片排序完后,Sharding-JDBC 获取到结果后,仍然需要再进一步排序。目前有分页、分组、排序、聚合列、迭代五种场景需要做进一步处理。当然,如果单分片SQL执行结果是无需合并的。在《SQL 执行》不知不觉已经分享了插..原创 2020-06-13 00:58:52 · 910 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 执行
1. 概述越过千山万水(SQL 解析、SQL 路由、SQL 改写),我们终于来到了SQL 执行。开森不开森?!本文主要分享SQL 执行的过程,不包括结果聚合。《结果聚合》东半球第二良心笔者会更新,关注微信公众号【芋道源码】完稿后第一时间通知您哟。绿框部分SQL 执行主流程。Sharding-JDBC 正在收集使用公司名单:传送门。???? 你的登记,会让更多人参与和使用 Sharding-JDBC。传送门Sharding-JDBC 也会因此,能够覆盖更多的业务场景。传送门登记吧,原创 2020-06-13 00:55:29 · 412 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— 分布式主键
1. 概述本文分享 Sharding-JDBC分布式主键实现。官方文档《分布式主键》对其介绍及使用方式介绍很完整,强烈先阅读。下面先引用下分布式主键的实现动机:传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的支持,比如MySQL的自增键。对于MySQL而言,分库分表之后,不同表生成全局唯一的Id是非常棘手的问题。因为同一个逻辑表内的不同实际表之间的自增键是无法互相感知的,这样会造成重复Id的生成。我们当然可以通过约束表生成键的规则来达到数据的不重复,但是.原创 2020-06-13 00:46:41 · 360 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 改写
1. 概述前置阅读:《SQL 解析(三)之查询SQL》本文分享SQL 改写的源码实现。主要涉及两方面:SQL 改写:改写 SQL,解决分库分表后,查询结果需要聚合,需要对 SQL 进行调整,例如分页 SQL 生成:生成分表分库的执行 SQLSQLRewriteEngine,SQL重写引擎,实现 SQL 改写、生成功能。从 Sharding-JDBC 1.5.0 版本,SQL 改写进行了调整和大量优化。1.4.x及之前版本,SQL改写是在SQL路由之前完成的,在1.5.x中调整为SQL路原创 2020-06-12 02:11:40 · 2981 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 路由(二)之分库分表路由
1. 概述本文分享分表分库路由相关的实现。涉及内容如下:SQL 路由结果 路由策略 x 算法 SQL 路由器内容顺序如编号。Sharding-JDBC 正在收集使用公司名单:传送门。???? 你的登记,会让更多人参与和使用 Sharding-JDBC。传送门Sharding-JDBC 也会因此,能够覆盖更多的业务场景。传送门登记吧,骚年!传送门SQL 路由大体流程如下:2. SQLRouteResult经过SQL解析、SQL路由后,产生SQL路由结果,即 SQLR原创 2020-06-12 01:53:33 · 803 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 路由(一)之分库分表配置
1. 概述????《SQL 解析》已经告于段落,我们要开始新的旅程:《SQL 路由》。相比SQL解析,路由会容易理解很多,骗人是小????。整个系列预计会拆分成三小篇文章:《分库分表配置》 《分表分库路由》 《Spring与YAML配置》第一、二篇会在近期更新。第三篇会在《SQL 改写》、《SQL 执行》完成后进行更新。????改写和执行相对有趣。????道友,您看,逗比博主**“很有规划”**,是关注公众号一波【芋道源码】还是分享朋友圈。阅读本文之前,建议已经读过官方相关文章:《原创 2020-06-12 01:37:04 · 431 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 解析(六)之删除SQL
1. 概述本文前置阅读:《SQL 解析(一)之词法解析》 《SQL 解析(二)之SQL解析》本文分享删除SQL解析的源码实现。???? 如果你已经理解《SQL 解析(三)之查询SQL》,那本文会是一篇水文,当成一种放松吧。还是跟前文一样,以 MySQL 举例子。我们来一起看看 MySQLDeleteParser。MySQL DELETE 语法一共有 2 种 :第一种:Single-table syntaxDELETE [LOW_PRIORITY] [QUICK] [IGNORE]原创 2020-06-12 01:31:58 · 398 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 解析(五)之更新SQL
1. 概述本文前置阅读:《SQL 解析(一)之词法解析》 《SQL 解析(二)之SQL解析》本文分享更新SQL解析的源码实现。更新SQL解析比查询SQL解析复杂度低的多的多。不同数据库在插入SQL语法上也统一的多。本文分享 MySQL 更新SQL解析器 MySQLUpdateParser。MySQL UPDATE 语法一共有 2 种 :第一种:Single-table syntaxUPDATE [LOW_PRIORITY] [IGNORE] table_reference原创 2020-06-12 01:28:42 · 616 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 解析(四)之插入SQL
1. 概述本文前置阅读:《SQL 解析(一)之词法解析》 《SQL 解析(二)之SQL解析》本文分享插入SQL解析的源码实现。不考虑 INSERT SELECT 情况下,插入SQL解析比查询SQL解析复杂度低的多的多。不同数据库在插入SQL语法上也统一的多。本文分享 MySQL 插入SQL解析器 MySQLInsertParser。MySQL INSERT 语法一共有 3 种 :第一种:INSERT {VALUES | VALUES}INSERT [LOW_PRIORITY |原创 2020-06-12 01:24:54 · 501 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 解析(三)之查询SQL
1. 概述本文前置阅读:《SQL 解析(一)之词法解析》 《SQL 解析(二)之SQL解析》本文分享插入SQL解析的源码实现。由于每个数据库在遵守 SQL 语法规范的同时,又有各自独特的语法。因此,在 Sharding-JDBC 里每个数据库都有自己的 SELECT 语句的解析器实现方式,当然绝大部分逻辑是相同的。本文主要分享笔者最常用的 MySQL 查询。查询 SQL 解析主流程如下:// AbstractSelectParser.javapublic final Sele原创 2020-06-12 01:08:05 · 1129 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 解析(二)之SQL解析
1. 概述上篇文章《词法解析》分享了词法解析器Lexer是如何解析 SQL 里的词法。本文分享SQL解析引擎是如何解析与理解 SQL的。因为本文建立在《词法解析》之上,你需要阅读它后在开始这段旅程。????如果对词法解析不完全理解,请给我的公众号**(芋道源码)留言,我会逐条认真耐心**回复。区别于 Lexer,Parser理解SQL:提炼分片上下文 标记需要SQL改写的部分Parser 有三个组件:SQLParsingEngine :SQL 解析引擎 SQLParser :SQL 解原创 2020-06-12 01:07:53 · 606 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 解析(一)之词法解析
1. 概述SQL 解析引擎,数据库中间件必备的功能和流程。Sharding-JDBC 在1.5.0.M1正式发布时,将 SQL 解析引擎从 Druid 替换成了自研的。新引擎仅解析分片上下文,对于 SQL 采用"半理解"理念,进一步提升性能和兼容性,同时降低了代码复杂度(不理解没关系,我们后续会更新文章解释该优点)。 国内另一款数据库中间件 MyCAT SQL 解析引擎也是 Druid,目前也在开发属于自己的 SQL 解析引擎。可能有同学看到SQL 解析会被吓到,请淡定,耐心往下看。《SQL 解..原创 2020-06-12 01:07:41 · 543 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— 为什么阅读 Sharding-JDBC 源码?
为什么阅读 Sharding-JDBC 源码?看完大部分的 MyCAT 源码,有惊喜的地方,也有失望的地方,因而想看看 Sharding-JDBC 进行下对比。尽管,Sharding-JDBC 是 Client 端级别,MyCAT 是 Server 级别。 Sharding-JDBC 经历过当当本身业务的考验,从可靠性上来说会更让人有信赖感。 文档更加完善,开发体系更加健全。 Sharding-JDBC 1.5.0.M3 发布。 最大努力送达型事务支持,想要进一步了解分布式事务的解决方案。Las原创 2020-06-11 06:38:14 · 328 阅读 · 0 评论 -
MyCAT 源码分析 —— SQL ON MongoDB
1. 概述可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。吼吼吼,让我们开启这段神奇的“旅途”。本文主要分成四部分:总体流程,让你有个整体的认识 查询操作 插入操作 彩蛋,????彩蛋,????彩蛋建议你看过这两篇文章(非必须):《MyCAT 源码分析 —— 【单库单表】插入》 《MyCAT 源码分析 —— 【单库单表】查询》2. 主流程MyCAT Server接收MySQL Client基于MySQL协议的请求,原创 2020-06-11 06:31:33 · 228 阅读 · 0 评论 -
MyCAT 源码分析 —— PreparedStatement 重新入门
1. 概述相信很多同学在学习 JDBC 时,都碰到PreparedStatement和Statement。究竟该使用哪个呢?最终很可能是懵里懵懂的看了各种总结,使用PreparedStatement。那么本文,通过 MyCAT 对PreparedStatement的实现对大家能够重新理解下。本文主要分成两部分:JDBC Client 如何实现PreparedStatement。 MyCAT Server 如何处理PreparedStatement。???? Let's Go。2...原创 2020-06-11 06:27:26 · 358 阅读 · 0 评论 -
MyCAT 源码分析 —— XA分布式事务
1. 概述数据库拆分后,业务上会碰到需要分布式事务的场景。MyCAT 基于 XA 实现分布式事务。国内目前另外一款很火的数据库中间件 Sharding-JDBC 准备基于 TCC 实现分布式事务。本文内容分成三部分:XA 概念简述 MyCAT 代码如何实现 XA MyCAT 在实现 XA 存在的一些缺陷2. XA 概念X/Open 组织(即现在的 Open Group )定义了分布式事务处理模型。 X/Open DTP 模型( 1994 )包括:应用程序(AP) 事务管...原创 2020-06-11 06:23:11 · 433 阅读 · 0 评论 -
MyCAT 源码分析 —— 跨库两表Join
1. 概述MyCAT 支持跨库表 Join,目前版本仅支持跨库两表 Join。虽然如此,已经能够满足我们大部分的业务场景。况且,Join 过多的表可能带来的性能问题也是很麻烦的。本文主要分享:整体流程、调用顺序图 核心代码的分析前置阅读:《MyCAT 源码分析 —— 【单库单表】查询》。OK,Let's Go。2. 主流程当执行跨库两表 Join SQL 时,经历的大体流程如下:SQL 上,需要添加注解/*!mycat:catlet=io.mycat.catlets.S.原创 2020-06-11 06:16:26 · 725 阅读 · 0 评论 -
MyCAT 源码解析 —— 分片结果合并(一)
1. 概述相信很多同学看过 MySQL 各种优化的文章,里面 99% 会提到:单表数据量大了,需要进行分片(水平拆分 or 垂直拆分)。分片之后,业务上必然面临的场景:跨分片的数据合并。今天我们就一起来瞅瞅 MyCAT 是如何实现分片结果合并。跨分片查询大体流程如下:和《【单库单表】查询》不同的两个过程:【2】多分片执行 SQL 【4】合并多分片结果下面,我们来逐条讲解这两个过程。2. 多分片执行 SQL经过 SQL 解析后,计算出需要执行 SQL 的分片节点,遍历分..原创 2020-06-11 06:11:23 · 284 阅读 · 0 评论 -
MyCAT 源码分析 —— 【单库单表】查询
1. 概述内容形态以 顺序图 + 核心代码 为主。如果有地方表述不错误或者不清晰,欢迎留言。对于内容形态,非常纠结,如果有建议,特别特别特别欢迎您提出。本文讲解 【单库单表】查询 所涉及到的代码。????内容和《MyCAT 源码分析 —— 【单库单表】插入》超级相似,一方面本身流程基本相同,另外一方面文章结构没拆分好。我们使用 ???? 标记差异的逻辑。交互如下图:整个过程,MyCAT Server 流程如下:接收 MySQL Client 请求,解析 SQL。 获得路原创 2020-06-11 06:07:30 · 223 阅读 · 0 评论 -
MyCAT 源码分析 —— 【单库单表】插入
1. 概述内容形态以 顺序图 + 核心代码 为主。如果有地方表述不错误或者不清晰,欢迎留言。对于内容形态,非常纠结,如果有建议,特别特别特别欢迎您提出。本文讲解 【单库单表】插入 所涉及到的代码。交互如下图:整个过程,MyCAT Server 流程如下:接收 MySQL Client 请求,解析 SQL。 获得路由结果,进行路由。 获得 MySQL 连接,执行 SQL。 响应执行结果,发送结果给 MySQL Client。我们逐个步骤分析,一起来看看源码。2. 接收请原创 2020-06-11 06:02:44 · 190 阅读 · 0 评论 -
MyCAT 源码分析 —— 调试环境搭建
1. 依赖工具Maven Git JDK MySQL IntelliJ IDEA2. 源码拉取从官方仓库https://github.com/MyCATApache/Mycat-ServerFork出属于自己的仓库。为什么要Fork?既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。????使用IntelliJ IDEA从Fork出来的仓库拉取代码。拉取完成后,Maven会下载依赖包,可能会花费一些时间,耐心等待下。3. 数据库配置...原创 2020-06-11 05:55:05 · 401 阅读 · 0 评论 -
MyCAT 源码分析 —— 为什么阅读 MyCAT 源码?
为什么阅读 MyCAT 源码?深入了解数据库中间件,知其然知其所以然。 NIO 的实现 与 Netty 有什么特殊的地方? 分布式事务如何实现的? 内存管理 SQL 解析 等等功能点[ ] NIO [x] 分布式事务 [ ] MyCAT 主从 [x] 支持prepare预编译指令 [ ] 自增序列 30% [ ] 单库任意 Join Doing [x] 跨库2表 Join [ ] 跨库多表 Join [ ] SQL 解析 [ ] 读写分离 [ ] MySQL 主从.原创 2020-06-11 05:50:17 · 158 阅读 · 0 评论 -
Spring Boot 分库分表入门
1. 概述因为市面上已经非常不错的分库分表的资料,所以艿艿就不在尴尬的瞎哔哔一些内容。推荐阅读两个资料: 《Apache ShardingSphere 官方文档》 ShardingSphere 是目前最好用的数据库中间件之一,很多时候,我们使用它来实现分库分表,或者读写分离。 当然,它不仅仅能够提供上述两个功能,也能提供分布式事务、数据库治理。 《为什么几乎所有...原创 2020-04-23 23:37:32 · 1485 阅读 · 1 评论