rice / lavavel-sharding
lavavel sharding
Installs: 15
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/rice/lavavel-sharding
Requires
- php: >=7.4
- ext-bcmath: *
- ext-json: *
- nesbot/carbon: ^2.0
Requires (Dev)
- laravel/framework: 8.x-dev
- mockery/mockery: 1.7.x-dev
- phpunit/phpunit: ^9
README
Laravel 分表工具包 (Laravel Sharding Toolkit)
开箱即用的分表组件包,不用侵入业务代码直接使用。
#注意点
小成本方案,为中小型企业进行赋能,企业有钱的话可以使用成熟的
TiDB,Apache Doris等方案,避免 出现性能问题。本库使用 union all + 子查询的方式进行查询,避免大数据量查询(临时表大数据量性能很差)
该包还没在生产环境经受考验,要使用时可以现在测试环境跑一下,避免出现问题
快速上手
继承 DatetimeSharding 进行时间分表,然后根据业务实现以下三个方法,这样子就能够使用分表逻辑了。
<?php namespace App\Models; use Rice\LSharding\DatetimeSharding; class Users extends DatetimeSharding { protected $table = 'users'; // 开始值 (根据最开始出现的时间确认第一张分表) public function lower() { return '2024-09-01 00:00:00'; } // 结束值 (null默认就是当前时间) public function upper() { return null; } // 分表后缀(Carbon的format) public function suffixPattern() { return 'ym'; } }
功能
- 支持
Model级别的insert,save,update,delete调用 - 支持
order by,group by调用 - 支持
Model级别的数据分表查询 - 时间分表算法
- MySQL distinct 语法在分表统计不准确问题
- 测试用例
实现思路
Illuminate\Database\Eloquent\Model->Rice\LSharding\Sharding继承Model类- 重写
__construct,__set,getTable,forwardCallTo,newEloquentBuilder方法 - 继承
Rice\LSharding\Sharding实现对应的分表类(DatetimeSharding,ModSharding,HashModSharding)