klakk / yii2-sharding
Yii2 Active Record 的分片
dev-master
2020-11-10 09:04 UTC
Requires
- php: >= 5.4
- kllakk/yii2-coordinator: *
- yiisoft/yii2: >=2.0.5
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']);