3. Matrix相关配置

Matrix层的配置决定了整个数据库的逻辑拓扑结构,包含了两大块的数据配置:

1.topology配置,定义matrix/group/atom的嵌套结构

diamond key : com.taobao.tddl.v1_designsnapshot-service-prod_topology

<?xml version="1.0" encoding="UTF-8"?>

<matrix xmlns="https://github.com/tddl/tddl/schema/matrix"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="https://github.com/tddl/tddl/schema/matrix https://raw.github.com/tddl/tddl/master/tddl-common/src/main/resources/META-INF/matrix.xsd">

    <appName>designsnapshot-service-prod</appName>

    <group name="designsnapshot_0000" type="mysql_jdbc">

        <atom name="designsnapshot_0000" />

    </group>

    <group name="designsnapshot_0001" type="mysql_jdbc">

        <atom name="designsnapshot_0001" />

    </group>

    <group name="designsnapshot_0002" type="mysql_jdbc">

        <atom name="designsnapshot_0002" />

    </group>

    <group name="designsnapshot_0003" type="mysql_jdbc">

        <atom name="designsnapshot_0003" />

    </group>

    <group name="site-db-prod" type="mysql_jdbc">

        <atom name="write-prod" />

        <atom name="read-prod-01" />

        <atom name="read-prod-03" />

        <atom name="read-prod05" />

        <atom name="read-prod-02" />

        <atom name="read-prod-04" />

    </group>

</matrix>

上述例子中定义了一个叫"designsnapshot-service-prod"的matrix,当中包含5个group:designsnapshot_0000~designsnapshot_0003,每个group中有有一个atom;site-db-prod,当中包含6个atom。

2.分库路由规则

diamond key:com.taobao.tddl.rule.le.designsnapshot-service-prod

 

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans.xsd">

     

    <bean id="designsnapshot_bean" class="com.taobao.tddl.rule.TableRule">

        <property name="dbNamePattern" value="designsnapshot_{0000}"/>

        <property name="dbRuleArray">

            <value>(#designid,1,256#.longValue() % 256).intdiv(64)</value>

        </property>

        <property name="tbNamePattern" value="designsnapshot_{0000}" />

        <property name="tbRuleArray">

            <value>#designid,1,64#.longValue() % 64</value>

        </property>

        <property name="allowFullTableScan" value="true"/>   

    </bean>  

        

    <bean id="vtabroot" class="com.taobao.tddl.rule.VirtualTableRoot" init-method="init">

        <property name="tableRules">

            <map>

                <entry key="design_snapshot" value-ref="designsnapshot_bean" />

             </map>

        </property>

            <property name="dbIndexMap">

            <map>

                          <entry key="sequence" value="designsnapshot_0000" />

                    </map>

        </property>

        <property name="defaultDbIndex" value="site-db-prod" />

    </bean>

</beans>

路由规则的整体是一个sprint xml配置,入口是一个VirtualTableRoot类的实例,定义了所有关联的规则:

  • tableRules属性:定义了 虚拟表名 => 分表规则 的列表
  • dbIndexMap属性:定义了 实体表 => Group 的映射。例子中是指'sequence'这张表存在于designsnapshot_0000这个Group中
  • defautDbIndex属性: 默认Group。没有命中以上规则的表去这个Group中寻找

TableRule类的Bean实例定义了一个逻辑表的分库分表规则,包含库名规则和表名规则。

(#designid,1,256#.longValue() % 256).intdiv(64)这个表达式的含义是将 (designid % 256) / 64 的结果代入designsnapshot_{0000}中作为库名

#designid, 1, 256# 这个部分是用来计算整个表达式可能的所有结果的。含义是 designid在区间0~256内,每次增加1,取所有离散值。将这些值代入完整的表达式,就可以算出所有合法的库名。

转载于:https://my.oschina.net/zhuhui/blog/3079480

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值