kllakk / yii2-coordinator
yii2 分片协调器
dev-master
2020-11-10 07:40 UTC
Requires
- php: >= 5.4
- yiisoft/yii2: >=2.0.5
- yiisoft/yii2-redis: ~2.0.0
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' ...