1. Aurora Limitless 如何通过分片数据库(transaction router、shard group)实现写入水平扩展?跨分片事务与分布式 JOIN 有哪些限制?
Aurora Limitless 如何通过分片数据库(transaction router、shard group)实现写入水平扩展?跨分片事务与分布式 JOIN 有哪些限制?
- Aurora Limitless 的路由器与分片架构
- 写入水平扩展的机制
- 跨分片事务与分布式 JOIN 的限制
Aurora Limitless Database 是 Aurora 的扩展功能,将数据按分片键(shard key)水平分布到多个分片组(shard group)中,每个 shard group 是独立的 Aurora 集群。请求先到达 Transaction Router(事务路由器),路由器根据 SQL 中分片键的取值将语句路由到对应 shard group 执行,从而把写入负载分散到多个集群,实现写入水平扩展。跨分片事务(涉及多个 shard group 的事务)与分布式 JOIN 是受限的:跨分片 JOIN 需要把数据在路由器层聚合,开销大、延迟高,因此官方建议尽量按分片键设计查询以避免跨分片操作;跨分片事务无法保证 ACID 的严格隔离,需要应用层处理分布式一致性。
Limitless 的核心思路是"分库分表 + 无状态路由":把单集群的写入瓶颈拆到多个集群,用分片键保证数据局部性。正因为跨分片操作代价高,它要求业务表设计时必须明确分片键,并把高频关联查询控制在单分片内,这与传统分库分表中间件的思路一致。
-- 创建分片数据库(分片在表级配置)
CREATE DATABASE sales_shard;
-- 建表时用 DISTRIBUTED BY 声明分片键
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
customer_id BIGINT,
amount DECIMAL(10,2)
) DISTRIBUTED BY (id);