silverstripe-australia/silverstripe-splitdb

提供配置独立的读写数据库连接的功能

安装: 58

依赖: 0

建议者: 0

安全: 0

星标: 4

关注者: 2

分支: 1

开放问题: 3

类型:silverstripe-module

1.0.0 2015-09-29 04:06 UTC

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

维护者联系方式

需求

  • SilverStripe 3.1.?

许可证

本模块遵循BSD许可证,详情请见http://silverstripe.org/BSD-license