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

xiaoxiao2021-02-27  177

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算法                                                         
转载请注明原文地址: https://www.6miu.com/read-12476.html

最新回复(0)