上篇博客,我们讲了 ShardingSphere实战(2)- 水平分表 ,这篇博客,我们继续实现分库以及解决前面遗留的问题。
一、绑定表
基于上篇博客配置的前提下(上篇博客的最后放上了完整的配置,需要的可以去看看,这里就不重复写上去了),加上绑定表的配置:
# 绑定表关系
spring.shardingsphere.sharding.binding-tables=t_order,t_order_item
1. 查询数据
/**
* 多个表水平分表测试-查询
*/
@GetMapping("/test4")
public String test4(@RequestParam("orderId") Long orderId) {
List<OrderItemExtDO> orderDO = orderMapper.findOrderAndOrderItemsByOrderId(orderId);
log.info("orderDO: {}", orderDO.toString());
return "success";
}
<select id="findOrderAndOrderItemsByOrderId" resultType="com.shardingsphere.demo.dal.entity.OrderItemExtDO">
select t1.order_id t1OrderId,
t1.order_no orderNo,
t2.order_id t2OrderId
from t_order t1
inner join t_order_item t2 on t1.order_id = t2.order_id
where t1.order_id = #{orderId,jdbcType=BIGINT}
</select>
2. 对比结果
配置绑定表关系之前:
取的是笛卡尔积

配置绑定表关系之后:

3. 绑定表总结
绑定表是指那些经常一起使用的表,例如在联表查询中同时出现的订单表 t_order 和订单详情表 t_order_item。ShardingSphere 会将 t_order 和 t_order_item 视为一组绑定表,在执行 SQL 查询时,如果涉及到这两张表,ShardingSphere 会确保它们的数据分布在相同的分片上,从而避免跨库的复杂联表查询,提高查询效率。
绑定表的原理
- 数据一致性:绑定表的数据会在同一个数据库分片中,保证了数据的一致性和完整性。
- 查询优化:避免了跨库的联表查询,减少了网络延迟和查询时间。
配置注意事项
- 表名顺序:在
binding-tables配置中,表名的顺序很重要,通常主表(如 t_order)放在前面,从表(如 t_order_item)放在后面。 - 关联字段:绑定表通常通过一个共同的字段(如订单ID)关联,这个字段需要在所有绑定表中存在且类型一致。
- 分片策略:确保绑定表使用相同的分片策略,这样它们才能被正确地分配到同一个分片上。
二、水平分库
1. 创建数据库
create database ds-0;
create database ds-1;
# 分别在ds-0和ds-1中创建下面的表
create table t_order_0
(
order_id bigint not null
primary key,
order_no varchar(100) null,
create_name varchar(50) null,
price decimal(10, 2) null
)
create table t_order_1

最低0.47元/天 解锁文章
1561

被折叠的 条评论
为什么被折叠?



