kllakk/yii2-coordinator

Coordinator for yii2 sharding

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

This package is auto-updated.

Last update: 2024-04-10 15:27:43 UTC


README

Координатор для yii2 шардинга, поддерживает любые уровни координации в любой последовательности (функцией, virtual bucket).

Установка

Установка с помощью пакета 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. Ключами в хеше должны выступать значения ключа шардинга, а значениями номера компонентов db:

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