klakk/yii2-sharding

Yii2 Active Record 的分片

dev-master 2020-11-10 09:04 UTC

This package is auto-updated.

Last update: 2024-09-10 17:10:14 UTC


README

Active Record 模型分片组件。

安装

使用 composer 包安装 "kllakk/yii2-sharding": "*"

使用示例

首先根据以下示例配置 sharding 组件:

 'sharding' => [
            'class' => 'kllakk\sharding\Connection',
            'shard' => [
                'profile' => [
                    'coordinator' => 'coordinator',
                    'db' => ['db1', 'db2']
                ]
            ]
        ],

其中 shard 是一个数组,包含不同类型的分片方式,键是这些类型的名称。对于每种类型,需要指定协调器组件的名称 coordinator 和参与此类型分片的数据库组件名称数组 db

然后配置和设置该类型数据分片的协调器组件 coordinator

为了使用它,需要将您的 Active Record 模型继承自类 kllakk\sharding\ActiveRecord 并实现必需的方法

    public static function primaryKey() {
        return ['id'];
    }

    public static function shardingColumn() {
        return 'id';
    }

    public static function shardingType() {
        return 'profile';
    }
    
    public function attributeLabels() {
        return [
            'id' => 'ID',
            'title' => 'Название',
            'description' => 'Описание',
        ];
    }

它们分别返回主键、分片键、分片类型和属性。然后您可以像使用普通 Active Record 一样使用这个模型,但由于分片特性,有一些限制(在 Active Query 的方法 all、one 等,现在需要传递相应数据库组件的名称,而不是组件本身,分组将不工作,如果请求需要跨越多个分片)。

执行 SQL 查询

直接执行查询的方法略有不同。在 createCommand 中,第一个参数传递 db 组件的名称,第二个参数传递包含 SQL 查询的数组,其中键是相应查询的 db 组件名称,值是查询本身。

$sharding->createCommand(['db1'], ['db1' => 'SELECT * FROM test']);