分区取模分库分表策略:多表事务分库内闭环解决方案
Posted 阿里技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分区取模分库分表策略:多表事务分库内闭环解决方案相关的知识,希望对你有一定的参考价值。
分表分库存储
需要对分表数量不同的表进行同事务操作
这些表的分库分表策略依赖的Sharding业务ID一致
分表数量 | 6000w / 500w = 12张表 |
分表策略 | shop_id % 12 |
分库策略 | shop_id % 12 / 2 |
单库表数量 | 12 / 2 = 6张表 |
分表数量 | 2000w / 500w = 4张表 |
分表策略 | shop_id % 4 |
分库策略 | shop_id % 4 / 2 |
单库表数量 | 4 / 2 = 2张表 |
### Cause: ERR-CODE: [TDDL-4603][ERR_ACCROSS_DB_TRANSACTION] Transaction accross db is not supported in current transaction policy
将shop_order_stat作为shop_order_detail的映射基础表,调整shop_order_detail的分表策略,让shop_order_detail和shop_order_stat的数据都路由到同一个库中。
分表下标 = 业务ID取模 % 分块大小 + 业务ID取模 / 分块大小 * 单库表数量 + 业务ID取模 / 分区大小 * 分块大小
业务ID取模 = 业务ID % 总表数量
分区大小 = 目标映射表的总表数量
分块大小 = 目标映射表的单库表数量
分表数量 | 4张表 |
分表策略 | shop_id % 4 |
分库策略 | shop_id % 4 / 2 |
单库表数量 | 4 / 2 = 2张表 |
分表数量 | 12张表 |
分表策略 | // 总表数取模 |
分库策略 | shop_id % 4 / 2 |
单库表数量 | 12 / 2 = 6张表 |
<bean id="shop_order_stat" class="com.taobao.tddl.rule.TableRule">
<property name="dbNamePattern" value="{0000}"/>
<property name="dbRuleArray" value="(#shop_id,1,4#.longValue() % 4).intdiv(2)" />
<property name="tbNamePattern" value="shop_order_stat_{0000}"/>
<property name="tbRuleArray" value="#shop_id,1,4#.longValue() % 4" />
</bean>
<bean id="shop_order_detail" class="com.taobao.tddl.rule.TableRule">
<property name="dbNamePattern" value="{0000}"/>
<property name="dbRuleArray" value="(#shop_id,1,4#.longValue() % 4).intdiv(2)" />
<property name="tbNamePattern" value="shop_order_detail_{0000}"/>
<property name="tbRuleArray">
<value>
def index =
return index % 2 + (index % 4).intdiv(2) * 6 + index.intdiv(4) * 2
</value>
</property>
<property name="allowFullTableScan" value="true"/>
</bean>
long shopId = 9;
int dbs = 2;
int tables = 12;
int oneDbTables = 6;
int partitionSize = 4;
int blockSize = 2;
int sharding = (int) (shopId % tables);
// 目标分库
int dbIndex = (int) (shopId % partitionSize / dbs);
// 目标分表
int tableIndex = sharding % blockSize + sharding % partitionSize / blockSize * oneDbTables + sharding / partitionSize * blockSize;
免费领取电子书
《阿里巴巴大数据及 AI 实战》
本书将深度剖析淘宝、高德、友盟+、1688、优酷、阿里妈妈、阿里影业大数据实战场景,是 2020 不容错过的企业大数据实战手册。
以上是关于分区取模分库分表策略:多表事务分库内闭环解决方案的主要内容,如果未能解决你的问题,请参考以下文章