一、ShardingSphere-Proxy 简介
Apache ShardingSphere 是一款开源的 分布式数据库中间件,支持 分库分表、读写分离、分布式事务 等功能。其中 ShardingSphere-Proxy 是最常用的组件,特点是:
以 数据库代理 的形式运行,用户只需通过标准的 MySQL/PostgreSQL 协议 连接 Proxy 即可。
对应用程序透明,不需要修改业务代码。
支持 多种分片算法(哈希、范围、时间分片、自定义)。
支持 分布式事务(XA/BASE)。
内置 数据治理与监控能力。

二、安装与启动
1. 下载
wget https://downloads.apache.org/shardingsphere/5.5.0/apache-shardingsphere-5.5.0-shardingsphere-proxy-bin.tar.gz
tar -zxvf apache-shardingsphere-5.5.0-shardingsphere-proxy-bin.tar.gz
cd apache-shardingsphere-5.5.0-shardingsphere-proxy-bin
2. 配置文件目录
conf/server.yaml:服务全局配置conf/config-*.yaml:规则配置(分库分表/读写分离等)
3. 启动
bin/start.sh
默认监听 3307 端口(可修改)。
三、核心配置示例
假设我们有一个订单表 t_order,数据量非常大,需要按 月份分表:
1. 数据源配置(server.yaml)
mode:
type: Standalone
repository:
type: JDBC
authority:
users:
- user: root@%
password: root
privilege:
type: ALL_PERMITTED
2. 分片配置(conf/config-sharding.yaml)
databaseName: sharding_db
dataSources:
ds0:
url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
username: root
password: root
rules:
- !SHARDING
tables:
t_order:
actualDataNodes: ds0.t_order_$->{202301..202312}
tableStrategy:
standard:
shardingColumn: create_time
shardingAlgorithmName: month_sharding
shardingAlgorithms:
month_sharding:
type: CLASS_BASED
props:
strategy: STANDARD
algorithmClassName: com.example.sharding.MonthShardingAlgorithm
📌 这里的 MonthShardingAlgorithm 可以自定义,例如根据 create_time 拆分到 t_order_202301、t_order_202302 等。
四、性能与优化
1. 优势
大表拆分:单表数据量过亿时,查询性能显著提升。
读写分离:主库写,从库读,减轻主库压力。
透明代理:应用侧无需改动 SQL。
2. 注意点
LIMIT查询:在分表场景下,分页会被拆分到多个表执行,再合并,性能可能下降。
✅ 建议:分页时加上排序字段,并避免深度分页。全路由查询:如果
WHERE条件没有分片键,会全表扫描,性能较差。
✅ 建议:SQL 必须带分片键。连接池优化:ShardingSphere-Proxy 内部使用 HikariCP,建议调整
maximumPoolSize、connectionTimeout等参数。
五、事务支持
ShardingSphere 提供三种事务模式:
LOCAL
默认模式,事务只在单数据源内生效。性能最佳。XA(强一致性)
基于 两阶段提交协议,保证分布式事务一致性。
缺点:性能下降,适合对一致性要求高的金融场景。BASE(最终一致性)
异步事务,性能较高,但可能存在短暂不一致。
适合互联网业务,如订单、日志。
配置示例(server.yaml):
transaction:
defaultType: XA
providerType: Atomikos
六、图解流程
客户端访问
SQL 路由
Proxy 根据分片算法,解析 SQL → 路由到目标分表/分库。
支持 SQL 改写(如
INSERT自动路由到t_order_202309)。
执行与结果归并
并发执行多库多表 SQL。
将结果在 Proxy 中归并后返回给应用。
七、总结
ShardingSphere-Proxy 适合快速落地分库分表方案,对应用透明。
配置简单,但需要合理设计 分片键,否则容易导致全路由查询。
在事务上,三种模式可灵活选择:
性能优先 → LOCAL
一致性优先 → XA
高可用优先 → BASE
对于 大表查询、分页、Join 等场景,要注意性能优化。
📌 建议实践:
单表数据量超过 1000W 时考虑分表。
按时间分片 是最常见方案(如订单、日志)。
事务模式根据业务选择,不要盲目使用 XA。