kllakk/yii2-coordinator

yii2 分片协调器

dev-master 2020-11-10 07:40 UTC

This package is auto-updated.

Last update: 2024-09-10 16:17:22 UTC


README

yii2 分片协调器,支持任何顺序的任何协调级别(函数,虚拟桶)。

安装

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

使用示例

按照以下示例配置 coordinator 组件

    'components' => [
        'coordinator' => [
            'class' => 'kllakk\coordinator\CoordinatorComponent',
            'component' => [
                [
                    'class' => 'kllakk\coordinator\FunctionCoordinator',
                    'function' => function($i) {
                        return $i % 4;
                    }
                ],
                [
                    'class' => 'kllakk\coordinator\RedisCoordinator',
                    'hashName' => 'sharding',
                    'connect' => [
                        'class' => 'yii\redis\Connection',
                        'hostname' => '127.0.0.1',
                        'port' => 6379,
                        'database' => 4,
                    ]
                ],
                [
                    'class' => 'kllakk\coordinator\DbCoordinator',
                    'table' => [
                        'name' => 'sharding',
                        'columnSearch' => 'bucket_id',
                        'columnResult' => 'shard_id'
                    ],
                    'connect' =>[
                        'class' => 'yii\db\Connection',
                        'dsn' => 'mysql:host=localhost;dbname=yii2basic',
                        'username' => 'root',
                        'password' => 'dm1989',
                        'charset' => 'utf8',
                    ]
                ]
            ]
        ],
    ]

其中 component 是一个数组,包含将被依次调用的不同类型的协调器,输入是前一个协调器的工作结果。然后调用相应的方法获取分片。

...
$coordinator = \Yii::$app->coordinator;
$shardDb = $coordinator->getShard($db, $keyShard);
...

其中 $db 是参与分片的数据库组件名称数组。例如:db1, db2, db3$keyShard 是分片键的编号或值数组。方法返回所需分片的名称或空数组,如果找不到分片。

FunctionCoordinator

通过参数 function 指定的函数(作为 callable)获取分片编号的协调器,输入为键值。

...
'function' => function($i) {
    return $i % 4;
}
...

DbCoordinator

通过数据库表进行协调,其中 connect 是连接到所需数据库的配置。表必须包含键值字段和数据库组件编号字段(1 对应于 db1 组件)。可以在您的项目中使用任何前缀替换 db

...
'table' => [
    'name' => 'sharding',
    'columnSearch' => 'bucket_id',
    'columnResult' => 'shard_id'
  ],
...  

RedisCoordinator

通过 redis 进行协调。它通过哈希表工作,因此需要预先配置哈希表,其名称与 hashName 中指定的名称相匹配。哈希表中的键是分片键值,值是数据库组件编号。

...
 'hashName' => 'sharding'
...