今天阅读一篇,uuid分表操作的文章,整理一下思路,并提出一些问题.
- 分表插入
//向数据库插入数据
public function addMysql(Request $request){
$uuid =md5(uniqid(mt_rand (), true));
$uid =hexdec(substr($uuid,0,1)) % 8;
//8为分多少个表,但是hexdec有局限性 ,16进制 f后面就为0了
//认为改为一下代码会好点
$uid =ord(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';
}
}
- 插入成功后进行查询,先通过uname查询出UUID,通过UUID知道详细信息存储在哪张子表中.然后再进行查询
//查询
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;
//或为下面代码,与上面代码对应
$uid =ord(substr($uuid,0,1)) % 8;
$userInfos=DB::table('user_'.$uid)->get();
if($userInfos){
return view('home/selectMysql',['userInfos'=>$userInfos]);
}else{
return view('home/findMysql');
}
}
问题:
- 这样带最初设计的时候就固定了分表为8个.但是拓展性弱了很多, 应该如何设计? 最初是2个表,然后可以成长为100个表?
- 如果index_user也是分表应该怎么设计?
- 有没有做这个工作的中间件?帮忙推荐一个.
至此,一个简单的利用UUID分表处理数据的例子就完成了。关于问题希望大家能帮帮忙,谢谢了
原文