环境
- 在192.168.10.134服务器(shardingproxy)上部署的ShardingSphere-Proxy代理192.168.10.132服务器和192.168.10.133服务器;
- 之前在192.168.10.132服务器(node1-shardingsphere)和192.168.10.133服务器(node2-shardingsphere)配置的MySQL读写分离一主一从架构;
- 同步的是数据库test;
配置示例
config-readwrite-splitting.yaml
#schemaName用来指定->逻辑表名
schemaName: readwrite_splitting_db
dataSources:
write_ds:
url: jdbc:mysql://192.168.10.132:3306/test?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
username: root
password: root
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
read_ds_0:
url: jdbc:mysql://192.168.10.133:3306/test?serverTimezone=UTC&useSSL=false&characterEncoding=utf-8
username: root
password: root
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
rules:
- !READWRITE_SPLITTING
dataSources:
readwrite_ds:
staticStrategy:
writeDataSourceName: write_ds
readDataSourceNames:
- read_ds_0
在 ShardingSphere 的配置中,schemaName
通常用来指定逻辑数据库名,即在 ShardingSphere 管理下的虚拟数据库名。这个逻辑数据库名与实际物理数据库名(如 test
)并不相同,它是 ShardingSphere 中用来组织逻辑表、数据源映射、规则应用的一个抽象概念。应用程序通过连接到这个逻辑数据库名来与 ShardingSphere 交互,由 ShardingSphere 根据配置的规则进行内部的数据源路由、分片、读写分离等操作。
对于您提供的配置示例,schemaName: readwrite_splitting_db
表示您创建了一个名为 readwrite_splitting_db
的逻辑数据库。这个逻辑数据库包含了读写分离规则,使得应用程序在访问 readwrite_splitting_db
时,写操作会被路由到 write_ds
数据源,读操作会被路由到 read_ds_0
数据源。
至于您提到的 schemaName
是否可以是实际数据库名 test
,答案是可以,但这样做通常不符合 ShardingSphere 的设计理念和最佳实践。原因如下:
- 逻辑隔离:使用与实际数据库名不同的
schemaName
可以实现逻辑上的隔离。这样,即使物理数据库名发生变更,应用程序连接的逻辑数据库名保持不变,无需修改应用代码。同时,逻辑数据库名也能更好地反映其在 ShardingSphere 管理下的特殊角色,比如在您的案例中,readwrite_splitting_db
明确表示这是一个用于读写分离的逻辑数据库。 - 避免混淆:直接使用实际数据库名作为
schemaName
可能导致混淆,特别是当您有多个物理数据库且它们在 ShardingSphere 中有不同的角色(如分片、读写分离等)时。使用不同的逻辑数据库名有助于清晰地区分不同功能的逻辑数据库。 - 扩展性:随着业务发展,可能需要对数据库进行更复杂的分片、多租户等操作,这时逻辑数据库名作为 ShardingSphere 管理的入口,具有良好的扩展性。如果一开始就使用实际数据库名,后续调整可能会带来不必要的麻烦。
综上所述,虽然理论上可以将 schemaName
设置为实际数据库名 test
,但为了保持逻辑隔离、避免混淆并考虑到未来的扩展性,建议使用与物理数据库名不同的逻辑名称,如您配置中的 readwrite_splitting_db
。这样可以更好地利用 ShardingSphere 提供的抽象层,实现对数据库操作的灵活管理和控制。