混合规则

背景信息

ShardingSphere 涵盖了很多功能,例如,分库分片、读写分离、高可用、数据加密等。这些功能用户可以单独进行使用,也可以配合一起使用,下面是基于 YAML 的参数解释和配置示例。

参数解释

  1. rules:
  2. - !SHARDING
  3. tables:
  4. <logic_table_name>: # 逻辑表名称:
  5. actualDataNodes: # 由逻辑数据源名 + 表名组成(参考 Inline 语法规则)
  6. tableStrategy: # 分表策略,同分库策略
  7. standard:
  8. shardingColumn: # 分片列名称
  9. shardingAlgorithmName: # 分片算法名称
  10. keyGenerateStrategy:
  11. column: # 自增列名称,缺省表示不使用自增主键生成器
  12. keyGeneratorName: # 分布式序列算法名称
  13. defaultDatabaseStrategy:
  14. standard:
  15. shardingColumn: # 分片列名称
  16. shardingAlgorithmName: # 分片算法名称
  17. shardingAlgorithms:
  18. <sharding_algorithm_name>: # 分片算法名称
  19. type: INLINE
  20. props:
  21. algorithm-expression: # INLINE 表达式
  22. t_order_inline:
  23. type: INLINE
  24. props:
  25. algorithm-expression: # INLINE 表达式
  26. keyGenerators:
  27. <key_generate_algorithm_name> (+): # 分布式序列算法名称
  28. type: # 分布式序列算法类型
  29. props: # 分布式序列算法属性配置
  30. - !READWRITE_SPLITTING
  31. dataSources:
  32. <data_source_name>: # 读写分离逻辑数据源名称
  33. dynamicStrategy: # 读写分离类型
  34. autoAwareDataSourceName: # 数据库发现逻辑数据源名称
  35. <data_source_name>: # 读写分离逻辑数据源名称
  36. dynamicStrategy: # 读写分离类型
  37. autoAwareDataSourceName: # 数据库发现逻辑数据源名称
  38. - !DB_DISCOVERY
  39. dataSources:
  40. <data_source_name>:
  41. dataSourceNames: # 数据源名称列表
  42. - ds_0
  43. - ds_1
  44. - ds_2
  45. discoveryHeartbeatName: # 检测心跳名称
  46. discoveryTypeName: # 数据库发现类型名称
  47. <data_source_name>:
  48. dataSourceNames: # 数据源名称列表
  49. - ds_3
  50. - ds_4
  51. - ds_5
  52. discoveryHeartbeatName: # 检测心跳名称
  53. discoveryTypeName: # 数据库发现类型名称
  54. discoveryHeartbeats:
  55. <discovery_heartbeat_name>: # 心跳名称
  56. props:
  57. keep-alive-cron: # cron 表达式,如:'0/5 * * * * ?'
  58. discoveryTypes:
  59. <discovery_type_name>: # 数据库发现类型名称
  60. type: # 数据库发现类型,如:MySQL.MGR
  61. props:
  62. group-name: # 数据库发现类型必要参数,如 MGR 的 group-name
  63. - !ENCRYPT
  64. encryptors:
  65. <encrypt_algorithm_name> (+): # 加解密算法名称
  66. type: # 加解密算法类型
  67. props: # 加解密算法属性配置
  68. <encrypt_algorithm_name> (+): # 加解密算法名称
  69. type: # 加解密算法类型
  70. tables:
  71. <table_name>: # 加密表名称
  72. columns:
  73. <column_name> (+): # 加密列名称
  74. plainColumn (?): # 原文列名称
  75. cipherColumn: # 密文列名称
  76. encryptorName: # 密文列加密算法名称
  77. assistedQueryColumn (?): # 查询辅助列名称
  78. assistedQueryEncryptorName: # 查询辅助列加密算法名称
  79. likeQueryColumn (?): # 模糊查询列名称
  80. likeQueryEncryptorName: # 模糊查询列加密算法名称
  81. queryWithCipherColumn(?): # 该表是否使用加密列进行查询

配置示例

  1. rules:
  2. - !SHARDING
  3. tables:
  4. t_order:
  5. actualDataNodes: replica_ds_${0..1}.t_order_${0..1}
  6. tableStrategy:
  7. standard:
  8. shardingColumn: order_id
  9. shardingAlgorithmName: t_order_inline
  10. keyGenerateStrategy:
  11. column: order_id
  12. keyGeneratorName: snowflake
  13. defaultDatabaseStrategy:
  14. standard:
  15. shardingColumn: user_id
  16. shardingAlgorithmName: database_inline
  17. shardingAlgorithms:
  18. database_inline:
  19. type: INLINE
  20. props:
  21. algorithm-expression: replica_ds_${user_id % 2}
  22. t_order_inline:
  23. type: INLINE
  24. props:
  25. algorithm-expression: t_order_${order_id % 2}
  26. t_order_item_inline:
  27. type: INLINE
  28. props:
  29. algorithm-expression: t_order_item_${order_id % 2}
  30. keyGenerators:
  31. snowflake:
  32. type: SNOWFLAKE
  33. - !READWRITE_SPLITTING
  34. dataSources:
  35. replica_ds_0:
  36. dynamicStrategy:
  37. autoAwareDataSourceName: readwrite_ds_0
  38. replica_ds_1:
  39. dynamicStrategy:
  40. autoAwareDataSourceName: readwrite_ds_1
  41. - !DB_DISCOVERY
  42. dataSources:
  43. readwrite_ds_0:
  44. dataSourceNames:
  45. - ds_0
  46. - ds_1
  47. - ds_2
  48. discoveryHeartbeatName: mgr_heartbeat
  49. discoveryTypeName: mgr
  50. readwrite_ds_1:
  51. dataSourceNames:
  52. - ds_3
  53. - ds_4
  54. - ds_5
  55. discoveryHeartbeatName: mgr_heartbeat
  56. discoveryTypeName: mgr
  57. discoveryHeartbeats:
  58. mgr_heartbeat:
  59. props:
  60. keep-alive-cron: '0/5 * * * * ?'
  61. discoveryTypes:
  62. mgr:
  63. type: MySQL.MGR
  64. props:
  65. group-name: 558edd3c-02ec-11ea-9bb3-080027e39bd2
  66. - !ENCRYPT
  67. encryptors:
  68. aes_encryptor:
  69. type: AES
  70. props:
  71. aes-key-value: 123456abc
  72. md5_encryptor:
  73. type: MD5
  74. like_encryptor:
  75. type: CHAR_DIGEST_LIKE
  76. tables:
  77. t_encrypt:
  78. columns:
  79. user_id:
  80. plainColumn: user_plain
  81. cipherColumn: user_cipher
  82. encryptorName: aes_encryptor
  83. assistedQueryColumn: assisted_query_user
  84. assistedQueryEncryptorName: aes_encryptor
  85. likeQueryColumn: like_query_user
  86. likeQueryEncryptorName: like_encryptor
  87. order_id:
  88. cipherColumn: order_cipher
  89. encryptorName: md5_encryptor
  90. queryWithCipherColumn: true