前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sharding-Sphere 学习笔记以及代码示例

Sharding-Sphere 学习笔记以及代码示例

原创
作者头像
疯狂的KK
发布2023-03-23 12:40:31
6770
发布2023-03-23 12:40:31
举报
文章被收录于专栏:Java项目实战Java项目实战

Sharding-Sphere 学习笔记

Sharding-Sphere 是一个开源的分布式数据库中间件,提供了分库分表、读写分离、分布式事务等功能,支持 MySQL、Oracle、SQL Server 等主流数据库。本文将介绍 Sharding-Sphere 的使用方法和代码示例。

一、Sharding-Sphere 的核心组件

Sharding-Sphere 的核心组件包括三个部分:Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar。

  1. Sharding-JDBC

Sharding-JDBC 是 Sharding-Sphere 的核心组件,用于实现分库分表和读写分离。它是一个 JDBC 驱动,可以直接替换应用程序中原本使用的 JDBC 驱动,从而实现对数据库的透明访问。

  1. Sharding-Proxy

Sharding-Proxy 是一个基于 MySQL 协议的数据库代理,可以将请求路由到多个实际的数据库节点上。它可以实现分库分表、读写分离、分布式事务等功能。

  1. Sharding-Sidecar

Sharding-Sidecar 是一个基于 Envoy 的数据库代理,可以将请求路由到多个实际的数据库节点上。它可以实现分库分表、读写分离、分布式事务等功能。

二、Sharding-JDBC 的使用方法

  1. 引入依赖

在 Maven 中引入 Sharding-JDBC 的依赖:

代码语言:txt
复制
<dependency>
    <groupId>io.shardingsphere</groupId>
    <artifactId>sharding-jdbc-core</artifactId>
    <version>4.2.2</version>
</dependency>
  1. 配置数据源

在 application.yml 中配置数据源:

代码语言:txt
复制
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root
  1. 配置分库分表规则

在 application.yml 中配置分库分表规则:

代码语言:txt
复制
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:
  1. 使用 Sharding-JDBC

在 Java 代码中使用 Sharding-JDBC:

代码语言:txt
复制
@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 的使用方法

  1. 引入依赖

在 Maven 中引入 Sharding-Proxy 的依赖:

代码语言:txt
复制
<dependency>
    <groupId>io.shardingsphere</groupId>
    <artifactId>sharding-proxy-backend</artifactId>
    <version>4.2.2</version>
</dependency>
  1. 配置数据源

在 application.yml 中配置数据源:

代码语言:txt
复制
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root
  1. 配置分库分表规则

在 application.yml 中配置分库分表规则:

代码语言:txt
复制
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:
  1. 启动 Sharding-Proxy

在 Java 代码中启动 Sharding-Proxy:

代码语言:txt
复制
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 的使用方法

  1. 引入依赖

在 Maven 中引入 Sharding-Sidecar 的依赖:

代码语言:txt
复制
<dependency>
    <groupId>io.shardingsphere</groupId>
    <artifactId>sharding-sidecar</artifactId>
    <version>4.2.2</version>
</dependency>
  1. 配置数据源

在 application.yml 中配置数据源:

代码语言:txt
复制
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: root
  1. 配置分库分表规则

在 application.yml 中配置分库分表规则:

代码语言:txt
复制
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:
  1. 启动 Sharding-Sidecar

在 Java 代码中启动 Sharding-Sidecar:

代码语言:txt
复制
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 是一个功能强大的分布式数据库中间件,可以大大简化数据库的管理和维护,提高系统的可扩展性和可靠性。如需了解更多信息,请参考官方文档。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档