laravel分表model映射的思路
预先估计会出现大数据量并且访问频繁的表,将其分为若干个表
这种预估大差不差的,论坛里面发表帖子的表,时间长了这张表肯定很大,几十万,几百万都有可能。 聊天室里面信息表,几十个人在一起一聊一个晚上,时间长了,这张表的数据肯定很大。像这样的情况很多。所以这种能预估出来的大数据量表,我们就事先分出个N个表,这个N是多少,根据实际情况而定。以聊天信息表为例:
我事先建100个这样的表,message_00,message_01,message_02……….message_98,message_99.然后根据用户的ID来判断这个用户的聊天信息放到哪张表里面,你可以用hash的方式来获得,可以用求余的方式来获得,方法很多,各人想各人的吧。
<?php
namespace App\Model\Member;
use App\Model\BaseModel;
class MemberLikeModel extends BaseModel
{
public $connection = "mysql_logs";
public $timestamps = false;
public $table = "member_like";
// 设置表后缀
public function setSuffix(int $suffix, int $mold)
{
if ($suffix > 0) {
$suffix = intval($suffix % $mold) + 1;
$this->table = $this->getTable() . '_' . $suffix;
}
}
// 提供一个静态方法设置表后缀
public static function suffix(int $suffix = 0, int $mold = 20)
{
$instance = new static;
$instance->setSuffix($suffix, $mold);
return $instance->newQuery();
}
}
调用方式
$MemberLikeModel = MemberLikeModel::suffix($member_id, 20);
$MemberLikeModel->where('id', 1)->first();
