YAML configuration
5.0.0-alpha
Data Sharding
Configuration Item Explanation
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
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 for more details about type of algorithm.
Encryption
Configuration Item Explanation
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 for more details about type of algorithm.
Shadow DB
Configuration Item Explanation
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
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
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
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:
DataSource dataSource = YamlMasterSlaveDataSourceFactory.createDataSource(yamlFile);
Data Masking
Configuration Item Explanation
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
# 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
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
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:
DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);
Orchestration
Configuration Item Explanation
# 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
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.
Supported
- Provides a read-write separation configuration with one master and multiple slaves, which can be used independently or with sub-databases and sub-meters.
- Independent use of read-write separation to support SQL transparent transmission.
- 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.
- Spring namespace.
- Hint-based mandatory main library routing.
Unsupported
- Data synchronization between the master library and the slave library.
- Data inconsistency caused by the data synchronization delay of the master library and the slave library.
- Double writing or multiple writing in the main library.
rule configuration
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:
DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);
Orchestration
Configuration Item Explanation
Zookeeper sharding table and database Orchestration Configuration Item Explanation
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
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
DataSource dataSource = OrchestrationShardingDataSourceFactory.createDataSource(yamlFile);
Read-Write split Data source construction method
DataSource dataSource = OrchestrationMasterSlaveDataSourceFactory.createDataSource(yamlFile);