数据分片

背景信息

数据分片 YAML 配置方式具有非凡的可读性,通过 YAML 格式,能够快速地理解分片规则之间的依赖关系,ShardingSphere 会根据 YAML 配置,自动完成 ShardingSphereDataSource 对象的创建,减少用户不必要的编码工作。

参数解释

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

操作步骤

  1. 在 YAML 文件中配置数据分片规则,包含数据源、分片规则、全局属性等配置项;
  2. 调用 YamlShardingSphereDataSourceFactory 对象的 createDataSource 方法,根据 YAML 文件中的配置信息创建 ShardingSphereDataSource。

配置示例

数据分片 YAML 配置示例如下:

  1. dataSources:
  2. ds_0:
  3. dataSourceClassName: com.zaxxer.hikari.HikariDataSource
  4. driverClassName: com.mysql.jdbc.Driver
  5. jdbcUrl: jdbc:mysql://localhost:3306/demo_ds_0?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
  6. username: root
  7. password:
  8. ds_1:
  9. dataSourceClassName: com.zaxxer.hikari.HikariDataSource
  10. driverClassName: com.mysql.jdbc.Driver
  11. jdbcUrl: jdbc:mysql://localhost:3306/demo_ds_1?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
  12. username: root
  13. password:
  14. rules:
  15. - !SHARDING
  16. tables:
  17. t_order:
  18. actualDataNodes: ds_${0..1}.t_order_${0..1}
  19. tableStrategy:
  20. standard:
  21. shardingColumn: order_id
  22. shardingAlgorithmName: t_order_inline
  23. keyGenerateStrategy:
  24. column: order_id
  25. keyGeneratorName: snowflake
  26. auditStrategy:
  27. auditorNames:
  28. - sharding_key_required_auditor
  29. allowHintDisable: true
  30. t_order_item:
  31. actualDataNodes: ds_${0..1}.t_order_item_${0..1}
  32. tableStrategy:
  33. standard:
  34. shardingColumn: order_id
  35. shardingAlgorithmName: t_order_item_inline
  36. keyGenerateStrategy:
  37. column: order_item_id
  38. keyGeneratorName: snowflake
  39. t_account:
  40. actualDataNodes: ds_${0..1}.t_account_${0..1}
  41. tableStrategy:
  42. standard:
  43. shardingAlgorithmName: t_account_inline
  44. keyGenerateStrategy:
  45. column: account_id
  46. keyGeneratorName: snowflake
  47. defaultShardingColumn: account_id
  48. bindingTables:
  49. - t_order,t_order_item
  50. broadcastTables:
  51. - t_address
  52. defaultDatabaseStrategy:
  53. standard:
  54. shardingColumn: user_id
  55. shardingAlgorithmName: database_inline
  56. defaultTableStrategy:
  57. none:
  58. shardingAlgorithms:
  59. database_inline:
  60. type: INLINE
  61. props:
  62. algorithm-expression: ds_${user_id % 2}
  63. t_order_inline:
  64. type: INLINE
  65. props:
  66. algorithm-expression: t_order_${order_id % 2}
  67. t_order_item_inline:
  68. type: INLINE
  69. props:
  70. algorithm-expression: t_order_item_${order_id % 2}
  71. t_account_inline:
  72. type: INLINE
  73. props:
  74. algorithm-expression: t_account_${account_id % 2}
  75. keyGenerators:
  76. snowflake:
  77. type: SNOWFLAKE
  78. auditors:
  79. sharding_key_required_auditor:
  80. type: DML_SHARDING_CONDITIONS
  81. props:
  82. sql-show: false

通过 YamlShardingSphereDataSourceFactory 的 createDataSource 方法,读取 YAML 配置完成数据源的创建。

  1. YamlShardingSphereDataSourceFactory.createDataSource(getFile("/META-INF/sharding-databases-tables.yaml"));

相关参考