blob: c1a6232482541b283522c13cde4b458985e984c2 [file] [log] [blame]
commit bbd2e1d6ebacd0db3ab4c341f14d7d6b8b376798
Author: yx9o <yangx_soft@163.com>
Date: Wed Aug 4 11:40:45 2021 +0800
Issue #10980 (#11624)
diff --git a/docs/document/content/others/api-change-history/shardingsphere-jdbc/yaml-configuration.en.md b/docs/document/content/others/api-change-history/shardingsphere-jdbc/yaml-configuration.en.md
new file mode 100644
index 0000000000..577cb8bae3
--- /dev/null
+++ b/docs/document/content/others/api-change-history/shardingsphere-jdbc/yaml-configuration.en.md
@@ -0,0 +1,586 @@
++++
+title = "YAML configuration"
+weight = 1
++++
+
+## 5.0.0-alpha
+
+### Data Sharding
+
+#### Configuration Item Explanation
+
+```yaml
+dataSources: # Omit the data source configuration, please refer to the usage
+
+rules:
+- !SHARDING
+ tables: # Sharding table configuration
+ <logic-table-name> (+): # Logic table name
+ actualDataNodes (?): # Describe data source names and actual tables (refer to Inline syntax rules)
+ databaseStrategy (?): # Databases sharding strategy, use default databases sharding strategy if absent. sharding strategy below can choose only one.
+ standard: # For single sharding column scenario
+ shardingColumn: # Sharding column name
+ shardingAlgorithmName: # Sharding algorithm name
+ complex: # For multiple sharding columns scenario
+ shardingColumns: # Sharding column names, multiple columns separated with comma
+ shardingAlgorithmName: # Sharding algorithm name
+ hint: # Sharding by hint
+ shardingAlgorithmName: # Sharding algorithm name
+ none: # Do not sharding
+ tableStrategy: # Tables sharding strategy, same as database sharding strategy
+ keyGenerateStrategy: # Key generator strategy
+ column: # Column name of key generator
+ keyGeneratorName: # Key generator name
+ autoTables: # Auto Sharding table configuration
+ t_order_auto: # Logic table name
+ actualDataSources (?): # Data source names
+ shardingStrategy: # Sharding strategy
+ standard: # For single sharding column scenario
+ shardingColumn: # Sharding column name
+ shardingAlgorithmName: # Auto sharding algorithm name
+ bindingTables (+): # Binding tables
+ - <logic_table_name_1, logic_table_name_2, ...>
+ - <logic_table_name_1, logic_table_name_2, ...>
+ broadcastTables (+): # Broadcast tables
+ - <table-name>
+ - <table-name>
+ defaultDatabaseStrategy: # Default strategy for database sharding
+ defaultTableStrategy: # Default strategy for table sharding
+ defaultKeyGenerateStrategy: # Default Key generator strategy
+
+ # Sharding algorithm configuration
+ shardingAlgorithms:
+ <sharding-algorithm-name> (+): # Sharding algorithm name
+ type: # Sharding algorithm type
+ props: # Sharding algorithm properties
+ # ...
+
+ # Key generate algorithm configuration
+ keyGenerators:
+ <key-generate-algorithm-name> (+): # Key generate algorithm name
+ type: # Key generate algorithm type
+ props: # Key generate algorithm properties
+ # ...
+
+props:
+ # ...
+```
+
+### Replica Query
+
+#### Configuration Item Explanation
+
+```yaml
+dataSources: # Omit the data source configuration, please refer to the usage
+
+rules:
+- !REPLICA_QUERY
+ dataSources:
+ <data-source-name> (+): # Logic data source name of replica query
+ primaryDataSourceName: # Primary data source name
+ replicaDataSourceNames:
+ - <replica-data_source-name> (+) # Replica data source name
+ loadBalancerName: # Load balance algorithm name
+
+ # Load balance algorithm configuration
+ loadBalancers:
+ <load-balancer-name> (+): # Load balance algorithm name
+ type: # Load balance algorithm type
+ props: # Load balance algorithm properties
+ # ...
+
+props:
+ # ...
+```
+
+Please refer to [Built-in Load Balance Algorithm List](/en/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/load-balance) for more details about type of algorithm.
+
+### Encryption
+
+#### Configuration Item Explanation
+
+```yaml
+dataSource: # Omit the data source configuration, please refer to the usage
+
+rules:
+- !ENCRYPT
+ tables:
+ <table-name> (+): # Encrypt table name
+ columns:
+ <column-name> (+): # Encrypt logic column name
+ cipherColumn: # Cipher column name
+ assistedQueryColumn (?): # Assisted query column name
+ plainColumn (?): # Plain column name
+ encryptorName: # Encrypt algorithm name
+
+ # Encrypt algorithm configuration
+ encryptors:
+ <encrypt-algorithm-name> (+): # Encrypt algorithm name
+ type: # Encrypt algorithm type
+ props: # Encrypt algorithm properties
+ # ...
+
+ queryWithCipherColumn: # Whether query with cipher column for data encrypt. User you can use plaintext to query if have
+```
+
+Please refer to [Built-in Encrypt Algorithm List](/en/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/encrypt) for more details about type of algorithm.
+
+### Shadow DB
+
+#### Configuration Item Explanation
+
+```yaml
+dataSources: # Omit the data source configuration, please refer to the usage
+
+rules:
+- !SHADOW
+ column: # Shadow column name
+ sourceDataSourceNames: # Source Data Source names
+ # ...
+ shadowDataSourceNames: # Shadow Data Source names
+ # ...
+
+props:
+ # ...
+```
+
+### Governance
+
+#### Configuration Item Explanation
+
+```yaml
+governance:
+ name: # Governance name
+ registryCenter: # Registry center
+ type: # Governance instance type. Example:Zookeeper, etcd
+ serverLists: # The list of servers that connect to governance instance, including IP and port number; use commas to separate
+ overwrite: # Whether to overwrite local configurations with config center configurations; if it can, each initialization should refer to local configurations
+```
+
+## ShardingSphere-4.x
+
+### Data Sharding
+
+#### Configuration Item Explanation
+
+```yaml
+dataSources:
+ ds0: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds0
+ username: root
+ password:
+ ds1: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds1
+ username: root
+ password:
+
+shardingRule:
+ tables:
+ t_order:
+ actualDataNodes: ds${0..1}.t_order${0..1}
+ databaseStrategy:
+ inline:
+ shardingColumn: user_id
+ algorithmExpression: ds${user_id % 2}
+ tableStrategy:
+ inline:
+ shardingColumn: order_id
+ algorithmExpression: t_order${order_id % 2}
+ keyGenerator:
+ type: SNOWFLAKE
+ column: order_id
+ t_order_item:
+ actualDataNodes: ds${0..1}.t_order_item${0..1}
+ databaseStrategy:
+ inline:
+ shardingColumn: user_id
+ algorithmExpression: ds${user_id % 2}
+ tableStrategy:
+ inline:
+ shardingColumn: order_id
+ algorithmExpression: t_order_item${order_id % 2}
+ bindingTables:
+ - t_order,t_order_item
+ broadcastTables:
+ - t_config
+
+ defaultDataSourceName: ds0
+ defaultTableStrategy:
+ none:
+ defaultKeyGenerator:
+ type: SNOWFLAKE
+ column: order_id
+
+props:
+ sql.show: true
+```
+
+### Read-Write Split
+
+#### Configuration Item Explanation
+
+```yaml
+dataSources:
+ ds_master: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds_master
+ username: root
+ password:
+ ds_slave0: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds_slave0
+ username: root
+ password:
+ ds_slave1: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds_slave1
+ username: root
+ password:
+
+masterSlaveRule:
+ name: ds_ms
+ masterDataSourceName: ds_master
+ slaveDataSourceNames: [ds_slave0, ds_slave1]
+
+props:
+ sql.show: true
+```
+
+Create a `DataSource` through the `YamlMasterSlaveDataSourceFactory` factory class:
+
+```java
+DataSource dataSource = YamlMasterSlaveDataSourceFactory.createDataSource(yamlFile);
+```
+
+### Data Masking
+
+#### Configuration Item Explanation
+
+```yaml
+dataSource: !!org.apache.commons.dbcp2.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://127.0.0.1:3306/encrypt?serverTimezone=UTC&useSSL=false
+ username: root
+ password:
+
+encryptRule:
+ encryptors:
+ encryptor_aes:
+ type: aes
+ props:
+ aes.key.value: 123456abc
+ encryptor_md5:
+ type: md5
+ tables:
+ t_encrypt:
+ columns:
+ user_id:
+ plainColumn: user_plain
+ cipherColumn: user_cipher
+ encryptor: encryptor_aes
+ order_id:
+ cipherColumn: order_cipher
+ encryptor: encryptor_md5
+props:
+ query.with.cipher.column: true # use ciphertext column query
+```
+
+### Orchestration
+
+#### Configuration Item Explanation
+
+```yaml
+# Omit data sharding, Read-Write split, and Data masking configuration.
+
+orchestration:
+ name: orchestration_ds
+ overwrite: true
+ registry:
+ type: zookeeper
+ namespace: orchestration
+ serverLists: localhost:2181
+```
+
+## ShardingSphere-3.x
+
+### Data Sharding
+
+#### Configuration Item Explanation
+
+```yaml
+dataSources:
+ ds0: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds0
+ username: root
+ password:
+ ds1: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds1
+ username: root
+ password:
+
+shardingRule:
+ tables:
+ t_order:
+ actualDataNodes: ds${0..1}.t_order${0..1}
+ databaseStrategy:
+ inline:
+ shardingColumn: user_id
+ algorithmExpression: ds${user_id % 2}
+ tableStrategy:
+ inline:
+ shardingColumn: order_id
+ algorithmExpression: t_order${order_id % 2}
+ keyGeneratorColumnName: order_id
+ t_order_item:
+ actualDataNodes: ds${0..1}.t_order_item${0..1}
+ databaseStrategy:
+ inline:
+ shardingColumn: user_id
+ algorithmExpression: ds${user_id % 2}
+ tableStrategy:
+ inline:
+ shardingColumn: order_id
+ algorithmExpression: t_order_item${order_id % 2}
+ bindingTables:
+ - t_order,t_order_item
+ broadcastTables:
+ - t_config
+
+ defaultDataSourceName: ds0
+ defaultTableStrategy:
+ none:
+ defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGenerator
+
+props:
+ sql.show: true
+```
+
+### Read-Write Split
+
+#### Configuration Item Explanation
+
+```yaml
+dataSources:
+ ds_master: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds_master
+ username: root
+ password:
+ ds_slave0: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds_slave0
+ username: root
+ password:
+ ds_slave1: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: com.mysql.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ds_slave1
+ username: root
+ password:
+
+masterSlaveRule:
+ name: ds_ms
+ masterDataSourceName: ds_master
+ slaveDataSourceNames: [ds_slave0, ds_slave1]
+ props:
+ sql.show: true
+ configMap:
+ key1: value1
+```
+
+Create a `DataSource` through the `YamlMasterSlaveDataSourceFactory` factory class:
+
+```java
+DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);
+```
+
+### Orchestration
+
+#### Configuration Item Explanation
+
+```yaml
+# Omit data sharding, Read-Write split configuration.
+
+orchestration:
+ name: orchestration_ds
+ overwrite: true
+ registry:
+ namespace: orchestration
+ serverLists: localhost:2181
+```
+
+## ShardingSphere-2.x
+
+### Data Sharding
+
+#### Configuration Item Explanation
+
+```yaml
+dataSources:
+ db0: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: org.h2.Driver
+ url: jdbc:h2:mem:db0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
+ username: sa
+ password:
+ maxActive: 100
+ db1: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: org.h2.Driver
+ url: jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
+ username: sa
+ password:
+ maxActive: 100
+
+shardingRule:
+ tables:
+ config:
+ actualDataNodes: db${0..1}.t_config
+ t_order:
+ actualDataNodes: db${0..1}.t_order_${0..1}
+ databaseStrategy:
+ standard:
+ shardingColumn: user_id
+ preciseAlgorithmClassName: io.shardingjdbc.core.yaml.fixture.SingleAlgorithm
+ tableStrategy:
+ inline:
+ shardingColumn: order_id
+ algorithmInlineExpression: t_order_${order_id % 2}
+ keyGeneratorColumnName: order_id
+ keyGeneratorClass: io.shardingjdbc.core.yaml.fixture.IncrementKeyGenerator
+ t_order_item:
+ actualDataNodes: db${0..1}.t_order_item_${0..1}
+ # The strategy of binding the rest of the tables in the table is the same as the strategy of the first table
+ databaseStrategy:
+ standard:
+ shardingColumn: user_id
+ preciseAlgorithmClassName: io.shardingjdbc.core.yaml.fixture.SingleAlgorithm
+ tableStrategy:
+ inline:
+ shardingColumn: order_id
+ algorithmInlineExpression: t_order_item_${order_id % 2}
+ bindingTables:
+ - t_order,t_order_item
+ # Default database sharding strategy
+ defaultDatabaseStrategy:
+ none:
+ defaultTableStrategy:
+ complex:
+ shardingColumns: id, order_id
+ algorithmClassName: io.shardingjdbc.core.yaml.fixture.MultiAlgorithm
+ props:
+ sql.show: true
+```
+
+### Read-Write Split
+
+#### concept
+
+In order to relieve the pressure on the database, the write and read operations are separated into different data sources. The write library is called the master library, and the read library is called the slave library. One master library can be configured with multiple slave libraries.
+
+#### Support item
+
+1. Provides a read-write separation configuration with one master and multiple slaves, which can be used independently or with sub-databases and sub-meters.
+2. Independent use of read-write separation to support SQL transparent transmission.
+3. In the same thread and the same database connection, if there is a write operation, subsequent read operations will be read from the main library to ensure data consistency.
+4. Spring namespace.
+5. Hint-based mandatory main library routing.
+
+#### Unsupported item
+
+1. Data synchronization between the master library and the slave library.
+2. Data inconsistency caused by the data synchronization delay of the master library and the slave library.
+3. Double writing or multiple writing in the main library.
+
+#### rule configuration
+
+```yaml
+dataSources:
+ db_master: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: org.h2.Driver
+ url: jdbc:h2:mem:db_master;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
+ username: sa
+ password:
+ maxActive: 100
+ db_slave_0: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: org.h2.Driver
+ url: jdbc:h2:mem:db_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
+ username: sa
+ password:
+ maxActive: 100
+ db_slave_1: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: org.h2.Driver
+ url: jdbc:h2:mem:db_slave_1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
+ username: sa
+ password:
+ maxActive: 100
+
+masterSlaveRule:
+ name: db_ms
+ masterDataSourceName: db_master
+ slaveDataSourceNames: [db_slave_0, db_slave_1]
+ configMap:
+ key1: value1
+```
+
+Create a `DataSource` through the `MasterSlaveDataSourceFactory` factory class:
+
+```java
+DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);
+```
+
+### Orchestration
+
+#### Configuration Item Explanation
+
+Zookeeper sharding table and database Orchestration Configuration Item Explanation
+
+```yaml
+dataSources: Data sources configuration
+
+shardingRule: Sharding rule configuration
+
+orchestration: Zookeeper Orchestration Configuration
+ name: Orchestration name
+ overwrite: Whether to overwrite local configurations with config center configurations; if it can, each initialization should refer to local configurations
+ zookeeper: Registry center Configuration
+ namespace: Registry center namespace
+ serverLists: The list of servers that connect to governance instance, including IP and port number, use commas to separate, such as: host1:2181,host2:2181
+ baseSleepTimeMilliseconds: The initial millisecond value of the interval to wait for retry
+ maxSleepTimeMilliseconds: The maximum millisecond value of the interval to wait for retry
+ maxRetries: The maximum retry count
+ sessionTimeoutMilliseconds: The session timeout milliseconds
+ connectionTimeoutMilliseconds: The connecton timeout milliseconds
+ digest: Permission token to connect to Zookeeper. default no authorization is required
+```
+
+Etcd sharding table and database Orchestration Configuration Item Explanation
+
+```yaml
+dataSources: Data sources configuration
+
+shardingRule: Sharding rule configuration
+
+orchestration: Etcd Orchestration Configuration
+ name: Orchestration name
+ overwrite: Whether to overwrite local configurations with config center configurations; if it can, each initialization should refer to local configurations
+ etcd: Registry center Configuration
+ serverLists: The list of servers that connect to governance instance, including IP and port number, use commas to separate, such as: http://host1:2379,http://host2:2379
+ timeToLiveSeconds: Time to live seconds for ephemeral nodes
+ timeoutMilliseconds: The request timeout milliseconds
+ maxRetries: The maximum retry count
+ retryIntervalMilliseconds: The retry interval milliseconds
+```
+
+Sharding table and database Data source construction method
+
+```java
+DataSource dataSource = OrchestrationShardingDataSourceFactory.createDataSource(yamlFile);
+```
+
+Read-Write split Data source construction method
+
+```java
+DataSource dataSource = OrchestrationMasterSlaveDataSourceFactory.createDataSource(yamlFile);
+```