背景信息 #
通过 YAML 格式配置异构双写,能够快速地理解数据库防火墙规则之间的依赖关系,DBPlusEngine 会根据 YAML 配置,自动完成对象的创建,减少用户不必要的编码工作。
参数解释 #
rules:
- !DUAL_WRITE
dataSources:
dual_write_ds:
# 主数据源(双写退化后以主数据为准,单写单读)
primaryDataSourceName: oracle_ds
# 写数据源
writeDataSourceNames:
- oracle_ds
- mysql_ds
# 读数据源
readDataSourceNames:
- oracle_ds
- mysql_ds
# 读流量拦截器,拦截的流量进行读负载均衡(可选,不配置拦截全部读流量)
interceptorName: sql_interceptor
# 读流量负载均衡算法(可选,默认为 ROUND_ROBIN)
loadBalancerName: random
loadBalancers:
random:
type: RANDOM
interceptors:
sql_interceptor:
# 按照 SQL 匹配拦截,多条 SQL 使用分号分隔
type: SphereEx:SQL_INTERCEPT
props:
sqls: SELECT * FROM t_order;
table_interceptor:
# 按照表名匹配拦截,SQL 中包含任意表则匹配成功
type: SphereEx:TABLE_INTERCEPT
props:
tables: t_order, t_order_item
regex_interceptor:
# 按照正则匹配 SQL 拦截
type: SphereEx:REGEX_INTERCEPT
props:
regex: (?i)^(WITH|SELECT).*WHERE user_id.*
# 主键生成策略(可选参数)
keyGenerateStrategies:
t_address:
keyGenerateColumn: id
keyGeneratorName: snowflake
keyGenerators:
snowflake:
# 支持现有 Sharding 中的 SNOWFLAKE、UUID、NANOID,以及新增加 Redis 支持
type: SNOWFLAKE
props:
# 存储节点心跳检测间隔
storage-node-heartbeat-interval-milliseconds: 5
# 存储节点心跳检测重试次数
storage-node-heartbeat-retry-times: 3
算法类型的详情,请参见内置算法 - 异构双写拦截器算法、内置算法 - 负载均衡算法 以及 内置算法 - 分布式序列算法。
操作步骤 #
- 在 YAML 文件中配置异构双写规则,包含数据源、双写规则、全局属性等配置项;
- 根据 YAML 文件中的配置信息创建对象。
配置示例 #
数据脱敏 YAML 配置如下:
dataSources:
unique_ds:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/demo_ds?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: root
password:
rules:
- !DUAL_WRITE
dataSources:
dual_write_ds:
primaryDataSourceName: oracle_ds
writeDataSourceNames:
- oracle_ds
- mysql_ds
readDataSourceNames:
- oracle_ds
- mysql_ds
interceptorName: sql_interceptor
loadBalancerName: random
loadBalancers:
random:
type: RANDOM
interceptors:
sql_interceptor:
type: SphereEx:SQL_INTERCEPT
props:
sqls: SELECT * FROM t_order;
keyGenerateStrategies:
t_address:
keyGenerateColumn: id
keyGeneratorName: snowflake
keyGenerators:
snowflake:
type: SNOWFLAKE