ShardingJDBC 07_拆表与分库

102 阅读1分钟

之前创建了两张表:orders 及 order_info,其中 order_info 中的字段 order_id 关联到 orders 表中的 id。

可以说,order_info 表是 orders 表的子表,orders 表是 order_info 表的父表。

在进行分库分表操作时,需要将有关联关系的父表和子表放在同一个分片中,避免关联查询时找不到子表或父表记录的问题出现。

修改配置文件

设置子表分片策略

根据子表中对应父表的外键,设置子表的分片策略

spring.shardingsphere.sharding.tables.orders_info.database-strategy.inline.sharding-column=order_id

spring.shardingsphere.sharding.tables.orders_info.database-strategy.inline.algorithm-expression=ds${order_id%2}

设置子表主键生成策略

与主表相同,这里也同样使用雪花算法来生成子表的主键id。

spring.shardingsphere.sharding.tables.orders_info.key-generator.column=id

spring.shardingsphere.sharding.tables.orders_info.key-generator.type=SNOWFLAKE

程序在创建子表数据时,会首先查询对应父表记录存储的数据库节点,然后将子表数据保存在与父表相同的数据库节点中。