精华内容
参与话题
问答
  • thinkphp分表

    2020-04-23 13:35:28
    分表规则 $rule = [ 'type' => 'mod', // 分表方式 'num' => 5 // 分表数量 ]; //批量插入 for ($i=0; $i < 100; $i++) { $user_id=Db::name('log') ->partition([], "user_id", $r...
    分表规则
    $rule = [
          'type' => 'mod', // 分表方式
          'num'  => 5     // 分表数量
      ];
      //批量插入
       for ($i=0; $i < 100; $i++) { 
        $user_id=Db::name('log')
           ->partition([], "user_id", $rule)
           ->where('user_id','>',0)
           ->order('user_id ASC')
           ->count();
        $data = [
         'user_id'=>$user_id+1,
            'user_name' => 'think'
        ];
        Db::name('log')
            ->partition($data, "user_id", $rule)
            ->insert($data);
       }
       //查询
      $list=Db::name('log')
         ->partition([], "user_id", $rule)
         ->where('user_id','<=',50)
         ->order('user_id ASC')
         ->fetchSql()
         ->select();
       表结构
        ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200423133442825.png)
     注:表需要从1开始
    
    展开全文
  • thinkphp分表怎么使用

    2013-09-13 12:14:45
    我预设了10个表 分别是 table_1、table_2、table_3....table_10 在Model中设置了partition: protected $partition = array( 'field' => 'id', 'type' =>...而这个传入当前数据是什么数据,, 我每次实验的...
  • 该如何使用thinkphp分表呢?

    千次阅读 2013-12-19 12:20:53
    thinkphp分表怎么使用 我预设了10个表 分别是 table_1、table_2、table_3....table_10 在Model中设置了partition: protected $partition = array( 'field' => 'id', 'type' => 'id', 'expr' => '', 'num' => 10, );...
    thinkphp分表怎么使用
    我预设了10个表 分别是 table_1、table_2、table_3....table_10

    在Model中设置了partition:

    protected $partition = array(
    'field' => 'id',
    'type' => 'id',
    'expr' => '',
    'num' => 10,
    );

    也使用了getPartitionTableName()
    官方文档说是必须传入当前的数据。然后根据数据分析应该实际操作哪个数据表
    而这个传入当前数据是什么数据, 我每次实验的结果都是联合查询!不能找到当前表名!
     
    ------解决方法--------------------
    你的分表字段是 id (PS:T不错的PHP Q扣峮:276167802,验证:csl
    所以在传给 getPartitionTableName 的数据数组中必须含有关联键为 id 的元素

    不过他的算法有点奇特
              
      $field   =   $data[$this->partition['field']];
    
    
                switch($this->partition['type']) {
    
    
                    case 'id':
    
    
                        // 按照id范围分表
    
    
                        $step    =   $this->partition['expr'];
    
    
                        $seq    =   floor($field / $step)+1;
    
    
                        break;
    
    
    .........
    
    
                return $this->getTableName().'_'.$seq;

    按照你的设置,似乎应是 'type' => 'mod'
                   
     case 'mod':
    
    
                        // 按照id的模数分表
    
    
                        $seq    =   ($field % $this->partition['num'])+1;
    
    
                        break;

    ------解决方法--------------------
    你用 getPartitionTableName 取得的不就是表名吗?

    有了表名不就和不分表时一样操作了吗?

    以上是本文关于thinkphp分表如何使用的方法,希望本文对广大php开发者有所帮助,感谢阅读本文。

    展开全文
  • thinkphp 数据分表

    千次阅读 2013-09-02 14:50:38
    对于大数据量的应用,经常会对数据进行分表,有些情况是可以利用数据库的分区功能,但并不是所有的数据库或者版本都支持,因此我们可以利用ThinkPHP内置的数据分表功能来实现。帮助我们更方便的进行数据的分表和读取...

    数据分表

    对于大数据量的应用,经常会对数据进行分表,有些情况是可以利用数据库的分区功能,但并不是所有的数据库或者版本都支持,因此我们可以利用ThinkPHP内置的数据分表功能来实现。帮助我们更方便的进行数据的分表和读取操作。
    和数据库分区功能不同,内置的数据分表功能需要根据分表规则手动创建相应的数据表。
    在需要分表的模型中定义partition属性即可。
    1. protected $partition = array(
    2. 'field' => 'name',// 要分表的字段 通常数据会根据某个字段的值按照规则进行分表
    3. 'type' => 'md5',// 分表的规则 包括id year mod md5 函数 和首字母
    4. 'expr' => 'name',// 分表辅助表达式 可选 配合不同的分表规则
    5. 'num' => 'name',// 分表的数目 可选 实际分表的数量
    6. );

    定义好了分表属性后,我们就可以来进行CURD操作了,唯一不同的是,获取当前的数据表不再使用getTableName方法,而是使用getPartitionTableName方法,而且必须传入当前的数据。然后根据数据分析应该实际操作哪个数据表。因此,分表的字段值必须存在于传入的数据中,否则会进行联合查询。

    事例:

    TestAction

      $list=$model->getDao(array("id"=>2))->find();

    TestModel

    class TestModel extends AdvModel {
    protected $partition = array(
     'field' => 'id',// 要分表的字段 通常数据会根据某个字段的值按照规则进行分表
     'type' => 'id',// 分表的规则 包括id year mod md5 函数 和首字母
     'expr' => '6',// 分表辅助表达式 可选 配合不同的分表规则
    );   
        public function getDao($data=array()){
                 $table = $this->getPartitionTableName($data);
                 return $this->table($table);
        }
    }

    展开全文
  • //分表插入 //@table表名 //$where 查询方法 //$field 唯一标识ID //$order 排序 public function SubmeterInsert($table=object,$data=[],$field='iid',$type='mod',$num=5){ $id=\think\Db::name(...

    //分表插入
        //@table表名
        //$where 查询方法
        //$field 唯一标识ID
        //$order 排序
        public function SubmeterInsert($table=object,$data=[],$field='iid',$type='mod',$num=5){
                $id=\think\Db::name($table)
                ->partition([], $field,[
                    'type' => $type,
                    'num'  => $num 
                ])
                ->order($field.' ASC')
                ->count();
                $data[$field]=$id+1;
                \think\Db::name($table)
                ->partition([$field => $data[$field]], $field, [
                    'type' => $type,
                    'num'  => $num 
                ])
                ->insert($data);
                return $data[$field];
        }
        //分表查询
        //@query查询
        //$field 唯一标识ID
        //
        public function SubmeterSelect($query=object,$field='iid',$type='mod',$num=5){
                return  $query->partition([], $field,[
                    'type' => $type,// 分表方式
                    'num'  => $num // 分表方式
                ]);
        }

    展开全文
  • 问题描述 ThinkPHP3.1.3 当使用TP的分库分表后 有些地方需要使用Model自动验证create,当验证唯一性unique会出现BUG, 具体描述 因为自动验证检测唯一性会使用隐式的使用find方法,同时find方法会清空重置options, $...
  • ThinkPHP中的分表使用

    千次阅读 2016-01-27 13:33:14
    数据分表对于大数据量的应用,经常会对数据进行分表,有些情况是可以利用数据库的分区功能,但并不是所有的数据库或者版本都支持,因此我们可以利用ThinkPHP内置的数据分表功能来实现。帮助我们更方便的进行数据的...
  • thinkphp中的分表方法

    2014-02-21 03:11:00
      public function getPartitionTableName($data=array()) { // 对数据表进行分区 if(isset($data[$this-&gt;partition['field']])) { $field = $data[$this-&...partition['field...
  • thinkPHP +mysql 分表用法例子

    千次阅读 2016-06-08 17:33:43
    首先根据自己的需要建立分表,我这里使用聊天室的msg 表, 将其分成msg_00,msg_01,msg_02,msg_03,msg_04,msg_05,msg_06,msg_07,msg_08,msg_09,等10张表 然后根据userID判断需要放在哪一张表; 第一步:  判断我...
  • ThinkPHP5内置了partition方法,可用于实现简单的分表。新增,修改,删除,查询单条数据时,用partition方法都可以轻松搞定,因为这些操作有一个共同的特点,就是能事先明确的知道,我要操作的是哪一条记录。但有一...
  • thinkPHP5框架里面我们又该怎么操作。 分表的意义 大家都知道mysql数据库是小型数据库,每张表最大承受的数据量大约是1亿条,而每张表超过300万条数据,单张表的查询速率会受到影响。(这个数值更具每张表的数据...
  • 数据表:  house_member_0  house_member_1  house_member_2  house_member_3  模型中//wedding jewelry wholesale  class MemberModel extends AdvModel { ...$partition = array('field'=>...
  • 应用ThinkPHP内置的分表算法处理百万级用户数据.  数据表:  house_member_0  house_member_1  house_member_2  house_member_3  模型中  class MemberModel extends AdvModel {  ...
  • ThinkPHP处理海量数据分表机制详细代码及说明 应用ThinkPHP内置的分表算法处理百万级用户数据. 数据表: house_member_0 house_member_1 house_member_2 house_member_3 模型中 class MemberModel extends ...
  • thinkphp是国内非常流行的一个PHP语言开发框架,但是在项目开发中随着数据量的不断增大,数据库已经成为影响平台发展的瓶颈问题之一,所以本文波波将简单分享thinkphp5下数据库的水平分表,以及分表后对数据的增删改...
  • 为什么要分表,分库: 当我们的数据表数据量,訪问量非常大。或者是使用频繁的时候,一个数据表已经不能承受如此大的数据訪问和存储,所以,为了减轻数据库的负担,加快数据的存储,就须要将一张表分成多张,及将一...
  • ThinkPHP v5.0.0 RC4.zip

    2019-07-16 03:46:59
    增加分表规则方法 增加日期和时间表达式查询方法 增加分页查询方法 增加视图查询方法 默认保持数据表字段大小写 数据缓存自动更新机制 完善事务嵌套支持 改进存储过程数据读取 支持设置数据库查询数据集返回...
  • thinkphp的特点

    千次阅读 2018-02-09 14:08:57
    高级模型:可以轻松支持序列化字段、文本字段、只读字段、延迟写入、乐观锁、数据分表等高级特性。1.视图模型:轻松动态地创建数据库视图,多表查询不再烦恼。2.关联模型:让你以出乎意料的简单、灵活的方式完成多表...

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

thinkphp 分表