PHP框架Laravel中使用UUID实现数据分表操作示例


Posted in PHP onMay 30, 2018

本文实例讲述了PHP框架Laravel中使用UUID实现数据分表操作。分享给大家供大家参考,具体如下:

UUID

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。

说的简单点,它就是通过一个规则(如:业务标识号+年月日+当日自增数字格式化)生成的一个具有唯一性的辨识资讯。用于关联我们的一些额数据和资讯。

实例

之前在做一个项目的时候用到这个东西,现在我就用Laravel框架写一个简单的demo

前端form表单

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <form action="/addMysql" method="post">
      {!!csrf_field()!!}
      <table>
        <tr>
          <th style="colspan:2">注册</th>
        </tr>
        <tr>
          <td>账号</td>
          <td>
            <input type="text" name="uname" value="" />
          </td>
        </tr>
        <tr>
          <td>密码</td>
          <td>
            <input type="password" name="pwd" value="" />
          </td>
        </tr>
        <tr>
          <td>性别</td>
          <td>
            <input type="radio" name="sex" value="1" />:男
            <input type="radio" name="sex" value="0" />:女
          </td>
        </tr>
        <tr>
          <td>年龄</td>
          <td>
            <input type="text" name="age" value="" />
          </td>
        </tr>
        <tr>
          <td style="colspan:2">
            <input type="submit" value="提交" />
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>

建立数据库和数据表(只建立 1 个索引表 和 8 个进行存储详细信息的子表)

原理:通过UUID的唯一特性,将一个数据的详细信息数据存在其他表中的,这个表示通过UUID随机分配出来的,索引表中只存储UUID和关键字段

表前缀统一前缀-------mall_
表 :    mall_index_user       索引表    -------uuid,uname
表0:    mall_user_0           uuid,uname,sex,age
表1:    mall_user_1
表2:    mall_user_2
表3:    mall_user_3
表4:    mall_user_4
表5:    mall_user_5
表6:    mall_user_6
表7:    mall_user_7

通过路由和控制器进行form表单提交数据向数据库插入数据

路由:

//form表单页面路由
Route::get('Mysql',function(){
  return view('home/Mysql');
});
//数据插入提交路由
Route::post('/addMysql','findMoreController@addMysql');

控制器:

//向数据库插入数据
public function addMysql(Request $request){
  $uuid =md5(uniqid(mt_rand (), true));
  $uid =hexdec(substr($uuid,0,1)) % 8;
  $sex = $request->input('sex');
  $age = $request->input('age');
  //dd($uuid);
  $uname = $request->input('uname');
  $result = DB::table('index_user')->insert(['uuid'=>$uuid,'uname'=>$uname]);
  $result1 = DB::table('user_'.$uid)->insert(['uuid'=>$uuid,'uname'=>$uname,'sex'=>$sex,'age'=>$age]);
  if($result1){
    return '1';
  }else{
    return '0';
  }
}

解:上面的$uid就是通过UUID得到的要向哪一张详细信息表中插入的表的代表号

例如:$uid=3     那么就向user_3中插入详细信息

插入成功后进行查询,先通过uname查询出UUID,通过UUID知道详细信息存储在哪张子表中.然后再进行查询

路由:

//查询页面
Route::get('findMysql',function(){
  return view('home/findMysql');
});
//查询路由
Route::post('/findMysql','findMoreController@findMysql');

控制器:

//查询
public function findMysql(Request $request){
    //dd($request);
    $uname=$request->input('uname');
    $uuid =DB::table('index_user')->where('uname','=',$uname)->value('uuid');
    $uid =hexdec(substr($uuid,0,1)) % 8;
    $userInfos=DB::table('user_'.$uid)->get();
    if($userInfos){
      return view('home/selectMysql',['userInfos'=>$userInfos]);
    }else{
      return view('home/findMysql');
    }
}

前端展示

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <form action="" method="post">
      <table>
        <tr>
          <th style="colspan:2">遍历</th>
        </tr>
        @foreach($userInfos as $userInfo)
        <tr>
          <td>性别</td>
          <td>
            <input type="text" name="" value="{{$userInfo->sex}}" />
          </td>
        </tr>
        <tr>
          <td>年龄</td>
          <td>
            <input type="text" name="" value="{{$userInfo->age}}" />
          </td>
        </tr>
        @endforeach
      </table>
    </form>
  </body>
</html>

至此,一个简单的利用UUID分表处理数据的例子就完成了。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php中的时间处理
Oct 09 PHP
mysql5写入和读出乱码解决
Nov 25 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
Aug 01 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
微信支付开发告警通知实例
Jul 12 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
php 截取中英文混合字符串的方法
May 31 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
Nov 30 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 PHP
php支付宝系列之电脑网站支付
May 30 #PHP
Laravel框架使用Redis的方法详解
May 30 #PHP
php实现微信支付之退款功能
May 30 #PHP
分享5个非常有用的Laravel Blade指令
May 30 #PHP
php实现微信支付之企业付款
May 30 #PHP
ThinkPHP5框架缓存查询操作分析
May 30 #PHP
PHP实现通过CURL上传文件功能示例
May 30 #PHP
You might like
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
js的逻辑运算符 ||
2010/05/31 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
python实现的文件同步服务器实例
2015/06/02 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
基于Python函数和变量名解析
2019/07/19 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
python实现按日期归档文件
2021/01/30 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2016/02/09 面试题
2015年图书馆个人工作总结
2015/05/26 职场文书
初中同学会致辞
2015/08/01 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
分享7个 Python 实战项目练习
2022/03/03 Python