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 相关文章推荐
第七节 类的静态成员 [7]
Oct 09 PHP
做个自己站内搜索引擎
Oct 09 PHP
smarty实例教程
Nov 19 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
Nov 12 PHP
腾讯QQ php程序员面试题目整理
Jun 08 PHP
php include加载文件两种方式效率比较
Aug 08 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
php中随机函数mt_rand()与rand()性能对比分析
Dec 01 PHP
php中Ctype函数用法详解
Dec 09 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 PHP
Thinkphp5.0框架视图view的模板布局用法分析
Oct 12 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
PHP实现计算器小功能
2020/08/28 PHP
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
JavaScript手机振动API
2016/06/11 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python解析基于xml格式的日志文件
2017/02/25 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
python输出决策树图形的例子
2019/08/09 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
什么是抽象
2015/12/13 面试题
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
毕业生个人求职信范文分享
2014/01/05 职场文书
中药学自荐信
2014/06/15 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
2015年党建工作总结
2015/03/30 职场文书
采购员工作总结范文
2015/08/12 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
社区结对共建协议书
2016/03/23 职场文书
js Proxy的原理详解
2021/05/25 Javascript
python通过函数名调用函数的几种方法总结
2021/06/07 Python