前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL运维10-Mycat分库分表之一致性哈希分片

MySQL运维10-Mycat分库分表之一致性哈希分片

作者头像
Se7eN_HOU
发布2023-12-20 09:23:11
2450
发布2023-12-20 09:23:11
举报

一、一致性哈希分片

  一致性哈希分片的实现思路和我们之前介绍的水平分表中的取模分片是类似的。只不过取模分片,采用的是利用主键和分片数进行取模运算,然后根据取模后的结果,将数据写入到不同的分片数据中。但是这种分片方式有一个局限性就只能对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中创建

代码语言:javascript
复制
create table tb_hash (id varchar(255) primary key, name varchar(20));

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

代码语言:javascript
复制
insert into tb_hash (id, name) values ("1fc74326-9fd3-45f5-949e-33339f618dbf",'张三');

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

代码语言:javascript
复制
insert into tb_hash (id, name) values ("9f08bab8-4abe-43e4-97c5-41efcfa45e75",'李四');

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

代码语言:javascript
复制
insert into tb_hash (id, name) values ("7355535e-e1ce-421c-8715-29f41a91dca3",'王五');

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

代码语言:javascript
复制
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上进行数据查询,是全集查询的,一致性哈希分片是水平分库分表的一种。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、一致性哈希分片
  • 二、准备数据库
  • 三、配置schema.xml
  • 四、配置server.xml
  • 五、配置rule.xml
  • 六、一致性哈希分片测试
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档