TP5.1分表,partition分表实例,根据自增主键水平分表

摘要:
phpnamespaceappindexmodel;usethinkModel;classArticleextendsModel{protected$table='tb_article';privatefunctiongetRule(){return['type'=˃'mod',//分表方式'num'=˃3//分表数量];}//获取插入ID,根据ID来取模分表publicfunctiongetLastId(){$data['stub']='a';return$this-˃insertGetId;}publicfunctionsaveData{return$this-˃partition-˃insert;}publicfunctiongetArticleById{return$this-˃partition-˃where-˃field-˃select();}}4,新建控制器getArticleById;returnjson;}}}ThinkPHP5内置了partition方法,可用于实现简单的分表。新增,修改,删除,查询单条数据时,用partition方法都可以轻松搞定,因为这些操作有一个共同的特点,就是能事先明确的知道,我要操作的是哪一条记录。但有一个需求,ThinkPHP5似乎没有解决,比如当一个大表,被拆分成若干个子表时,如何根据相关条件及排序获取分页数据。

thinkphp是国内非常流行的一个PHP语言开发框架,但是在项目开发中随着数据量的不断增大,数据库已经成为影响平台发展的瓶颈问题之一,所以本文将简单分享thinkphp5下数据库的水平分表,以及分表后对数据的增删改查。以提升整体性能。

1,这里采用的是mysql单独建一张“tb_article”表来获取自增ID

CREATE TABLE`tb_article` (
  `id` bigint(20) unsigned NOT NULLAUTO_INCREMENT,
  `stub` char(1) COLLATE utf8_bin NOT NULL DEFAULT '',
  PRIMARY KEY(`id`),
  UNIQUE KEY`stub` (`stub`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

2,分表设置$rule分了3个表,建表tb_article_1,tb_article_2,tb_article_3,里面字段要一致,用来存放内容

CREATE TABLE`tb_article_1` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '文章id',
  `user_id` INT(11) NOT NULL COMMENT '作者id',
  `add_time` INT(10) DEFAULT NULL COMMENT '时间',
  `typeid` INT(1) DEFAULT NULL COMMENT '文章栏目 1财经 2娱乐 3体育',
  `title` varchar(155) NOT NULL COMMENT '文章标题',
  `content` text NOT NULL COMMENT '文章内容',
  PRIMARY KEY(`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='文章表1';

3,新建模型

<?php
namespace appindexmodel;
usethinkModel;

class Article extendsModel
{
    protected $table = 'tb_article';
    private functiongetRule(){
        return[
            'type' => 'mod', //分表方式
            'num'  => 3     //分表数量
];
    }
//获取插入ID,根据ID来取模分表
public functiongetLastId(){ $data['stub']='a'; return $this->insertGetId($data, true); } public function saveData($data, $id){ return $this->partition(['id' => $id], "id", $this->getRule())->insert($data); } public function getArticleById($where, $field = "*", $id){ return $this->partition(['id' => $id], "id", $this->getRule())->where($where)->field($field)->select(); } }

4,新建控制器

<?php
namespace appindexcontroller;
use thinkController;
useappindexmodelArticle as ArticleModel; classArticle extends Controller { //分表测试 public functionarticleAdd(){ $Article = newArticleModel(); $id = $Article->getLastId(); $data =[ 'id' => $id, 'user_id' => 10, 'add_time' => time(), 'typeid' => 3, 'title' => '这里是新闻标题','content' => '这里是新闻内容',]; if($Article->saveData($data,$id)){
$this->success('文章添加成功!');
} }
public functiongetArticle(){ $id = input('id'); if($id){ $Article = newArticleModel(); $news = $Article->getArticleById(['id'=>$id],'*',$id); return json($news); } }}

ThinkPHP5内置了partition方法,可用于实现简单的分表。新增,修改,删除,查询单条数据时,用partition方法都可以轻松搞定,因为这些操作有一个共同的特点,就是能事先明确的知道,我要操作的是哪一条记录。但有一个需求,ThinkPHP5似乎没有解决,比如当一个大表,被拆分成若干个子表时,如何根据相关条件及排序获取分页数据。这种需求场景下,由于事先并不知道哪些数据会出现在第一页,哪些数据会出现在第二页,这些根据检索条件动态匹配的列表数据,该如何查询呢?

ThinkPHP5水平分表后分页查询解决方案:https://blog.csdn.net/tdcqfyl/article/details/82466959

免责声明:文章转载自《TP5.1分表,partition分表实例,根据自增主键水平分表》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇EXEC的两种用法以及用动态语句创建临时表的问题关于菜鸟的圆通电子面单打印下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Centos下zip压缩分包和解压

1˃分包zip要分包,首先要把文件打成zip包后再分割。然后在将mypackage.zip以一个大小分割。...

支付宝支付api

使用:alipayDemo来配置支付宝支付接口1拿到商户号,回调地址,支付宝公钥,我的私钥---生成一个对象#给支付宝发请求,信息要用支付宝公钥加密#支付宝给我响应信息,信息会用商户的公钥加密,回来之后再拿用户私钥解密2对象.direct_pay传支付金额,支付商品描述,支付订单号---返回个加密的串3拿到加密的串拼到get请求参数部分pay_url="ht...

凤凰系统(Phoenix OS)PC版安装,电脑上体验功能丰富的安卓系统

Tid=9074&fid=12安装前准备下载最新的PhoenixOSIO安装映像,并将其刻录到USB闪存驱动器;如果使用Windows操作系统,建议使用UltraISO刻录。下载地址:http://www.phoenixos.com/download_x86开始安装。1.重新启动机器,从启动选项中选择USB闪存磁盘启动,然后选择“Installati...

MySQL 字段类型占用空间

MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。)1或2个字节,取决于枚举值的个数SET(‘value1’,’value2’,…)1、2、3、4或者8个字节,取决于set成员的数目上表的M只是为了说明占用空间大小,在实际创建表中char、varchar,20指的是字符而不是字节;那么字符和字节的转换要看字符集,utf-8下,1字符=3...

一分钟制作U盘版BT3

一分钟生产BT3U磁盘版本方便、快捷、简单、无效且不可退款。BT3磁盘版本,大约694MB,可以直接烧录,然后用CD引导进入BT3。连接如下:http://ftp.heanet.ie/mirrors/backtrack/bt3-final.isoU磁盘版本Bt3,约783MB,连接为:http://cesium.di.uminho.pt/pub/backtr...

Windows桌面开发者的必备软件

LuaForWindows还自带了一个Scite编辑器,节省了找一个程序员相关编辑器的步骤。http://luaforwindows.luaforge.net/3,7-zip,不需要安装winzip或者winrar了http://www.7-zip.org/4,Sysinternals套件,windows开发必备。http://technet.microso...