silverstripe-australia / silverstripe-splitdb
提供配置独立的读写数据库连接的功能
1.0.0
2015-09-29 04:06 UTC
Requires
This package is auto-updated.
Last update: 2024-08-29 04:00:16 UTC
README
本模块包含数据库查询的读写分离实现,允许实现主从数据库部署
基本用法
对于数据库无关的特性,请阅读'ReadWriteSplitterAspect'部分。对于针对MySQL的自定义数据库类,请阅读'ReadWriteMySQLDatabase'部分。
ReadWriteSplitterAspect
使用此特性将读取查询定向到特定数据库,并将写入查询(即修改查询)定向到特定的主服务器(这些服务器正在复制到从服务器)。假设复制由外部管理。
在你的项目中添加如下配置:
Injector:
WriteMySQLDatabase:
class: MySQLDatabase
constructor:
- type: MySQLDatabase
server: write.master.database.hostname
username: user
password: pass
database: project_database
ProxiedMySQLDatabase:
class: MySQLDatabase
constructor:
- type: MySQLDatabase
server: readonly.slavecluster.hostname
username: user
password: pass
database: project_database
MySQLWriteDbQueryAspect:
class: \SilverStripe\Aspects\Database\ReadWriteSplitterAspect
properties:
writeDb: %$WriteMySQLDatabase
MySQLDatabase:
class: AopProxyService
properties:
proxied: %$ProxiedMySQLDatabase
beforeCall:
query:
- %$MySQLWriteDbQueryAspect
manipulate:
- %$MySQLWriteDbQueryAspect
getGeneratedID:
- %$MySQLWriteDbQueryAspect
affectedRows:
- %$MySQLWriteDbQueryAspect
ReadWriteMySQLDatabase
与之前的读写特性类似,ReadWriteMySQLDatabase依赖于为指向特定数据库的查询设置单独的写入数据库连接。因此,初始数据库配置与通常相同,但不是使用MySQLDatabase,而是使用ReadWriteMySQLDatabase(或ReadWriteSQLiteDatabase)。此配置必须指向readonly数据库。
然后,通过YAML配置,为write特定的数据库创建配置(请注意,配置的注入器对象必须命名为SplitterWriteDatabase)
Injector:
SplitterWriteDatabase:
class: MySQLDatabase
constructor:
- type: MySQLDatabase
server: write.master.database.hostname
username: user
password: pass
database: project_database
维护者联系方式
- Marcus Nyeholt marcus@silverstripe.com.au
需求
- SilverStripe 3.1.?
许可证
本模块遵循BSD许可证,详情请见http://silverstripe.org/BSD-license