Amoeba切分规则配置详解

Amoeba的切分规则主要配置在rule.xml中,针对一般的应用前面章节的介绍应该已经足够大家完成水平切分或垂直切分。在本章节会深入切分规则的配置、详细介绍每一个参数的选项以及规则的不同配置方式。

tableRule的配置

Table 4.1. tableRule的属性

属性说明
name需要切分的表名
defaultPools默认数据库节点(除了读写以外的语句使用默认库)
readPools用作读的数据库节点
writePools用作写的数据库节点
schema表名所在的数据库名

Caution

  • defaultPools、readPools、writePools均是一个或多个数据库节点名以逗号为分隔符连接的字符串。数据库节点名必须在dbServers.xml定义。

  • 需要切分的表名可以使用正则表达式,但是不允许用“.”号,因为目前“.”号作为schema与table的分割符号。 比如如果需要通配以“blog”开头的任意表名,需要写成:“blog[A-Za-z0-9]*”。

Table 4.2. tableRule的元素

元素说明
rule为该表所配置的一条或多条路由规则

rule元素的配置

Table 4.3. rule的属性

属性说明
name谨作为规则的名称
group规则的组名。若多个rule元素有相同的组名,则一旦命中不再验证后面的规则。
ruleResult有两个选项:POOLNAME和BOOLEAN。配置为POOLNAME则expression返回数据库节点名;配置为BOOLEAN则当expreesion返回true是操作writePools(若没有配置writePools则操作defaultPools)

Table 4.4. rule的元素

元素说明
defaultPools该规则的默认库节点,若没有配置writePools,则当ruleResult为BOOLEAN时如果expression返回为true会操作该库
expression规则表达式,类VB Script的风格,用于判断及处理分库逻辑
parameters用于分库分表的数据库列名
readPools用作读的数据库节点
writePools用作写的数据库节点,主要用作当ruleResult为BOOLEAN时如果expression返回为true将操作该库

规则未命中的情况

当tableRule中没有任何规则能命中该表,将操作tableRule配置的writePools(若没有配置则使用defaultPools)属性中的数据库节点;

当某个表在任何tableRules都没有被路由到,将操作queryRouter配置的writePools(若没有配置则使用defaultPools)属性中的数据库节点。