Matrix层的配置决定了整个数据库的逻辑拓扑结构,包含了两大块的数据配置:
1.topology配置,定义matrix/group/atom的嵌套结构
diamond key : com.taobao.tddl.v1_designsnapshot-service-prod_topology
|
上述例子中定义了一个叫"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
|
路由规则的整体是一个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,取所有离散值。将这些值代入完整的表达式,就可以算出所有合法的库名。