DBLE

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

我怕爱的太早我们不能终老 提交于 2020-01-07 12:38:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原创作者: 钟悦 关于作者 钟 悦 - 资深DBLE用户 某宇宙行资深架构师,在大型重点项目中使用 DBLE。 常年与 MySQL 纠缠不清,经常运用技术处理大企业病的技术or非技术问题的一个挨踢从业者。 当分片索引不是纯整型的字符串时,只接受整型的内置 hash 算法是无法使用的。为此,stringhash 按照用户定义的起点和终点去截取分片索引字段中的部分字符,根据当中每个字符的二进制 unicode 值换算出一个长整型数值,然后就直接调用内置 hash 算法求解分片路由:先求模得到逻辑分片号,再根据逻辑分片号直接映射到物理分片。 用户需要在 rule.xml 中定义 partitionLength[] 和 partitionCount[] 两个数组和 hashSlice 二元组。 在 DBLE 的启动阶段,点乘两个数组得到模数,也是逻辑分片的数量 并且根据两个数组的叉乘,得到各个逻辑分片到物理分片的映射表(物理分片数量由 partitionCount[] 数组的元素值之和) 此外根据 hashSlice 二元组,约定把分片索引值中的第 4 字符到第 5 字符(字符串以 0 开始编号,编号 3 到编号 4 等于第 4 字符到第 5 字符)字符串用于 “字符串->整型” 的转换 在 DBLE 的运行过程中

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

北慕城南 提交于 2020-01-07 03:39:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 夜深人静的时候,打开 云音乐 ,点上一曲 攀登 ,带上真无线蓝牙耳机,瞬间燃到爆,键盘打字如飞倦意全无。 分片规则 这几天有人问我,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 标签定义

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

℡╲_俬逩灬. 提交于 2020-01-07 02:01:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 又是一个夜黑风高的晚上,带上无线耳机听一曲。突然很感慨一句话: 生活就像心电图,一帆风顺就证明你挂了。 就如同我们干运维的,觉得很简单的事情,有时候能干出 无限可能 。还是言归正传吧,这一次我们来说说stringhash分区算法。 1.hash分区算法 2.stringhash分区算法 3.enum分区算法 4.numberrange分区算法 5.patternrange分区算法 6.date分区算法 7.jumpstringhash算法 StringHash分区算法的配置 <tableRule name="rule_hashString"> <rule> <columns>name</columns> <algorithm>func_hashString</algorithm> </rule> </tableRule> <function name="func_hashString" class="StringHash"> <property name="partitionCount">3,2</property> <property name="partitionLength">3,4</property> <property name="hashSlice">0:3</property> <

微课程 | 第十三课《全局序列视频演示》

妖精的绣舞 提交于 2020-01-07 01:59:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> https://v.youku.com/v_show/id_XNDQ5Mjg1ODk0OA==.html 上一期我们介绍了全局序列的原理,接下来我们通过视频来演示一下全局序列功能。我们来看一下这两种全局序列是怎么工作的。 时间戳算法 首先是 snowflake ,也就是所谓时间戳算法。 https://v.youku.com/v_show/id_XNDQ5Mjg2MTA2NA==.html 默认的是直接使用时间戳算法,在实际的使用中先设置一下。在 server.xml 里面有一个叫 sequnceHandlerType 的属性。值为 2 表示时间戳类型,其它数值在文档中有详细介绍。我们去配置一个有全局序列的表。tb_hash_sharding_er2 表里面的 autoIncrement 属性为 true。target 是用来配置的全局序列的。然后 snowflake 算法还有一个工作节点,它标识了机器的 ID 。在配置文件当中分别有两行配置。这两行是一个联合主键,只要在不同机器上,联合值就不一样,那么就实现了标识。登录一个 dble 的流量端口。查看刚刚建的表是空的。再看一下这张表的结构,一共是三行。第一行数据类型是 bigint ,因为 snowflake 是一个 64 位的整数。64 位的整数超过了一般

微课程 | 第十四课《管理端介绍》

爷,独闯天下 提交于 2020-01-06 23:34:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> https://v.youku.com/v_show/id_XNDQ5NjE3NjE3Mg==.html 上一集我们进行了全局序列的演示,再介绍一下我们的管理端。 管理端介绍 DBLE 的管理端就是刚刚做的一大堆管理端的命令的 9066 端口,包括 create databases 命令等。说是管理端实际上是承担了管理和监控两个职责。比如说,select 或者 show 命令其实都是用来监控,来展示 DBLE 内部的是什么样子。比如说,kill /reload 都是控制的命令。下面我们通过管理端 reload 命令演示管理端能做什么,怎么做的。 https://v.youku.com/v_show/id_XNDQ5NjE3NzI0OA==.html 登录看下 show databases 的结果。我们通过修改 schema.xml 这种方式去看 reload 命令是怎么样热生效的。reload 命令实际上是热变更的一个操作。比如说现在把一个 testdb2 这样一个 schema 直接删掉。删掉以后有用户还在使用它,需要把用户里面的 testdb2 删掉避免依赖。现在是在修改本地的配置,其实 DBLE 用户的运行内存中是不知道这件事的。就类似我们修改 my.cnf,内存当中不知道一样。我们换一个管理端口来做一下

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

我们两清 提交于 2019-12-29 20:25:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原创: 钟悦 关于作者 钟悦 - 资深DBLE用户 某宇宙行资深架构师,在大型重点项目中使用 DBLE。 常年与 MySQL 纠缠不清,经常运用技术处理大企业病的技术or非技术问题的一个挨踢从业者。 根据用户定义的范围与分片节点映射文件,直接定位目标分片。 1. 用户在 rule.xml 中配置范围定义文件路径,文件中定义的各个范围被加载到内存中,形成一个映射表 2. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值会被提取出来,直接查映射表得到分片编号 与MyCat的类似分片算法对比 中间件 DBLE MyCat 分片算法种类 numberrange 分区算法 范围约定 区别 写具体的数值 可用K或M等数量替换付 K=1000 , M=10000 开发注意点 【分片索引】1. 整型数字(可以为负数),取值范围是长整型 【分片索引】2. 范围包含其起点和终点,例如,范围 1-100 包含 1 和 100(即 [1, 100]) 【分片索引】3. 如果范围与范围之间存在重叠(例如 1-100 和 100-200 重叠于 100),不会引起异常,会命中在范围配置文件mapFile中最先出现的那一个并按其执行 【分片索引】4. 不同范围可以映射到同一个分片上 0 - 99 = 0

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

大城市里の小女人 提交于 2019-12-29 20:18:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原创作者: 钟悦 关于作者 钟 悦 - 资深DBLE用户 某宇宙行资深架构师,在大型重点项目中使用 DBLE。 常年与 MySQL 纠缠不清,经常运用技术处理大企业病的技术or非技术问题的一个挨踢从业者。 与 hash 算法的最终效果一样,这个算法也是先求模得到逻辑分片号,再根据逻辑分片号直接映射到物理分片的一种散列算法。 1. 用户需要在 rule.xml 中给出 patternValue 来定义逻辑分片数量 2. 在 DBLE 的启动阶段,读取用户在 rule.xml 中给出的 mapFile,得到逻辑分片到物理分片的映射表 3. 在 DBLE 的运行过程中,用户访问使用这个算法的表时,WHERE 子句中的分片索引值会被提取出来进行求模,得到逻辑分片号 4. 再根据逻辑分片号,查映射表,直接得到物理分片号 与MyCat的类似分片算法对比 中间件 DBLE MyCat 分片算法种类 patternrange 分区算法 取模范围约束 两种中间件的取模范围分片算法使用上无差别 开发注意点 【分片索引】1. 必须是整型数字或整型数字的字符串(可以为负数) 【分片索引】2. 最大物理分片配置方法是,在 mapFile 文件中,为每一个逻辑分片指定单独的物理分片 例如: 0=0 1=1 ... 【分片索引】3.

分布式 | DBLE 分区算法系列总结

一曲冷凌霜 提交于 2019-12-29 20:00:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原创: 管长龙 我们已经通过之前的六篇文章,介绍了 DBLE 和 MyCat 常见的六种分片算法,那么我们来做个总结吧! DBLE 与 MyCat 对应分片算法名和异同 第七种 DBLE分片算法—jumpStringHash 除了以上六种常见的分片算法之外,DBLE 还独有一种分片算法:跳跃字符串算法。 具体配置如下: #rule.xml <function name="jumphash" class="jumpStringHash"> <property name="partitionCount">2</property> <property name="hashSlice">0:2</property> </function> partitionCont:分片数量 hashSlice:分片截取长度 该算法来自于 Google 的一篇文章《A Fast, Minimal Memory, Consistent Hash Algorithm》其核心思想是通过概率分布的方法将一个hash值在每个节点分布的概率变成1/n,并且可以通过更简便的方法可以计算得出,而且分布也更加均匀。 注意事项:分片字段值为NULL时,数据恒落在0号节点之上;当真实存在于mysql的字段值为not null的时候,报错 "Sharding

分布式 | dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因解析

匆匆过客 提交于 2019-12-29 19:56:32
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 背景 MyCat 对于字符串类型为分片字段的数据,有三种分片模式,分别是:模值 hash(求模法),jumpstringhash(跳跃法),一致性 hash(环割法) dble 对于 hash 算法选取方面,除了继承 MyCat 的模值 hash,并没有延续使用 MyCat 的一致性 hash,而是推荐使用性能更佳、均衡性更好的 “jumpstringhash” 算法。 介绍 下面对于环割法(一致性 hash)及跳跃法(jumpstringhash)的原理、特性及优缺点进行简单的介绍。 环割法(一致性 hash) 环割法的原理如下: 初始化的时候生成分片数量X × 环割数量 N 的固定方式编号的字符串,例如 SHARD-1-NODE-1,并计算所有 X×N 个字符串的所有 hash 值。 将所有计算出来的 hash 值放到一个排序的 Map 中,并将其中的所有元素进行排序。 输入字符串的时候计算输入字符串的 hash 值,查看 hash 值介于哪两个元素之间,取小于 hash 值的那个元素对应的分片为数据的分片。 特点 缺点 随机性强 初始化耗时长,内存消耗较高,需要进行大量数据排序,分片消耗高 跳跃法(jumpstringhash) 跳跃法的原理如下: 根据公式: 将数据落在每一个节点的概率进行平均分配。

微课程 | 第十二课《全局序列介绍》

廉价感情. 提交于 2019-12-27 14:08:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> https://v.youku.com/v_show/id_XNDQ4NDYyOTE5Mg==.html 上一期我们进行了 hint 的简单介绍和演示。我们的基本功能就介绍到这里,下面介绍一些进阶功能。 全局序列 我们先来介绍一下全局序列,我们DBLE目前支持四种全局序列。说是四种,如果按照他的内核区分是两种,只不过这两种方式放在不同的载体里面成为了四种。 我们先看这两种大概是一个什么概念。 snowflake 右上角这种是 snowflake 的算法是 twitter 最早提出的,通过 long 型数字分段实现的。DBLE 上面对它稍微有一些细节上的调整,但是不影响他的基本概念,他是通过时间戳做一个全局序列。首先他是一个 41 位的时间戳,大家可以先算一下 2 的 41 次方大概是多少?我们这边有个结论。这个数字大小应该足够 69 年的毫秒级别使用。对于我们一般的系统来说,能够存活 79 年应该不太可能。69 年其实已经够用了,计算机诞生也就刚过 70 年,然后我在每个毫秒中又有一个 12 位的序列号,12 位序列号就是 2 的 12 次方,就是 4096,也就是一毫米支持 4096 个并发。我们转换成 QPS 的话,就是乘以 1000,乘以 1000 以后应该是一个四百万的一个吞吐量