1. Go to this page and download the library: Download rice/lavavel-sharding library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
rice / lavavel-sharding example snippets
namespace App\Models;
use Rice\LSharding\DatetimeSharding;
class OrderLog extends DatetimeSharding
{
protected $table = 'order_logs';
// 开始时间(确定第一张分表的时间点)
public function lower()
{
return '2024-01-01 00:00:00';
}
// 结束时间(null表示当前时间)
public function upper()
{
return null;
}
// 分表后缀格式(使用Carbon的format格式)
// ym 表示按月分表,如 order_logs_2401, order_logs_2402
public function suffixPattern()
{
return 'ym';
}
// 分片字段(默认为created_at)
public function shardingColumn()
{
return 'created_at';
}
}
namespace App\Models;
use Rice\LSharding\ModSharding;
class UserData extends ModSharding
{
protected $table = 'user_data';
// 分片数量
public function shardingCount()
{
return 10; // 分成10张表
}
// 分片字段
public function shardingColumn()
{
return 'user_id';
}
// 分片后缀格式
public function suffixPattern()
{
return '_%d'; // 生成 user_data_0, user_data_1 格式
}
}
namespace App\Models;
use Rice\LSharding\HashModSharding;
class ProductData extends HashModSharding
{
protected $table = 'product_data';
// 分片数量
public function shardingCount()
{
return 8;
}
// 分片字段(可以是字符串类型)
public function shardingColumn()
{
return 'product_code'; // 产品编码,字符串类型
}
// 分片后缀格式
public function suffixPattern()
{
return '_%d';
}
}
namespace App\Models;
use Rice\LSharding\AutoIntervalSharding;
class ActivityLog extends AutoIntervalSharding
{
protected $table = 'activity_logs';
// 时间分片下界值
public function lower(): string
{
return '2024-01-01';
}
// 分片时间间隔
// 支持格式:1d(天), 1w(周), 1m(月), 1y(年)
public function interval(): string
{
return '1w'; // 每周一个分片
}
// 分片键时间格式
public function dateTimeFormat(): string
{
return 'YW'; // 年和周数
}
// 分片字段
public function shardingColumn(): string
{
return 'log_time';
}
// 分片后缀格式
public function suffixPattern(): string
{
return '_%s';
}
}
namespace App\Models;
use Rice\LSharding\BoundaryRangeSharding;
class CustomerData extends BoundaryRangeSharding
{
protected $table = 'customer_data';
// 定义边界范围
public function getBoundaryRanges(): array
{
// 返回边界数组,如 [1000, 5000, 10000]
// 会分成四个区间:<1000, 1000-5000, 5000-10000, >10000
return [1000, 5000, 10000];
}
// 分片字段
public function shardingColumn(): string
{
return 'customer_level'; // 根据客户等级分片
}
// 分片后缀格式
public function suffixPattern(): string
{
return '_%d';
}
}
namespace App\Models;
use Rice\LSharding\VolumeRangeSharding;
class LargeData extends VolumeRangeSharding
{
protected $table = 'large_data';
// 每个分片的容量
public function shardingVolume(): int
{
return 100000; // 每个分片10万条数据
}
// 起始值
public function startValue(): int
{
return 1;
}
// 最大值
public function maxValue(): int
{
return 1000000; // 最大100万条数据
}
// 分片字段
public function shardingColumn(): string
{
return 'id';
}
// 分片后缀格式
public function suffixPattern(): string
{
return '_%d';
}
}
namespace App\Models;
use Rice\LSharding\InlineSharding;
class OrderData extends InlineSharding
{
protected $table = 'order_data';
// 行表达式
public function inlineExpression(): string
{
// user_id % 4 + 1 表示将用户ID取模后+1,分成4个分片
return '${user_id % 4 + 1}';
}
// 分片表列表
public function shardingTables(): array
{
return ['1', '2', '3', '4'];
}
// 分片字段
public function shardingColumn(): string
{
return 'user_id';
}
// 分片后缀格式
public function suffixPattern(): string
{
return '_%s';
}
}
namespace App\Models;
use Rice\LSharding\ComplexSharding;
class MultiDimensionData extends ComplexSharding
{
protected $table = 'multi_data';
// 分片字段列表
public function shardingColumns(): array
{
return ['region_id', 'type_id'];
}
// 计算分片键
public function calculateShardingKey(array $params): string
{
// 组合多个字段计算分片键
$regionId = $params['region_id'] ?? 0;
$typeId = $params['type_id'] ?? 0;
// 可以根据业务需求设计复杂的计算逻辑
return md5($regionId . '-' . $typeId);
}
// 分片数量
public function shardingCount(): int
{
return 16;
}
// 分片后缀格式
public function suffixPattern(): string
{
return '_%d';
}
}
namespace App\Models;
use Rice\LSharding\HintSharding;
class DynamicData extends HintSharding
{
protected $table = 'dynamic_data';
// 分片字段
public function shardingColumn(): string
{
return 'shard_key';
}
// 分片后缀格式
public function suffixPattern(): string
{
return '_%s';
}
}
// 使用方式
DynamicData::setCurrentSharding('202401'); // 设置当前分片
$results = DynamicData::where('status', 1)->get();
DynamicData::clearCurrentSharding(); // 清除分片设置
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.