DBLE

分布式 | dble 中分布式时间戳方式的全局序列

微笑、不失礼 提交于 2020-08-16 16:46:27
作者:吴金玲 爱可生 dble 项目团队成员,主要负责 dble 相关的日常测试工作,擅长对 dble 中出现的问题进行排查。热爱测试工作,余生欲将测试工作进行到底。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 dble 中目前有 4 种方式的全局序列,分别是 MySQL offset-step 方式、时间戳方式、分布式时间戳方式、分布式 offset-step 方式全局序列。本文将会从测试的角度简单讲述一下分布式时间戳方式的全局序列的环境搭建及使用。 一、分布式时间戳方式的全局序列简介 此种方式提供一个基于 Zookeeper(以下简称 ZK)的分布式 ID 生成器,可以生成全局唯一的 63 位(首位恒为 0,保证全局序列为正数)二进制 ID。 正数的 63 位模式如下: 其中: a - e 为从高位到低位; a 为线程 id 的低 9 位值; b 为 5 位实例 id 值; 此值为配置文件 sequence_distributed_conf.properties 中的 INSTANCEID 值或者从 zookeeper 服务器获取的值; c 为 4 位数据中心 id 值; 即配置文件 sequence_distributed_conf.properties 中的 CLUSTERID 的值; d 为 6 位自增长值; e

分布式 | ddl 失败在 dble 中排查过程

别等时光非礼了梦想. 提交于 2020-08-14 08:22:19
作者:冒飞 爱可生 dble 项目测试组成员,负责 dble 相关测试工作,拥有多年数据库中间件测试经验,擅长故障排查及性能调优。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 思考一个问题: 当我们用 dble 执行一个 ddl hang 住时,我们该如何下手,如何找到这条 ddl hang 住的原因?是我们自己的操作导致还是踩中了 dble 的 bug ? 下面我们从一个简单的场景着手来分析这个问题: 场景:对 shanging_4_t1 这张表执行 alter,结果 hang 住了 分析第一步:查看 dble 日志看是否有报错? 结果找到这个告警,报错信息跟我们观察到的现象是一致的。 分析第二步:查看这个日志的上下文,找出这个阶段 dble 都做了什么,问题可能出现在哪个阶段? 如果日志信息比较多,我们可以简单删选一下。 命令:less dble.log|grep DDL 从上面的信息我们大概可以看出,这个语句要发往 4 个分片,且这条 ddl 在 dble 执行中包括 2 个步骤。 步骤一:测试连接可用性 步骤二:真正下发 ddl 日志中可以很明显的看出,步骤一验证连接都成功完成了,但其中一个节点执行语句的状态一直处于 start。 根据提示出问题的 connection 为 23,可以定位到问题所在的 dataNode

分布式 | DBLE 之 SQL 解析

老子叫甜甜 提交于 2020-04-28 19:54:00
作者:路路 热爱技术、乐于分享的技术人,目前主要从事数据库相关技术的研究。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 数据库中间件与数据库有什么区别? 个人认为除了没做数据存储,其他的功能数据库中间件几乎一样不少,比如 SQL 解析、结果集处理、协议实现等。 SQL 解析的定义 今天我们主要来谈谈 SQL 解析,SQL 的全称为 Structured Query Language,即结构化查询语言,既然定义为语言,那其实它和任何其他语言都是平等的。所以对 SQL 的解析完全等同于对任何一门语言的解析,对编程语言的解析这就涉及到编译原理相关知识了。 想要解析一门语言,通常需要具备以下工具: 词法分析器(Lexer):负责解析基本的词法,也就是将字符序列转换为单词(Token)序列的过程。 语法分析器(Parser):将词法分析器解析出的单词(Token)序列,进一步构建成有语义的数据结构,比如抽象语法树。 访问器(Visitor):能够对语法分析器生成的抽象语法树进行遍历,获取需要的信息。 上面的定义可能大家看完还有点懵懂,这里我通过一个实际的例子来让大家有个更具体的认识。 案例解析 原始 SQL 如下: SELECT id, name FROM test WHERE ID > 2 LIMIT 2; 下面我们来解析这个 SQL

分布式 | DBLE LOAD DATA 功能实现解析

痞子三分冷 提交于 2020-03-12 17:26:37
作者:路路 热爱技术、乐于分享的技术人,目前主要从事数据库相关技术的研究。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 1.概述 本篇文章主要介绍 DBLE LOAD DATA 大规模数据导入功能的实现,包括方案设计、源码解读。 下面就让我们一起来探秘 DBLE 是如何实现该功能的吧! 2.方案设计 LOAD DATA 为 MySQL 提供的从文本文件导入数据到表的语法,作为数据库中间件,当然也需要实现对应的功能,来满足用户的导入数据需求。 DBLE 对该功能的实现其实就是直接模拟了 MySQL 对 LOAD DATA 命令相应的处理协议。当然作为数据库中间件,还需要处理相应数据的存储、数据路由情况以及与后端 MySQL 的交互等方面的逻辑。 下图即为 DBLE 对 LOAD DATA 处理的整体流程: 3.源码解读 DBLE 与 LOAD DATA 功能实现相关的类其实主要有两个,一个是 ServerLoadDataInfileHandler 类,一个是 LoadDataUtil 类, ServerLoadDataInfileHandler 类主要处理的是与客户端交互的逻辑,而 LoadDataUtil 类主要处理的是与后端 MySQL 交互的逻辑。 下面我们就从客户端发送命令到 DBLE 处理,最后到 DBLE 与后端

数据库中间件分片算法之hash

寵の児 提交于 2020-02-27 17:05:24
前言 夜深人静的时候,打开云音乐,点上一曲攀登,带上真无线蓝牙耳机,瞬间燃到爆,键盘打字如飞倦意全无。 分片规则 这几天有人问我,dble和MyCat到底有什么不同。其实dble作为MyCAT的同门,吸收了MyCat的精华,同时也相应的做了一些减法。只支持MySQL显得更加的纯粹。所以选择对比学习两者我觉得挺好。 前面我们学习了schema.xml文件的配置,我们能独立的把逻辑库和逻辑表搭建起来,让数据表跟随我们的定义规则(取模)进行分布。今天我们介绍具体的分片算法。dble相对于mycat来说,是做了一些减法的。比如一致hash算法就没有,而是使用了jumpstringhash代替了一致性hash。具体原因可以参考文章dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因 hash分区算法 stringhash分区算法 enum分区算法 numberrange分区算法 patternrange分区算法 date分区算法 jumpstringhash算法 HASH分区算法 Hash分区算法是一种比较典型而且常用的算法。要使用HASH分区算法需要在rule.xml中定义两个部分。 分区规则定义 如下所示,使用tableRule标签定义,name对应的是规则的名字,而rule标签中的columns则对应的分片字段,这个字段必须和表中的字段一致

分布式 | DBLE Release Notes 详细解读 2.19.11.0

左心房为你撑大大i 提交于 2020-02-27 09:05:40
DBLE 2.19.11.0 来了,全局表功能重置!!! 伴随着各行各业的节后复工,DBLE 2.19.11 也在今天顺利发版,不期而至! 以下对 DBLE 2.19.11.0 Release Notes 的进行详细解读,文章主要分为以下四部分内容: 一、DBLE 项目介绍 二、新版本概况 二、主要更新解读 三、完整 Release Notes 一、DBLE 项目介绍 DBLE — 企业级开源分布式中间件 ,江湖人送外号 “MyCat Plus”;以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持。 DBLE 官方项目: https://github.com/actiontech/dble 如对源码有兴趣或者需要定制的功能的可以通过源码编译安装 DBLE 官方文档(已更新): https://actiontech.github.io/dble-docs-cn 可以详细了解 DBLE 的背景和应用场景,本文未涉及到的细节都可在官方文档获得 新版本 DBLE 下载地址及 Release Notes: https://github.com/actiontech/dble/releases 官方课程 点击学习 《DBLE 快速上手》 实操视频 + 图文稿! 点击学习 《DBLE 公开课》 进阶课程 Tips:建议下载最新的 Releases 版本,下载 tar

技术分享 | Jump Consistent Hash 原理解析(上篇)

≯℡__Kan透↙ 提交于 2020-02-27 01:02:21
作者:傅文辉 之前爱可生开源社区公众号发表了 dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因解析 , 阐述了跳跃法相对环割法的性能优势。很多读者表示对其中"跳跃法的原理"不是很理解,本文就来详细阐述一下。 一致性哈希 首先,我们的需求是,将数据(key-value pair)分布在多个节点上。这点可以简单的用取模实现, 节点 key 1 1 4 7 10 2 2 5 8 11 3 3 6 9 12 然而,当增加新节点时,数据将发生大规模转移: 节点 key 1 (1) 5 9 2 (2) 6 10 3 (3) 7 11 4 4 8 12 一致性哈希的主要目的是,在节点数量发生变更时,只需要在节点间移动少量数据,而不是"全部洗牌"。 除了经典的环割法一致性哈希外,Google 发表了另一种实现简洁且高效的跳跃法一致性哈希《A Fast, Minimal Memory, Consistent Hash Algorithm》(文末附链接) 在爱可生开源数据库中间件 dble 中,关于 jump consistent hash 的配置方法详见 dble 官方手册中"跳增字符串算法"的部分(文末附链接)。 基础实现 与原始论文不同, 本文节点(又称 bucket)从 1 开始编号,而非从 0 开始。 先考虑只有一个节点的情况

微课程 | 第十七课《进阶功能 Trace》

北战南征 提交于 2020-02-26 11:29:53
https://v.youku.com/v_show/id_XNDUxMzA0MDgxMg==.html 这一节我们直接通过视频来向大家展示一下 trace 功能。 trace 功能开启 先登陆一个流量端口,然后通过一个 set trace=1 语句去把 trace 功能打开。 https://v.youku.com/v_show/id_XNDUxMzA0NzI1Ng==.html trace 功能的好处 select * from 某表,类似于 MySQL 的 show profile 语句,可以看具体执行语句在下发的各个环节耗时是什么样的。然后通过 show trace 就能看到耗时的情况了。前面是过程、开始和结束时间,后面是执行或者依赖的语句,类似 explain 的一个效果。 可以看到操作有 SQL 解析、路由、准备下发、下发执行、收集回收结果、包括写回到 client端等等,这样一个时间的记录。如果我是多个节点的话,通过 show trace 查看多个 SQL 执行的时间和多个结果集回收的时间。可以看到它们开始时间其实是一样的,它在下发多个节点时是并发下发的,回来的时候是各自回来的。这是我们的 trace 的功能。 我们可以通过 trace 功能去追踪性能瓶颈到底发生在哪里。 我们简单把其中一部分图,不一定是刚才那个图,拿回来我们来做一个深入的分析。这样 trace

微课程 | 第十六课《进阶功能 Explain》

岁酱吖の 提交于 2020-02-26 05:02:53
https://v.youku.com/v_show/id_XNDUwNjY5Njc5Mg==.html 大家好,往期我们介绍了 Explain 的使用,这期我们详细介绍一下 Explain 功能。 Explain 可以用来分析分布式查询计划,看到下发的 SQL 的结果。除了这个功能之外,我们还能做一些 SQL 的调优。比如说这样一个例子。 有三张表,表的配置不是很重要,重要的是下面这三个 SQL。这三个 SQL 大家如果仔细看的是第二层,唯一不一样就是 abc 的顺序。一个是 a 表 b 表 c 表,一个是 c 表 a 表 b 表,一个是 b 表 c 表 a 表。如果它们的结果是完全一样的,在 MySQL 当中的其实选哪种都没有关系,完全等价。但是在 dble 当中是不是这样?我们通过 explain 来看一下。 这是我们 Explain 执行第一条 SQL 的结果。结果比较长,就把长的先放一下。这样一个解表集就是把三张表的三个 SQL 下发下去。我们可以看到前两个 SQL 是不带 order 的,最后一个 SQL 是带 order by 的。看一下查询结果,因为这样看起来比较抽象,所以我们通过引用关系把它画成一棵树,上面是原句。 A 其实三个有 join,通过左契合的状态,A 表先和 B 表 Join,然后结果在和 C 表 Join。从右边的图也可以看的出来,我们按照表的顺序

分布式 | MyCat如何迁移到DBLE之分片算法对比解析:date分片

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-09 22:52:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原创: 钟悦 关于作者 钟悦 - 资深DBLE用户 某宇宙行资深架构师,在大型重点项目中使用 DBLE。 常年与 MySQL 纠缠不清,经常运用技术处理大企业病的技术or非技术问题的一个挨踢从业者。 以每24小时作为一份时间(而非自然日),根据用户的配置有两种工作模式**:带状模式**中,用户仅定义开始日期时,从开始日期(含)开始,每份时间1个分片地无限增加下去; 环状模式 中,用户定义了开始日期和结束日期时,以结束日期(含)和开始日期(含)之间的时间份数作为分片总数(分片数量固定),以类似取模的方式路由到这些分片里。 1. DBLE 启动时,读取用户在 rule.xml 配置的 sBeginDate 来确定起始时间 2. 读取用户在 rule.xml 配置的 sPartionDay 来确定每个 MySQL 分片承载多少天内的数据 3. 读取用户在 rule.xml 配置的 dateFormat 来确定分片索引的日期格式 4. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值(字符串),会被提取出来尝试转换成 Java 内部的时间类型 5. 然后求分片索引值与起始时间的差,除以 MySQL 分片承载的天数,确定所属分片 1. DBLE 启动时,读取用户在 rule.xml