美文网首页
mycat分片(固定分片hash算法)

mycat分片(固定分片hash算法)

作者: agang_19 | 来源:发表于2020-07-20 18:04 被阅读0次

实现方式:

该算法类似于十进制的求模运算,但是为二进制的操作,例如,取 id 的二进制低 10 位 与 1111111111 进行 & 运算。

优点

此算法的优点在于如果按照10进制取模运算,在连续插入1-10时候1-10会被分到1-10个分片,增大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务控制难度。

注意事项

分区长度:默认为最大2^n=1024 ,即最大支持1024分区
count,length两个数组的长度必须是一致的。
1024 = sum((count[i]*length[i])). count和length两个向量的点积恒等于1024

vim /usr/local/mycat/conf/schema.xml (配置分片)

image.png

vim /usr/local/mycat/conf/rule.xml(配置分片规则)

        <tableRule name="rule1">
                <rule>
                        <columns>id</columns>
                        <algorithm>func1</algorithm>
                </rule>
        </tableRule>

        <function name="func1" class="io.mycat.route.function.PartitionByLong">
                <property name="partitionCount">1,1,1</property>
                <property name="partitionLength">100,412,512</property>
        </function>

算法:1 * 100+1 * 412+1 * 512=1024;
上面columns 标识将要分片的表字段,algorithm 分片函数,partitionCount 分片个数列表,partitionLength 分片范围列表

准备数据

mysql> CREATE TABLE mycat.`PartitionByLong` (
    ->   `id` int NOT NULL AUTO_INCREMENT,
    ->   `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
    ->   `database` varchar(255)  CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
    ->   PRIMARY KEY (`id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci comment '固定哈希算法';

mysql> insert into  mycat.PartitionByLong (id, content, `database`) values (3, 'content', database());
Query OK, 1 row affected (0.01 sec)

insert into  mycat.PartitionByLong (id, content, `database`) values (512, 'content', database());
Query OK, 1 row affected (0.01 sec)
insert into  mycat.PartitionByLong (id, content, `database`) values (1280, 'content', database());
Query OK, 1 row affected (0.00 sec)
mysql> insert into  mycat.PartitionByLong (id, content, `database`) values (3, 'content', database());
Query OK, 1 row affected (0.01 sec)
mysql> insert into  mycat.PartitionByLong (id, content, `database`) values (512, 'content', database());
Query OK, 1 row affected (0.01 sec)

分析结果

上面插入的数据低10位和 1111111111 求*运算,算出最终的指

十进制 二进制 1111111111求& 最终十进制 节点范围
1280 1 01000 00000 1000 00000 256 101-512(节点2)
1833 1 11001 01001 11001 01001 809 513-1024(节点3)
3 11 1111111111求& 3 1-100(节点1)

查询结果,完全符合预期

image.png

相关文章

  • mycat分片(固定分片hash算法)

    实现方式: 该算法类似于十进制的求模运算,但是为二进制的操作,例如,取 id 的二进制低 10 位 与 11111...

  • ShardingSphere官网及总结

    中文文档 分片 分片算法 精确分片算法 范围分片算法 复合分片算法 Hint分片算法 分片策略 标准分片策略 复合...

  • MyCat路由规则分析(十)

    一致性hash 一般来说,基于hash算法的分片中,算法内部是把记录分片到一种叫做“bucket”(hash桶)的...

  • MyCat路由规则分析(二)

    固定分片hash规则 在一些需要批量插入连续记录的交易中,如果使用普通的取模算法进行分片的话,很容易造成跨库事务,...

  • patternrange -> PartitionByPa

    与hash算法的最终效果一样,这个算法也是先求模得到逻辑分片号,再根据逻辑分片号直接映射到物理分片的一种散列算法。...

  • 结合开源项目了解分布式系统原理(2)

    1.redis集群 数据分片规则: Redis Cluster使用的时hash slot算法通过采用固定节点数量和...

  • 【mongoDB】mongoDB分片策略

    chunk切分是根据分片策略进行实施的,分片策略的内容包括分片键和分片算法。 当前,MongoDB支持两种分片算法...

  • mycat分片(枚举分片)

    分片枚举 通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区...

  • mycat分片

    1. 修改配置文件 (1) 修改schema.xml, 具体的配置文件如下: table对应具体的物理表,data...

  • MyCAT实现分片

    1.1 Mycat分片 1.1.1 需求 把商品表分片存储到三个数据节点上。 1.1.2 安装环境 mysql节点...

网友评论

      本文标题:mycat分片(固定分片hash算法)

      本文链接:https://www.haomeiwen.com/subject/amxdkktx.html