Sharding-JDBC
文章平均质量分 92
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
读写分离中间件案例
读写分离中间件转载 2022-10-23 12:15:05 · 547 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— 分布式事务(一)之最大努力型
1. 概述数据库表分库后,业务场景下的单库本地事务可能变成跨库分布式事务。虽然我们可以通过合适的分库规则让操作的数据在同库下,继续保证单库本地事务,这也是非常推崇的,但不是所有场景下都能适用。如果这些场景对事务的一致性有要求,我们就不得不解决分布式事务的“麻烦”。分布式事务是个很大的话题,我们来看看 Sharding-JDBC 对她的权衡:Sharding-JDBC由于性能方面的考量,决定不支持强一致性分布式事务。我们已明确规划线路图,未来会支持最终一致性的柔性事务。Sharding-J原创 2020-06-13 01:30:24 · 1081 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— JDBC实现与读写分离
1. 概述本文主要分享JDBC与读写分离的实现。为什么会把这两个东西放在一起讲呢?客户端直连数据库的读写分离主要通过获取读库和写库的不同连接来实现,和 JDBC Connection 刚好放在一块。OK,我们先来看一段 Sharding-JDBC 官方对自己的定义和定位Sharding-JDBC定位为轻量级java框架,使用客户端直连数据库,以jar包形式提供服务,未使用中间层,无需额外部署,无其他依赖,DBA也无需改变原有的运维方式,可理解为增强版的JDBC驱动,旧代码迁移成本几乎为...原创 2020-06-13 01:12:36 · 449 阅读 · 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 · 837 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 执行
1. 概述越过千山万水(SQL 解析、SQL 路由、SQL 改写),我们终于来到了SQL 执行。开森不开森?!本文主要分享SQL 执行的过程,不包括结果聚合。《结果聚合》东半球第二良心笔者会更新,关注微信公众号【芋道源码】完稿后第一时间通知您哟。绿框部分SQL 执行主流程。Sharding-JDBC 正在收集使用公司名单:传送门。???? 你的登记,会让更多人参与和使用 Sharding-JDBC。传送门Sharding-JDBC 也会因此,能够覆盖更多的业务场景。传送门登记吧,原创 2020-06-13 00:55:29 · 319 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— 分布式主键
1. 概述本文分享 Sharding-JDBC分布式主键实现。官方文档《分布式主键》对其介绍及使用方式介绍很完整,强烈先阅读。下面先引用下分布式主键的实现动机:传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的支持,比如MySQL的自增键。对于MySQL而言,分库分表之后,不同表生成全局唯一的Id是非常棘手的问题。因为同一个逻辑表内的不同实际表之间的自增键是无法互相感知的,这样会造成重复Id的生成。我们当然可以通过约束表生成键的规则来达到数据的不重复,但是.原创 2020-06-13 00:46:41 · 298 阅读 · 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 · 2858 阅读 · 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 · 695 阅读 · 0 评论 -
Sharding-JDBC 源码分析 —— SQL 路由(一)之分库分表配置
1. 概述????《SQL 解析》已经告于段落,我们要开始新的旅程:《SQL 路由》。相比SQL解析,路由会容易理解很多,骗人是小????。整个系列预计会拆分成三小篇文章:《分库分表配置》 《分表分库路由》 《Spring与YAML配置》第一、二篇会在近期更新。第三篇会在《SQL 改写》、《SQL 执行》完成后进行更新。????改写和执行相对有趣。????道友,您看,逗比博主**“很有规划”**,是关注公众号一波【芋道源码】还是分享朋友圈。阅读本文之前,建议已经读过官方相关文章:《原创 2020-06-12 01:37:04 · 352 阅读 · 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 · 322 阅读 · 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 · 529 阅读 · 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 · 411 阅读 · 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 · 1035 阅读 · 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 · 531 阅读 · 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 · 468 阅读 · 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 · 280 阅读 · 0 评论 -
Spring Boot 分库分表入门
1. 概述因为市面上已经非常不错的分库分表的资料,所以艿艿就不在尴尬的瞎哔哔一些内容。推荐阅读两个资料: 《Apache ShardingSphere 官方文档》 ShardingSphere 是目前最好用的数据库中间件之一,很多时候,我们使用它来实现分库分表,或者读写分离。 当然,它不仅仅能够提供上述两个功能,也能提供分布式事务、数据库治理。 《为什么几乎所有...原创 2020-04-23 23:37:32 · 1417 阅读 · 1 评论