Sharding-Sphere 学习笔记
【摘要】 Sharding-Sphere 学习笔记添加描述添加描述Sharding-Sphere 是一个开源的分布式数据库中间件,提供了分库分表、读写分离、分布式事务等功能,支持 MySQL、Oracle、SQL Server 等主流数据库。本文将介绍 Sharding-Sphere 的使用方法和代码示例。一、Sharding-Sphere 的核心组件Sharding-Sphere 的核心组件包括三个...
Sharding-Sphere 学习笔记
Sharding-Sphere 是一个开源的分布式数据库中间件,提供了分库分表、读写分离、分布式事务等功能,支持 MySQL、Oracle、SQL Server 等主流数据库。本文将介绍 Sharding-Sphere 的使用方法和代码示例。
一、Sharding-Sphere 的核心组件
Sharding-Sphere 的核心组件包括三个部分:Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar。
-
Sharding-JDBC
Sharding-JDBC 是 Sharding-Sphere 的核心组件,用于实现分库分表和读写分离。它是一个 JDBC 驱动,可以直接替换应用程序中原本使用的 JDBC 驱动,从而实现对数据库的透明访问。
-
Sharding-Proxy
Sharding-Proxy 是一个基于 MySQL 协议的数据库代理,可以将请求路由到多个实际的数据库节点上。它可以实现分库分表、读写分离、分布式事务等功能。
-
Sharding-Sidecar
Sharding-Sidecar 是一个基于 Envoy 的数据库代理,可以将请求路由到多个实际的数据库节点上。它可以实现分库分表、读写分离、分布式事务等功能。
二、Sharding-JDBC 的使用方法
-
引入依赖
在 Maven 中引入 Sharding-JDBC 的依赖:
<dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>4.2.2</version> </dependency>
-
配置数据源
在 application.yml 中配置数据源:
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test username: root password: root
-
配置分库分表规则
在 application.yml 中配置分库分表规则:
sharding: tables: order: actualDataNodes: ds${0..1}.order_${0..1} tableStrategy: inline: shardingColumn: order_id algorithmExpression: order_${order_id % 2} keyGenerateStrategy: column: order_id keyGeneratorName: snowflake bindingTables: - order defaultDatabaseStrategy: inline: shardingColumn: user_id algorithmExpression: ds${user_id % 2} defaultTableStrategy: none:
-
使用 Sharding-JDBC
在 Java 代码中使用 Sharding-JDBC:
@Autowired DataSource dataSource; public void example() { try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement("insert into order (order_id, user_id) values (?, ?)")) { ps.setLong(1, 1L); ps.setLong(2, 1L); ps.executeUpdate(); } }
以上代码将会将数据插入到分布式的 order 表中,Sharding-JDBC 会自动将数据路由到对应的数据库节点。
三、Sharding-Proxy 的使用方法
-
引入依赖
在 Maven 中引入 Sharding-Proxy 的依赖:
<dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-proxy-backend</artifactId> <version>4.2.2</version> </dependency>
-
配置数据源
在 application.yml 中配置数据源:
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test username: root password: root
-
配置分库分表规则
在 application.yml 中配置分库分表规则:
sharding: tables: order: actualDataNodes: ds${0..1}.order_${0..1} tableStrategy: inline: shardingColumn: order_id algorithmExpression: order_${order_id % 2} keyGenerateStrategy: column: order_id keyGeneratorName: snowflake bindingTables: - order defaultDatabaseStrategy: inline: shardingColumn: user_id algorithmExpression: ds${user_id % 2} defaultTableStrategy: none:
-
启动 Sharding-Proxy
在 Java 代码中启动 Sharding-Proxy:
public void startProxy() { ProxyConfiguration proxyConfiguration = new ProxyConfiguration(); proxyConfiguration.setFrontendConfiguration(new FrontendConfiguration("jdbc", new InetSocketAddress("127.0.0.1", 3307))); proxyConfiguration.setBackendConfiguration(new BackendConfiguration(Collections.singletonList(new DataSourceConfiguration( "test", "com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/test", "root", "root")), new RuleConfiguration(Collections.singletonList( new ShardingRuleConfiguration(Collections.singletonList(new TableRuleConfiguration("order", "ds${0..1}.order_${0..1}")), new ShardingStrategyConfiguration( "user_id", "ds${user_id % 2}", "order_id", "order_${order_id % 2}", new StandardShardingAlgorithmConfiguration("MODULO"))))))); ShardingProxy shardingProxy = new ShardingProxy(); shardingProxy.start(proxyConfiguration); }
以上代码将会在本地启动一个 Sharding-Proxy 服务,监听在 127.0.0.1:3307 上。应用程序可以通过 JDBC 连接到该地址,Sharding-Proxy 会将请求路由到对应的数据库节点。
四、Sharding-Sidecar 的使用方法
-
引入依赖
在 Maven 中引入 Sharding-Sidecar 的依赖:
<dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-sidecar</artifactId> <version>4.2.2</version> </dependency>
-
配置数据源
在 application.yml 中配置数据源:
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test username: root password: root
-
配置分库分表规则
在 application.yml 中配置分库分表规则:
sharding: tables: order: actualDataNodes: ds${0..1}.order_${0..1} tableStrategy: inline: shardingColumn: order_id algorithmExpression: order_${order_id % 2} keyGenerateStrategy: column: order_id keyGeneratorName: snowflake bindingTables: - order defaultDatabaseStrategy: inline: shardingColumn: user_id algorithmExpression: ds${user_id % 2} defaultTableStrategy: none:
-
启动 Sharding-Sidecar
在 Java 代码中启动 Sharding-Sidecar:
public void startSidecar() { SidecarConfiguration sidecarConfiguration = new SidecarConfiguration(); sidecarConfiguration.setServicePort(9090); sidecarConfiguration.setAdminPort(9091); sidecarConfiguration.setProxyConfiguration(new ProxyConfiguration(Collections.singletonList(new DataSourceConfiguration( "test", "com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/test", "root", "root")), new RuleConfiguration(Collections.singletonList( new ShardingRuleConfiguration(Collections.singletonList(new TableRuleConfiguration("order", "ds${0..1}.order_${0..1}")), new ShardingStrategyConfiguration( "user_id", "ds${user_id % 2}", "order_id", "order_${order_id % 2}", new StandardShardingAlgorithmConfiguration("MODULO"))))))); ShardingSidecar shardingSidecar = new ShardingSidecar(); shardingSidecar.start(sidecarConfiguration); }
以上代码将会在本地启动一个 Sharding-Sidecar 服务,监听在 9090 端口上。应用程序可以通过 Envoy 连接到该地址,Sharding-Sidecar 会将请求路由到对应的数据库节点。
五、总结
本文介绍了 Sharding-Sphere 的核心组件和使用方法,并提供了代码示例。Sharding-Sphere 是一个功能强大的分布式数据库中间件,可以大大简化数据库的管理和维护,提高系统的可扩展性和可靠性。如需了解更多信息,请参考官方文档。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)