YAML 配置

5.0.0-alpha

数据分片

配置项说明

  1. dataSources: # 省略数据源配置,请参考使用手册
  2. rules:
  3. - !SHARDING
  4. tables: # 数据分片规则配置
  5. <logic-table-name> (+): # 逻辑表名称
  6. actualDataNodes (?): # 由数据源名 + 表名组成(参考Inline语法规则)
  7. databaseStrategy (?): # 分库策略,缺省表示使用默认分库策略,以下的分片策略只能选其一
  8. standard: # 用于单分片键的标准分片场景
  9. shardingColumn: # 分片列名称
  10. shardingAlgorithmName: # 分片算法名称
  11. complex: # 用于多分片键的复合分片场景
  12. shardingColumns: #分片列名称,多个列以逗号分隔
  13. shardingAlgorithmName: # 分片算法名称
  14. hint: # Hint 分片策略
  15. shardingAlgorithmName: # 分片算法名称
  16. none: # 不分片
  17. tableStrategy: # 分表策略,同分库策略
  18. keyGenerateStrategy: # 分布式序列策略
  19. column: # 自增列名称,缺省表示不使用自增主键生成器
  20. keyGeneratorName: # 分布式序列算法名称
  21. autoTables: # 自动分片表规则配置
  22. t_order_auto: # 逻辑表名称
  23. actualDataSources (?): # 数据源名称
  24. shardingStrategy: # 切分策略
  25. standard: # 用于单分片键的标准分片场景
  26. shardingColumn: # 分片列名称
  27. shardingAlgorithmName: # 自动分片算法名称
  28. bindingTables (+): # 绑定表规则列表
  29. - <logic_table_name_1, logic_table_name_2, ...>
  30. - <logic_table_name_1, logic_table_name_2, ...>
  31. broadcastTables (+): # 广播表规则列表
  32. - <table-name>
  33. - <table-name>
  34. defaultDatabaseStrategy: # 默认数据库分片策略
  35. defaultTableStrategy: # 默认表分片策略
  36. defaultKeyGenerateStrategy: # 默认的分布式序列策略
  37. # 分片算法配置
  38. shardingAlgorithms:
  39. <sharding-algorithm-name> (+): # 分片算法名称
  40. type: # 分片算法类型
  41. props: # 分片算法属性配置
  42. # ...
  43. # 分布式序列算法配置
  44. keyGenerators:
  45. <key-generate-algorithm-name> (+): # 分布式序列算法名称
  46. type: # 分布式序列算法类型
  47. props: # 分布式序列算法属性配置
  48. # ...
  49. props:
  50. # ...

读写分离

配置项说明

  1. dataSources: # 省略数据源配置,请参考使用手册
  2. rules:
  3. - !REPLICA_QUERY
  4. dataSources:
  5. <data-source-name> (+): # 读写分离逻辑数据源名称
  6. primaryDataSourceName: # 主库数据源名称
  7. replicaDataSourceNames:
  8. - <replica-data_source-name> (+) # 从库数据源名称
  9. loadBalancerName: # 负载均衡算法名称
  10. # 负载均衡算法配置
  11. loadBalancers:
  12. <load-balancer-name> (+): # 负载均衡算法名称
  13. type: # 负载均衡算法类型
  14. props: # 负载均衡算法属性配置
  15. # ...
  16. props:
  17. # ...

算法类型的详情,请参见内置负载均衡算法列表

数据加密

配置项说明

  1. dataSource: # 省略数据源配置,请参考使用手册
  2. rules:
  3. - !ENCRYPT
  4. tables:
  5. <table-name> (+): # 加密表名称
  6. columns:
  7. <column-name> (+): # 加密列名称
  8. cipherColumn: # 密文列名称
  9. assistedQueryColumn (?): # 查询辅助列名称
  10. plainColumn (?): # 原文列名称
  11. encryptorName: # 加密算法名称
  12. # 加密算法配置
  13. encryptors:
  14. <encrypt-algorithm-name> (+): # 加解密算法名称
  15. type: # 加解密算法类型
  16. props: # 加解密算法属性配置
  17. # ...
  18. queryWithCipherColumn: # 是否使用加密列进行查询。在有原文列的情况下,可以使用原文列进行查询

算法类型的详情,请参见内置加密算法列表

影子库

配置项说明

  1. dataSources: # 省略数据源配置,请参考使用手册
  2. rules:
  3. - !SHADOW
  4. column: # 影子字段名
  5. sourceDataSourceNames: # 影子前数据库名
  6. # ...
  7. shadowDataSourceNames: # 对应的影子库名
  8. # ...
  9. props:
  10. # ...

分布式治理

配置项说明

  1. governance:
  2. name: # 治理名称
  3. registryCenter: # 注册中心
  4. type: # 治理持久化类型。如:Zookeeper, etcd
  5. serverLists: # 治理服务列表。包括 IP 地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
  6. overwrite: # 本地配置是否覆盖配置中心配置。如果可覆盖,每次启动都以本地配置为准

ShardingSphere-4.x

数据分片

配置项说明

  1. dataSources:
  2. ds0: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: com.mysql.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/ds0
  5. username: root
  6. password:
  7. ds1: !!org.apache.commons.dbcp.BasicDataSource
  8. driverClassName: com.mysql.jdbc.Driver
  9. url: jdbc:mysql://localhost:3306/ds1
  10. username: root
  11. password:
  12. shardingRule:
  13. tables:
  14. t_order:
  15. actualDataNodes: ds${0..1}.t_order${0..1}
  16. databaseStrategy:
  17. inline:
  18. shardingColumn: user_id
  19. algorithmExpression: ds${user_id % 2}
  20. tableStrategy:
  21. inline:
  22. shardingColumn: order_id
  23. algorithmExpression: t_order${order_id % 2}
  24. keyGenerator:
  25. type: SNOWFLAKE
  26. column: order_id
  27. t_order_item:
  28. actualDataNodes: ds${0..1}.t_order_item${0..1}
  29. databaseStrategy:
  30. inline:
  31. shardingColumn: user_id
  32. algorithmExpression: ds${user_id % 2}
  33. tableStrategy:
  34. inline:
  35. shardingColumn: order_id
  36. algorithmExpression: t_order_item${order_id % 2}
  37. bindingTables:
  38. - t_order,t_order_item
  39. broadcastTables:
  40. - t_config
  41. defaultDataSourceName: ds0
  42. defaultTableStrategy:
  43. none:
  44. defaultKeyGenerator:
  45. type: SNOWFLAKE
  46. column: order_id
  47. props:
  48. sql.show: true

读写分离

配置项说明

  1. dataSources:
  2. ds_master: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: com.mysql.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/ds_master
  5. username: root
  6. password:
  7. ds_slave0: !!org.apache.commons.dbcp.BasicDataSource
  8. driverClassName: com.mysql.jdbc.Driver
  9. url: jdbc:mysql://localhost:3306/ds_slave0
  10. username: root
  11. password:
  12. ds_slave1: !!org.apache.commons.dbcp.BasicDataSource
  13. driverClassName: com.mysql.jdbc.Driver
  14. url: jdbc:mysql://localhost:3306/ds_slave1
  15. username: root
  16. password:
  17. masterSlaveRule:
  18. name: ds_ms
  19. masterDataSourceName: ds_master
  20. slaveDataSourceNames: [ds_slave0, ds_slave1]
  21. props:
  22. sql.show: true

通过 YamlMasterSlaveDataSourceFactory 工厂类创建 DataSource

  1. DataSource dataSource = YamlMasterSlaveDataSourceFactory.createDataSource(yamlFile);

数据脱敏

配置项说明

  1. dataSource: !!org.apache.commons.dbcp2.BasicDataSource
  2. driverClassName: com.mysql.jdbc.Driver
  3. url: jdbc:mysql://127.0.0.1:3306/encrypt?serverTimezone=UTC&useSSL=false
  4. username: root
  5. password:
  6. encryptRule:
  7. encryptors:
  8. encryptor_aes:
  9. type: aes
  10. props:
  11. aes.key.value: 123456abc
  12. encryptor_md5:
  13. type: md5
  14. tables:
  15. t_encrypt:
  16. columns:
  17. user_id:
  18. plainColumn: user_plain
  19. cipherColumn: user_cipher
  20. encryptor: encryptor_aes
  21. order_id:
  22. cipherColumn: order_cipher
  23. encryptor: encryptor_md5
  24. props:
  25. query.with.cipher.column: true # 是否使用密文列查询

治理

配置项说明

  1. # 省略数据分片、读写分离和数据脱敏配置
  2. orchestration:
  3. name: orchestration_ds
  4. overwrite: true
  5. registry:
  6. type: zookeeper
  7. namespace: orchestration
  8. serverLists: localhost:2181

ShardingSphere-3.x

数据分片

配置项说明

  1. dataSources:
  2. ds0: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: com.mysql.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/ds0
  5. username: root
  6. password:
  7. ds1: !!org.apache.commons.dbcp.BasicDataSource
  8. driverClassName: com.mysql.jdbc.Driver
  9. url: jdbc:mysql://localhost:3306/ds1
  10. username: root
  11. password:
  12. shardingRule:
  13. tables:
  14. t_order:
  15. actualDataNodes: ds${0..1}.t_order${0..1}
  16. databaseStrategy:
  17. inline:
  18. shardingColumn: user_id
  19. algorithmExpression: ds${user_id % 2}
  20. tableStrategy:
  21. inline:
  22. shardingColumn: order_id
  23. algorithmExpression: t_order${order_id % 2}
  24. keyGeneratorColumnName: order_id
  25. t_order_item:
  26. actualDataNodes: ds${0..1}.t_order_item${0..1}
  27. databaseStrategy:
  28. inline:
  29. shardingColumn: user_id
  30. algorithmExpression: ds${user_id % 2}
  31. tableStrategy:
  32. inline:
  33. shardingColumn: order_id
  34. algorithmExpression: t_order_item${order_id % 2}
  35. bindingTables:
  36. - t_order,t_order_item
  37. broadcastTables:
  38. - t_config
  39. defaultDataSourceName: ds0
  40. defaultTableStrategy:
  41. none:
  42. defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGenerator
  43. props:
  44. sql.show: true

读写分离

配置项说明

  1. dataSources:
  2. ds_master: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: com.mysql.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/ds_master
  5. username: root
  6. password:
  7. ds_slave0: !!org.apache.commons.dbcp.BasicDataSource
  8. driverClassName: com.mysql.jdbc.Driver
  9. url: jdbc:mysql://localhost:3306/ds_slave0
  10. username: root
  11. password:
  12. ds_slave1: !!org.apache.commons.dbcp.BasicDataSource
  13. driverClassName: com.mysql.jdbc.Driver
  14. url: jdbc:mysql://localhost:3306/ds_slave1
  15. username: root
  16. password:
  17. masterSlaveRule:
  18. name: ds_ms
  19. masterDataSourceName: ds_master
  20. slaveDataSourceNames: [ds_slave0, ds_slave1]
  21. props:
  22. sql.show: true
  23. configMap:
  24. key1: value1

通过 MasterSlaveDataSourceFactory 工厂类创建 DataSource

  1. DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);

治理

配置项说明

  1. # 省略数据分片和读写分离配置
  2. orchestration:
  3. name: orchestration_ds
  4. overwrite: true
  5. registry:
  6. namespace: orchestration
  7. serverLists: localhost:2181

ShardingSphere-2.x

数据分片

配置项说明

  1. dataSources:
  2. db0: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: org.h2.Driver
  4. url: jdbc:h2:mem:db0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  5. username: sa
  6. password:
  7. maxActive: 100
  8. db1: !!org.apache.commons.dbcp.BasicDataSource
  9. driverClassName: org.h2.Driver
  10. url: jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  11. username: sa
  12. password:
  13. maxActive: 100
  14. shardingRule:
  15. tables:
  16. config:
  17. actualDataNodes: db${0..1}.t_config
  18. t_order:
  19. actualDataNodes: db${0..1}.t_order_${0..1}
  20. databaseStrategy:
  21. standard:
  22. shardingColumn: user_id
  23. preciseAlgorithmClassName: io.shardingjdbc.core.yaml.fixture.SingleAlgorithm
  24. tableStrategy:
  25. inline:
  26. shardingColumn: order_id
  27. algorithmInlineExpression: t_order_${order_id % 2}
  28. keyGeneratorColumnName: order_id
  29. keyGeneratorClass: io.shardingjdbc.core.yaml.fixture.IncrementKeyGenerator
  30. t_order_item:
  31. actualDataNodes: db${0..1}.t_order_item_${0..1}
  32. # 绑定表中其余的表的策略与第一张表的策略相同
  33. databaseStrategy:
  34. standard:
  35. shardingColumn: user_id
  36. preciseAlgorithmClassName: io.shardingjdbc.core.yaml.fixture.SingleAlgorithm
  37. tableStrategy:
  38. inline:
  39. shardingColumn: order_id
  40. algorithmInlineExpression: t_order_item_${order_id % 2}
  41. bindingTables:
  42. - t_order,t_order_item
  43. # 默认数据库分片策略
  44. defaultDatabaseStrategy:
  45. none:
  46. defaultTableStrategy:
  47. complex:
  48. shardingColumns: id, order_id
  49. algorithmClassName: io.shardingjdbc.core.yaml.fixture.MultiAlgorithm
  50. props:
  51. sql.show: true

读写分离

概念

为了缓解数据库压力,将写入和读取操作分离为不同数据源,写库称为主库,读库称为从库,一主库可配置多从库。

支持项

  1. 提供了一主多从的读写分离配置,可独立使用,也可配合分库分表使用。
  2. 独立使用读写分离支持SQL透传。
  3. 同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。
  4. Spring命名空间。
  5. 基于Hint的强制主库路由。

不支持范围

  1. 主库和从库的数据同步。
  2. 主库和从库的数据同步延迟导致的数据不一致。
  3. 主库双写或多写。

配置规则

  1. dataSources:
  2. db_master: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: org.h2.Driver
  4. url: jdbc:h2:mem:db_master;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  5. username: sa
  6. password:
  7. maxActive: 100
  8. db_slave_0: !!org.apache.commons.dbcp.BasicDataSource
  9. driverClassName: org.h2.Driver
  10. url: jdbc:h2:mem:db_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  11. username: sa
  12. password:
  13. maxActive: 100
  14. db_slave_1: !!org.apache.commons.dbcp.BasicDataSource
  15. driverClassName: org.h2.Driver
  16. url: jdbc:h2:mem:db_slave_1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  17. username: sa
  18. password:
  19. maxActive: 100
  20. masterSlaveRule:
  21. name: db_ms
  22. masterDataSourceName: db_master
  23. slaveDataSourceNames: [db_slave_0, db_slave_1]
  24. configMap:
  25. key1: value1

通过 MasterSlaveDataSourceFactory 工厂类创建 DataSource

  1. DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);

治理

配置项说明

Zookeeper分库分表编排配置项说明

  1. dataSources: 数据源配置
  2. shardingRule: 分片规则配置
  3. orchestration: Zookeeper编排配置
  4. name: 编排服务节点名称
  5. overwrite: 本地配置是否可覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准
  6. zookeeper: Zookeeper注册中心配置
  7. namespace: Zookeeper的命名空间
  8. serverLists: 连接Zookeeper服务器的列表。包括IP地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
  9. baseSleepTimeMilliseconds: 等待重试的间隔时间的初始值。单位:毫秒
  10. maxSleepTimeMilliseconds: 等待重试的间隔时间的最大值。单位:毫秒
  11. maxRetries: 最大重试次数
  12. sessionTimeoutMilliseconds: 会话超时时间。单位:毫秒
  13. connectionTimeoutMilliseconds: 连接超时时间。单位:毫秒
  14. digest: 连接Zookeeper的权限令牌。缺省为不需要权限验证

Etcd分库分表编排配置项说明

  1. dataSources: 数据源配置
  2. shardingRule: 分片规则配置
  3. orchestration: Etcd编排配置
  4. name: 编排服务节点名称
  5. overwrite: 本地配置是否可覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准
  6. etcd: Etcd注册中心配置
  7. serverLists: 连接Etcd服务器的列表。包括IP地址和端口号。多个地址用逗号分隔。如: http://host1:2379,http://host2:2379
  8. timeToLiveSeconds: 临时节点存活时间。单位:秒
  9. timeoutMilliseconds: 每次请求的超时时间。单位:毫秒
  10. maxRetries: 每次请求的最大重试次数
  11. retryIntervalMilliseconds: 重试间隔时间。单位:毫秒

分库分表编排数据源构建方式

  1. DataSource dataSource = OrchestrationShardingDataSourceFactory.createDataSource(yamlFile);

读写分离数据源构建方式

  1. DataSource dataSource = OrchestrationMasterSlaveDataSourceFactory.createDataSource(yamlFile);