读《分布式数据库架构及企业实践》---笔记四

Mycat分片规则详解
    ER关系分片表
        ER模型是实体关系模型,广泛采用概念模式设计方法,基本元素是实体、关系和属性。Mycat创新性的将它引入数据切分规则中,使得有互相依赖的表能够按照某一规则切分到相同节点上,避免跨库Join关联查询。
    
    分片规则rule.xml文件详解
        1.Function标签
            <function name="rang-mod" class="org.opencloudb.route.function.PartitionByRangeMod">
                <property name="mapFile">partition-range-mod.txt</property>
            </function>
            解读:name属性指定算法的名称,在该文件中唯一。
                  class属性对应具体的分片算法,需要指定算法的具体类。
                  property属性根据算法的要求指定。
        2.tableRule标签
            <tableRule name="auto-sharding-rang-mod">
                <rule>
                        <columns>id</columns>
                        <algorithm>rang-mod</algorithm>
                </rule>
            </tableRule>
            解读:name属性指定分片唯一算法的名称。
                  rule属性指定算法的具体内容,包括columns和algorithm两个属性。
                  columns属性指定对应表中用于分片的列名。
                  algorithm属性对应function中指定的算法的名称。
    
    取模分片
        配置如下:
            <tableRule name="mod-long">
                <rule>
                        <columns>id</columns>
                        <algorithm>mod-long</algorithm>
                </rule>
            </tableRule>
            <function name="mod-long" class="org.opencloudb.route.function.PartitionByMod">
                <!-- how many data nodes -->
                <property name="count">3</property>
            </function>
        配置说明:
            columns用来标识将要分片的表字段。
            algorithm指定分片函数与function对应。
        此分片算法id根据十进制求模计算,相比固定的分片hash,这种分片算法在批量插入时会增加事务一致性的难度。
    
    枚举分片
        配置如下:
            <tableRule name="sharding-by-intfile">
                <rule>
                        <columns>sharding_id</columns>
                        <algorithm>hash-int</algorithm>
                </rule>
            </tableRule>
            <function name="hash-int"
                class="org.opencloudb.route.function.PartitionByFileMap">
                <property name="mapFile">partition-hash-int.txt</property>
                <property name="type">0</property>
                <property name="defaultNode">0</property>
            </function>
        配置说明:
            columns指定分片的表列名。
            algorithm指定分片函数的名称。
            type的默认值为0,0表示integer,非零表示String。
            所有的节点配置都是从0开始的,0代表节点1.
            defaultNode默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点。
            默认节点的作用,枚举分片时,如果碰到不是别的枚举值,就让它路由到默认节点。
            如果不配置默认节点(defaultNode值小于0表示不配置默认节点),则碰到识别的枚举值就会报错。
    
    范围分片
        配置如下:
            <tableRule name="auto-sharding-long">
                <rule>
                        <columns>id</columns>
                        <algorithm>rang-long</algorithm>
                </rule>
            </tableRule>
            <function name="rang-long"
                class="org.opencloudb.route.function.AutoPartitionByLong">
                <property name="mapFile">autopartition-long.txt</property>
                <property name="defaultNode">0</property>
            </function>
            autopartition-long.txt的配置如下:
                # range start-end ,data node index
                # K=1000,M=10000.
                0-500M=0
                500M-1000M=1
                1000M-1500M=2
        配置说明:
            columns指定分片的表列名。
            algorithm指定分片函数的名称。
            rang-long函数中的mapFile代表配置文件的路径。
            defaultNode为超出范围后的默认节点。
    
    范围求模算法:
        该算法为先进行范围分片,计算出分片组,组内再求模,综合了范围分片和求模分片的优点。
        配置如下:    
            <tableRule name="auto-sharding-rang-mod">
                <rule>
                        <columns>id</columns>
                        <algorithm>rang-mod</algorithm>
                </rule>
            </tableRule>
            <function name="rang-mod" class="org.opencloudb.route.function.PartitionByRangeMod">
                <property name="mapFile">partition-range-mod.txt</property>
                <property name="defaultNode">0</property>
            </function>
        配置说明:
            rang-mod函数中的mapFile代表配置文件的路径。
    
    固定分片hash算法
        类似于十进制的求模运算,但是为二进制的操作,取id的二进制低10位,即id二进制&1111111111.
        此算法优点在于如果按照十进制取模运算,则在连续插入1~10时,1~10会被分到·~10个分片,增大了插入事务的控制难度。而此算法根据二进制则可能会分到连续的分片,降低了插入事务的控制难度。
        配置如下:    
            <tableRule name="rule1">
                <rule>
                        <columns>id</columns>
                        <algorithm>func1</algorithm>
                </rule>
            </tableRule>
            <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
                <property name="partitionCount">2,1</property>
                <property name="partitionLength">256,512</property>
            </function>
        配置说明:    
            partitionCount为分片个数列表。
            partitionLength为分片范围列表,分区长度默认最大为2的n次方=1024,即最大支持1024个分区。
        约束如下:
            count、length两个数组的长度必须一致。
            1024=sum((count[i]*length[i])),count和length两个向量的点积恒等于1024.
    
    取模范围算法
        取模运算去范围约束的结合主要是为后续的数迁移做准备,即可以自主决定取模后数据的节点分布。
        
    字符串hash求模范围算法
        与取模范围算法类似,该算法支持数值、符号、字母取模。
        
    应用指定算法
        在运行阶段有应用自主决定路由到哪个分区。
        
    字符串hash解析算法
        截取字符串中的int数值hash分片。
        
    一致性hash算法
        一致性hash算法有效解决了分布式数据的扩容问题。
        
    按日期(天)分片算法
    
    按单月小时算法
    
    自然月分片算法
    
    日期范围hash算法
            
    
    
    
    
    
    
    
    
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
书名: 分布式数据库架构企业实践——基于Mycat中间件 作者:周继锋 冯钻优 陈胜尊 左越宗 ISBN:978-7-121-30287-9 出版年月:2016年11月 定价:79元 开本:787×980 1/16 普通关键词:计算机 分布式 数据库 学科关键词: 分布式 数据库 架构 实践 编辑推荐 讲解分布式数据库的书并不多,讲解其架构企业实践的就更少了。 本书基于国内知名的开源分布式数据库中间件Mycat讲解了如何实现分布式数据库,很有实践及借鉴意义。 内容简介 本书由资深 Mycat 专家及一线架构师、DBA 编写而成。全书总计 8 章,首先简单介绍了分布式系统和分布式数据库的需求,然后讲解了分布式数据库的实现原理,并对市场上存在的各种分布式数据库中间件进行了对比,再围绕着如何利用 Mycat 实现分布式数据库而展开。本书对 Mycat 从入门到进阶、从高级技术实践架构剖析、从网络通信协议解析到系统工作原理的方方面面进行了详细讲解,并剖析了 Mycat的 SQL 路由、跨库联合查询、分布式事务及原生 MySQL、PostgreSQL 协议等核心技术。通过本书不仅可以了解 Mycat 的基本概念,掌握 Mycat 配置等技术,还能感受到 Mycat架构设计之美,了解 Mycat 2.0的未来规划。 无论是对于软件工程师、测试工程师、运维工程师、软件架构师、技术经理,还是对于资深 IT 人士来说,本书都极具参考价值

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值