一、一致性哈希分片

  一致性哈希分片的实现思路和我们之前介绍的水平分表中的取模分片是类似的。只不过取模分片,采用的是利用主键和分片数进行取模运算,然后根据取模后的结果,将数据写入到不同的分片数据中。但是这种分片方式有一个局限性就只能对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. 例子:统计电影类型的个数,以及用bar绘制出来表示

    import pandas as pdimport numpy as npfrom matplotlib import pyplot as plt#获取各种电影类型的数量file='./IMDB-Mo ...

  2. Solution -「CF 888E」Maximum Subsequence

    Description Link. 给一个数列和 \(m\),在数列任选若干个数,使得他们的和对 \(m\) 取模后最大. Solution 记录一下犯下的一个 nt 错误. 首先我们有一个显然的 D ...

  3. 解密TCP连接断开:四次挥手的奥秘和数据传输的安全

    TCP 连接断开 在当今数字化时代,互联网已经成为了人们生活中不可或缺的一部分.而在互联网的基础之上,TCP协议扮演着关键的角色,它负责着数据在网络中的可靠传输.在TCP连接的建立过程中,我们已经了解 ...

  4. 从MVC到DDD,该如何下手重构?

    作者:付政委 博客:bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主小傅哥.多年的 DDD 应用,使我开了技术的眼界! MVC 旧工程腐化严重,迭代成本太高 ...

  5. WEBGpu最佳实践之BindGroup

    介绍 在WebGPU中,资源通过GPUBindGroup结构传递给着色器,与支持它的布局定义(GPUBindGroupLayout和GPUPipelineLayout)以及着色器中绑定组的声明一起.这 ...

  6. K8S - Jenkins在K8S下的持续集成

    准备nfs网络存储 提前安装好nfs服务 [root@master ~]# yum -y install nfs-utils rpcbind [root@master ~]# systemctl st ...

  7. 一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel

    前言 日常工作中经常与数据打交道的同学肯定会难以避免对Excel的一些数据操作如导入.导出等,但是当对一些大数据量操作Excel时经常会遇到一个常见的问题内存溢出.今天给大家推荐一个简单.高效.低内存 ...

  8. 【Spring】AOP实现原理

    注册AOP代理创建器 在平时开发过程中,如果想开启AOP,一般会使用@EnableAspectJAutoProxy注解,这样在启动时,它会向Spring容器注册一个代理创建器用于创建代理对象,AOP使 ...

  9. 用结构化思维解一切BUG(1):核心思路

    面对万"卷"世界,有人选择拼命学习新技术,解决眼前的.点状问题:有人提升思维层级,解决未来的.系统问题.您选择什么? 背景 我有10多年编程经验和研发管理经历,虽很久不写代码,但有 ...

  10. [C++]线段树 区间修改 单点查询

    线段树 区间修改 单点查询 请先阅读上一篇Bolg 算法思想 由于是区间修改 那就把下放的每一个线段给套上一层标记 来表达增加的值 单点查询就把那些标记穿起来就行了 当然 还要加上那原来的值 来举个例 ...