mysql 垂直分表技术的实战演练,有实战代码。

Posted bossaiguo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 垂直分表技术的实战演练,有实战代码。相关的知识,希望对你有一定的参考价值。

垂直分表技术

垂直分割指的是:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。

1,垂直分表技术首先要注意的是数据库的设计,把一些字段较大的数据存在另外一张表。比如:文章内容。这两张表的id是一一对应的,另外他们的表名前部分是相同的,后面这一张表的结尾连一个‘_data’。方便后面的数据操作。

技术分享图片

 

 2,数据表设计完成以后就是数据的存储了,这里在注意的是两张表的id是一一对应的。废话不多说,直接撸代码:

 

 1 /*
 2 本实例是使用phpcms,不熟悉这个框架的朋友也没关系,可能实例化模型是用phpcms方式,其他的都是原生php知识
 3 */
 4 
 5 /*数据的存储*/
 6 $this->case = pc_base::load_model(‘case_model‘);//实例化case模型;如thinkphp5:$case=new Case();
 7 $info=array();//用于存储普通数据
 8 $content=array();//用于存储大数据
 9 $info[‘name‘]=$_POST[‘name‘];
10 $info[‘phone‘]=$_POST[‘phone‘];
11 $info[‘email‘]=$_POST[‘email‘];
12 
13 $id=$this->case->insert($info);//把小字段的数据存进主表当中,并且返回id;
14 
15 $this->case->table_name=$this->case->table_name.‘_data‘;//把数据表设置为附表,去附表查询相关内容;
16 $content[‘content‘]=$_POST[‘content‘];
17 $content[‘id‘]=$id;
18 $this->case->insert($content);

 

3,数据的读取,数据的读取关键是利用 array_merger() 方法将两个数据合并

定义和用法
array_merge() 函数把一个或多个数组合并为一个数组。
提示:您可以向函数输入一个或者多个数组。
注释:如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。
注释:如果您仅向 array_merge() 函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。

1 /*数据的读取*/
2 $userid=$_GET[‘userid‘];//获取文章id
3 $data=$this->case->get_one(array(‘id‘=>$id));//取数据;如think5: Case::get([‘id‘=>$id]);
4 $this->case->table_name=$this->case->table_name.‘_data‘;//把数据表设置为附表,去附表查询相关内容;
5 $datas=$this->case->get_one(array(‘id‘=>$id));//查询到附表的字段;一般为大字段。content之类的。
6 $data=array_merge($data,$datas);//将两个数据合并,就得到了最终想要的数据了

 





以上是关于mysql 垂直分表技术的实战演练,有实战代码。的主要内容,如果未能解决你的问题,请参考以下文章

分库分表实战

亿级网站数据拆分之MySQL分库分表实战

Docker实战之MySQL主从复制

Mysql企业实战

[精选]彻底搞清分库分表(垂直分库,垂直分表,水平分库,水平分表)

Mysql之分库分表及中间件