一、一致性哈希分片

  一致性哈希分片的实现思路和我们之前介绍的水平分表中的取模分片是类似的。只不过取模分片,采用的是利用主键和分片数进行取模运算,然后根据取模后的结果,将数据写入到不同的分片数据中。但是这种分片方式有一个局限性就只能对id是整形的数据使用,如果id是个uuid类型这个的非整形的字段,就没有办法使用取模的方式进行分片了。这时候就可以采用一致性hash算法分片,其分片的原则是根据id 哈希运算之后,然后再决定写入到哪个分片,所以我认为一致性哈希的分表方式是对取模分片的补充。

  一致性哈希分片是将主键采用哈希算法,将数据分布到不同的数据库节点上,以实现分布式存储和查询。

  

  说明1:一致性哈希的规则是 rule="sharding-by-murmur"

  说明2:在function标签中只需要修改count属性的值即可,即有几个数据节点就改为几。

二、准备数据库

  

  说明1:在三个数据节点上都先创建好hash_db数据库

三、配置schema.xml

  

  说明1:逻辑库为hash_db  

  说明2:逻辑表为tb_hash

  说明3:分片规则为 rule="sharding-by-murmur"

  

  

  说明4:dn10对应的是dbhost1即192.168.3.90分片

  说明5:dn11对应的是dbhost2即192.168.3.91分片

  说明6:dn12对应的是dbhost3即192.168.3.92分片

四、配置server.xml

  

  说明1:增加 root 用户对 hash_db 的操作权限

五、配置rule.xml

  

  说明1:在一致性哈希分片的rule.xml中name=count这个属性,要修改为我们指定的3个数据节点

六、一致性哈希分片测试

  首先重启Mycat

  

  登录Mycat

  

  查看逻辑库和逻辑表

  

  这里的tb_hash只是逻辑库,而在MySQL中还并没有tb_hash这个表,需要在Mycat中创建

create table tb_hash (id varchar(255) primary key, name varchar(20));

  

  插入一条数据,然后查看数据节点中对应的数据变化

insert into tb_hash (id, name) values ("1fc74326-9fd3-45f5-949e-33339f618dbf",'张三');

  

  说明1:id经过hash算法之后,数据存在了192.168.3.92数据节点上了,继续插入数据测试。

insert into tb_hash (id, name) values ("9f08bab8-4abe-43e4-97c5-41efcfa45e75",'李四');

  

  说明2:id经过hash算法之后,数据存在了192.168.3.91数据节点上了,继续插入数据测试

insert into tb_hash (id, name) values ("7355535e-e1ce-421c-8715-29f41a91dca3",'王五');

  

  说明3:id经过hash算法之后,数据存在了192.168.3.90数据节点上了,继续插入三条数据测试

insert into tb_hash (id, name) values ("87558171-e5ce-4b1d-8cde-d911a625b8c9",'赵六');
insert into tb_hash (id, name) values ("596a6d86-6c79-4ffa-8de4-db0a537713a5",'侯七');
insert into tb_hash (id, name) values ("6fc23dd4-9733-4511-9427-bdeea9383b50",'孙八');  

  

  

  

  

  说明4:一致性hash会根据id键hash运算之后决定写入到哪个分片,如果数据量足够大的话,其会尽量保证数据的负载均衡,但不是绝对的,因为这取决于id哈希运算后的结果。

  

  说明5:在Mycat上进行数据查询,是全集查询的,一致性哈希分片是水平分库分表的一种。

MySQL运维10-Mycat分库分表之一致性哈希分片的更多相关文章

  1. Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解

    一.mycat的安装 环境准备:准备一台虚拟机192.168.152.128 1. 下载mycat cd /softwarewget http:-linux.tar.gz 2. 解压mycat tar ...

  2. MySQL+MyCat分库分表 读写分离配置

    一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : cor ...

  3. Mysql系列四:数据库分库分表基础理论

    一.数据处理分类 1. 海量数据处理,按照使用场景主要分为两种类型: 联机事务处理(OLTP) 面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果. ...

  4. 《MyCat分库分表策略详解》

    在我们的项目发展到一定阶段之后,随着数据量的增大,分库分表就变成了一件非常自然的事情.常见的分库分表方式有两种:客户端模式和服务器模式,这两种的典型代表有sharding-jdbc和MyCat.所谓的 ...

  5. 3.Mysql集群------Mycat分库分表

    前言: 分库分表,在本节里是水平切分,就是多个数据库里包含的表是一模一样的. 只是把字段散列的分到不同的库中. 实践: 1.修改schema.xml 这里是在同一台服务器上建立了4个数据库db1,db ...

  6. MyCat | 分库分表实践

    引言 先给大家介绍2个概念:数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式. 切分模式 一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之 ...

  7. mycat 分库分表

    单库分表已经在上篇写过了,这次写个分库分表,不同在于配置文件上的一点点不同 <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> &l ...

  8. MyCat分库分表入门

    1.分区 对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm. 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后 ...

  9. 分布式数据库中间件 MyCat | 分库分表实践

    MyCat 简介 MyCat 是一个功能强大的分布式数据库中间件,是一个实现了 MySQL 协议的 Server,前端人员可以把它看做是一个数据库代理中间件,用 MySQL 客户端工具和命令行访问:而 ...

  10. Mycat分库分表(一)

    随着业务变得越来越复杂,用户越来越多,集中式的架构性能会出现巨大的问题,比如系统会越来越慢,而且时不时会宕机,所以必须要解决高性能和可用性的问题.这个时候数据库的优化就显得尤为重要,在说优化方案前,先 ...

随机推荐

  1. 一次Python本地cache不当使用导致的内存泄露

    背景 近期一个大版本上线后,Python编写的api主服务使用内存有较明显上升,服务重启后数小时就会触发机器的90%内存占用告警,分析后发现了本地cache不当使用导致的一个内存泄露问题,这里记录一下 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (88)-- 算法导论8.3 1题

    一.用go语言,参照图 8-3 的方法,说明 RADIX-SORT在下列英文单词上的操作过程:COW,DOG,SEA,RUG,ROW,MOB, BOX, TAB, BAR, EAR,TAR, DIG, ...

  3. 用Rust手把手编写一个Proxy(代理), 动工

    用Rust手把手编写一个Proxy(代理), 动工 项目 ++wmproxy++ gitee 传送门 github 传送门 设计流程图 flowchart LR A[客户端] -->|Http| ...

  4. Solution -「洛谷 P3267」「JLOI 2016」「SHOI 2016」侦察守卫

    Description Link. 给你一棵树,放置守卫在某个点上面需要一定代价和一定的有效范围.让你覆盖若干指定点,求最小代价 Solution 算法标签: $\ \ \ \ \ \ \ \ \ $ ...

  5. C++中::和:, .和->的作用和区别

    符号::和:的作用和区别 ::是作用域运算符,A::B表示作用域A中的-名称B,A可以是名字空间.类.结构: 类作用域操作符 "::"指明了成员函数所属的类.如:M::f(s)就表 ...

  6. asp.net mvc Core 网页错误提示:An unhandled exception occurred while processing the request.处理请求时发生未处理的异常。

    网页错误提示: An unhandled exception occurred while processing the request. InvalidOperationException: The ...

  7. 爬虫系列——requests

    文章目录 一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,reques ...

  8. Oracle存储函数写法及调用

    1.右键导航创建函数界面 2.返回值FunctionResult可自定义,当函数有输出函数时可不传数据,但需要设置返回(当提示未限定返回长度时,如代码示例设置255长度皆可): -------使用函数 ...

  9. Ubuntu 14.04解决登录界面无限循环的方法

    在Ubuntu下配置Android的环境时,想像在Windows中那样在终端中直接启动adb,以为Linux和Windows一样,将adb的路径添加到环境变量中,于是将adb的路径也export到/e ...

  10. 使用Github Copilot完成代码编写

    上篇文章,我们使用VSCode创建了T.Global解决方案和两个类库工程,接下来我们使用Github Copilot完成代码编写 先说以下业务需求: 提供一个公共的本地化组件,支持对数字.货币.时间 ...