ShardingSphere-JDBC 数据分片 YAML 配置详解

ShardingSphere-JDBC 数据分片 YAML 配置详解

shardingsphere shardingsphere 项目地址: https://gitcode.com/gh_mirrors/shard/shardingsphere

什么是数据分片

数据分片是将大型数据库中的数据分散到多个物理节点上的技术方案。通过水平拆分的方式,可以有效解决单机数据库在数据量增长时面临的性能瓶颈问题。ShardingSphere-JDBC 作为一款轻量级的 Java 框架,提供了强大的数据分片能力,能够透明化地处理分库分表操作,使开发者无需关心底层数据分布细节。

YAML 配置的优势

YAML 作为一种人类友好的数据序列化语言,在配置数据分片规则时具有显著优势:

  1. 结构清晰:通过缩进层级直观展示配置项之间的关系
  2. 可读性强:比传统 XML 或 properties 文件更易于理解和维护
  3. 开发高效:减少样板代码,自动完成数据源创建过程
  4. 版本友好:便于纳入版本控制系统进行管理

核心配置项解析

1. 表分片规则配置

表分片规则是配置中最核心的部分,主要包含以下元素:

tables:
  t_order:  # 逻辑表名
    actualDataNodes: ds_${0..1}.t_order_${0..1}  # 实际数据节点
    databaseStrategy:  # 分库策略
      standard:
        shardingColumn: user_id
        shardingAlgorithmName: db_sharding_algo
    tableStrategy:  # 分表策略
      standard:
        shardingColumn: order_id
        shardingAlgorithmName: table_sharding_algo
  • actualDataNodes:定义实际数据节点,格式为数据源名.表名,支持行表达式语法
  • 分库/分表策略:支持标准分片、复合分片、Hint分片和不分片四种策略

2. 自动分片表配置

对于无需显式指定分片规则的表,可以使用自动分片配置:

autoTables:
  t_order_auto:
    actualDataSources: ds_0,ds_1
    shardingStrategy:
      standard:
        shardingColumn: order_id
        shardingAlgorithmName: auto_table_sharding_algo

3. 绑定表配置

绑定表指具有相同分片规则的主表和子表,配置后可以优化关联查询:

bindingTables:
  - t_order,t_order_item

4. 默认策略配置

为未单独配置的表提供默认分片策略:

defaultDatabaseStrategy:
  standard:
    shardingColumn: user_id
    shardingAlgorithmName: default_db_sharding
defaultTableStrategy:
  none:

5. 算法配置

ShardingSphere 支持多种分片算法:

shardingAlgorithms:
  database_inline:
    type: INLINE
    props:
      algorithm-expression: ds_${user_id % 2}
keyGenerators:
  snowflake:
    type: SNOWFLAKE
auditors:
  sharding_key_required_auditor:
    type: DML_SHARDING_CONDITIONS

实际配置示例解析

下面我们通过一个典型配置示例来理解各配置项的实际应用:

dataSources:
  ds_0:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/demo_ds_0
    username: root
    password:

rules:
- !SHARDING
  tables:
    t_order:
      actualDataNodes: ds_${0..1}.t_order_${0..1}
      tableStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: t_order_inline
      keyGenerateStrategy:
        column: order_id
        keyGeneratorName: snowflake
  bindingTables:
    - t_order,t_order_item
  shardingAlgorithms:
    t_order_inline:
      type: INLINE
      props:
        algorithm-expression: t_order_${order_id % 2}
  keyGenerators:
    snowflake:
      type: SNOWFLAKE

这个配置实现了:

  1. 定义了两个数据源 ds_0 和 ds_1
  2. 对 t_order 表进行分表,根据 order_id 取模分配到 t_order_0 和 t_order_1
  3. 使用雪花算法生成 order_id
  4. 将 t_order 和 t_order_item 设为绑定表关系

最佳实践建议

  1. 命名规范:为分片算法和序列生成器使用有意义的名称
  2. 分片键选择:选择分布均匀的列作为分片键,避免数据倾斜
  3. 绑定表优化:对关联查询频繁的表配置绑定关系
  4. 算法测试:上线前充分测试分片算法是否符合预期
  5. 监控配置:配合 ShardingSphere 的监控功能观察分片效果

常见问题处理

  1. 分片键缺失:通过配置审计策略可以强制要求 SQL 中包含分片键
  2. 跨库查询:尽量避免多表关联查询,或使用绑定表优化
  3. 分布式事务:对于跨分片的写操作,考虑使用分布式事务解决方案
  4. 数据迁移:扩容时可以使用 ShardingSphere 的数据迁移工具

通过合理配置 YAML 文件,开发者可以轻松实现复杂的数据分片需求,而 ShardingSphere-JDBC 会自动处理底层路由和结果归并等复杂逻辑,大大降低了分库分表的实施难度。

shardingsphere shardingsphere 项目地址: https://gitcode.com/gh_mirrors/shard/shardingsphere

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

### 关于 Apache ShardingSphere-Proxy 5.5.2 的 Java 配置及使用教程 #### Maven 依赖配置 为了在项目中集成 ShardingSphere-Proxy,首先需要引入其对应的 Maven 依赖。以下是适用于 Spring Boot 和 ShardingSphere-JDBC 的基础依赖配置: ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version>5.5.2</version> </dependency> <!-- 如果需要支持加密功能 --> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-encrypt-spring-boot-starter</artifactId> <version>5.5.2</version> </dependency> ``` 上述依赖可以用于构建基于 ShardingSphere-JDBC 的应用环境[^3]。 #### ShardingSphere-Proxy 启动方式 ShardingSphere-Proxy 是通过命令行启动的服务端组件。可以通过以下命令解压并运行 Proxy 文件包: ```bash tar -zxvf apache-shardingsphere-5.5.2-shardingsphere-proxy-bin.tar.gz cd apache-shardingsphere-5.5.2-shardingsphere-proxy-bin/bin ./start.sh ``` 此过程会初始化 ShardingSphere-Proxy 并使其作为独立服务运行[^1]。 #### 配置文件详解 ShardingSphere-Proxy 的核心配置位于 `conf/server.yaml` 和 `conf/config-map.yaml` 中。以下是常见的配置项及其作用: - **server.yaml**: 定义监听地址、端口以及认证信息。 ```yaml authentication: users: root: password: root authorizedSchemas: db_0,db_1 props: max-connections-size-per-query: 10 query-with-cipher-column: true ``` - **config-map.yaml**: 可选配置文件,通常用于扩展属性设置。 这些配置能够满足基本的连接管理和权限控制需求[^2]。 #### 数据分片策略配置 如果需要实现数据分片逻辑,则需进一步定义分片规则。可以在 `conf/sharding-schema.yaml` 或程序内部完成如下配置: ```java import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration; public class ShardingConfig { public static void main(String[] args) { TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(); tableRuleConfig.setLogicTable("t_order"); ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); shardingRuleConfig.getTableRules().add(tableRuleConfig); } } ``` 以上代码片段展示了如何通过编程方式指定表级分片规则。 #### 加密与安全机制 针对敏感字段的安全处理,可启用 SM4 等国密算法进行加解密操作。具体配置可通过 YAML 文件或动态注入的方式完成: ```yaml rules: - !ENCRYPTOR name: sm4_encryptor type: SM4 props: cipher-key: your_cipher_key_here plain-columns: order_id,user_id ``` 该部分配置允许开发者灵活调整加密列范围和秘钥参数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔡丛锟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值