本文共 3224 字,大约阅读时间需要 10 分钟。
ShardingSphere技术文档
一、ShardingProxy快速使用
ShardingProxy是一款功能强大的数据库代理工具,主要用于分库分表。与传统的ShardingJDBC不同,ShardingProxy是一个独立部署的服务端代理,支持MySQL和PostgreSQL数据库。以下是ShardingProxy的快速使用指南。
1. ShardingProxy部署
在Windows或Linux上部署ShardingProxy相对简单。我们可以从ShardingSphere官网下载4.1.1版本的ShardingProxy发布包,并按照以下步骤进行配置:
mysql-connector-java-8.0.20.jar手动复制到ShardingProxy的lib目录下。server.yaml配置文件中的注释,修改authentication和props部分。config-sharding.yaml中添加数据库配置,根据实际环境设置数据源信息。config-shadow.yaml和config-encrypt.yaml以支持影子库和数据加密功能。启动ShardingProxy时,可以指定一个定制端口(如3316),避免与其他MySQL服务端口冲突。运行start.bat 3316启动服务。
2. ShardingProxy使用
使用ShardingProxy时,仅需使用MySQL JDBC客户端连接到默认端口(如3316),行为与连接本地MySQL服务一致。以下是常见操作示例:
mysql.exe -P3316 -uroot -p
连接成功后,可以通过以下命令查看数据库和表信息:
show databases;use sharding_db;show tables;select * from course;
3. ShardingProxy服务治理
ShardingProxy支持丰富的服务治理功能,主要包括数据接入、弹性伸缩和注册中心集成。以下是配置示例:
orchestration: orchestration_ds: orchestrationType: registry_center instanceType: zookeeper serverLists: localhost:2181 namespace: orchestration props: overwrite: false retryIntervalMilliseconds: 500 timeToLiveSeconds: 60 maxRetries: 3 operationTimeoutMilliseconds: 500
此外,ShardingSphere还提供了ShardingSphere-UI管理控制台,用于注册中心管理和数据库编排等功能。
4. ShardingProxy扩展功能
4.1 影子库
配置影子库用于压力测试,具体操作如下:
config-shadow.yaml中设置影子规则:shadowRule: column: shadow shadowMappings: ds: shadow_ds
4.2 数据加密
数据加密配置在config-encrypt.yaml中完成,支持AES和MD5等加密算法。默认集成加密功能,可通过SPI扩展接入更多算法。
4.3 SPI扩展
ShardingProxy支持SPI扩展,用户可通过开发自定义插件实现主键生成、分区策略等功能。以下是SPI扩展示例:
package com.roy.shardingDemo.spiextention;import org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.Properties;import java.util.concurrent.atomic.AtomicLong;public class MykeyGenerator implements ShardingKeyGenerator { private AtomicLong atom = new AtomicLong(0); private Properties properties = new Properties(); public Comparable generateKey() { String prefix = properties.getProperty("mykey-offset", "100"); LocalDateTime ldt = LocalDateTime.now(); String timestampS = DateTimeFormatter.ofPattern("HHmmssSSS").format(ldt); return Long.parseLong("" + prefix + timestampS + atom.incrementAndGet()); } public String getType() { return "MYKEY"; } public Properties getProperties() { return this.properties; } public void setProperties(Properties properties) { this.properties = properties; }} 将上述类和SPI服务文件注册到ShardingProxy后,可以在config-sharding.yaml中配置自定义主键生成策略。
5. 与其他数据库中间件对比
以下是ShardingProxy与其他主流数据库中间件的对比:
| 产品名称 | 开发公司 | 功能特性 | 备注 |
|---|---|---|---|
| DBLE | 爱可生 | 专注于MySQL的高可扩展性分布式中间件 | 基于MyCAT开发的增强版。 |
| Meituan Atlas | 美团 | 读写分离、单库分表 | 已下架。 |
| Cobar | 阿里(B2B) | Cobar以Proxy形式位于前台应用和实际数据库之间 | 开源版本仅支持MySQL,不支持读写分离。 |
| MyCAT | 阿里 | 实现MySQL协议代理,支持多数据库通信 | 基于Cobar研发。 |
| Atlas | 360 | 读写分离、静态分表 | 功能齐全,但接入复杂。 |
| Kingshard | - | Go语言开发的高性能MySQL Proxy | 性能优异。 |
| TDDL | 阿里 | 动态数据源、读写分离、分库分表 | 提供两种版本。 |
| Zebra | 美团点评 | 动态数据源、读写分离、分库分表、CAT监控 | 功能齐全但限制较多。 |
| MTDDL | 美团点评 | 动态数据源、读写分离、分布式唯一主键生成器 | 功能全面。 |
| Vitess | 谷歌 | 基于ZooKeeper的集群管理,支持复杂查询 | 主要应用于YouTube。 |
| DRDS | 阿里 | 专注于解决单机关系型数据库扩展性问题 | 无需状态,灵活高效。 |
ShardingProxy在功能上与这些中间件有所不同,但其独特之处在于支持广泛的SPI扩展和服务治理功能。
发表评论
最新留言
关于作者