当前位置:首页 > PHP > 正文内容

laravel分表model映射的思路

陈杰2年前 (2020-11-04)PHP1994


预先估计会出现大数据量并且访问频繁的表,将其分为若干个表


这种预估大差不差的,论坛里面发表帖子的表,时间长了这张表肯定很大,几十万,几百万都有可能。 聊天室里面信息表,几十个人在一起一聊一个晚上,时间长了,这张表的数据肯定很大。像这样的情况很多。所以这种能预估出来的大数据量表,我们就事先分出个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();


扫描二维码至手机访问

扫描二维码推送至手机访问。

版权声明:本文由何烦过虎溪发布,如需转载请注明出处。

转载请注明出处:http://95shouyou.com/?id=6

分享给朋友:

相关文章

laravel通过模板html生成word文档

laravel通过模板html生成word文档

因为公司项目需要,内部的管理系统有一个php实时查询数据库,根据内容来生成word文档排版没有什么需求,实现原理是查询数据库,然后用laravel自带的模板引擎,生成一个html网页,然后修改网页的r...

laravel实现微信公众号授权登录实战

微信公众号授权登录实战框架:laravel依赖:overtrue/wechat首先安装一下easywechat依赖composer require overtrue/wechat:...

php接拼多多的多多进宝,实现淘客功能

php接拼多多的多多进宝,实现淘客功能

在项目中有一个板块是接拼多多的多多进宝,实现多多客的功能,主要就是拉取商品列表,拉取商品详情,生成推广链接。composer require justmd5/duoduoke-sd...

laravel的Observer观察者模式模型事件实战

laravel的orm特别好用,特别是observer观察者模式,可以在不更改原有业务代码的情况下做到切入编程,有点类似于我们之前常用的钩子函数。下面就是我们深入observer观察者模式的实战代码现...

通过代码创建多个同样的mysql表

在分库分表中可能要同时创建多个结构相同但后缀不同的表,通过代码实现for ($i = 3; $i <= 20; $i++) {    DB::connection('...

Lumen框架报错Class session does not exist

Lumen框架报错Class session does not exist

由于lumen框架是为速度而生的 Laravel 框架,所以移除了session的支持,虽然在ide中代码提示可以敲出Session::put()方法出来,但是最终还是提示的是Class sessio...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。