垂直分表技术
垂直分割指的是: 表的记录并不多, 但是字段却很长, 表占用空间很大, 检索表的时候需要执行大量的 IO, 严重降低了性能这时需要把大的字段拆分到另一个表, 并且该表与原表是一对一的关系
1, 垂直分表技术首先要注意的是数据库的设计, 把一些字段较大的数据存在另外一张表比如: 文章内容这两张表的 id 是一一对应的, 另外他们的表名前部分是相同的, 后面这一张表的结尾连一个_data 方便后面的数据操作
2, 数据表设计完成以后就是数据的存储了, 这里在注意的是两张表的 id 是一一对应的废话不多说, 直接撸代码:
- /*
- 本实例是使用 phpcms, 不熟悉这个框架的朋友也没关系, 可能实例化模型是用 phpcms 方式, 其他的都是原生 php 知识
- */
- /* 数据的存储 */
- $this->case = pc_base::load_model(case_model);// 实例化 case 模型; 如 thinkphp5:$case=new Case();
- $info=array();// 用于存储普通数据
- $content=array();// 用于存储大数据
- $info[name]=$_POST[name];
- $info[phone]=$_POST[phone];
- $info[email]=$_POST[email];
- $id=$this->case->insert($info);// 把小字段的数据存进主表当中, 并且返回 id;
- $this->case->table_name=$this->case->table_name._data;// 把数据表设置为附表, 去附表查询相关内容;
- $content[content]=$_POST[content];
- $content[id]=$id;
- $this->case->insert($content);
3, 数据的读取, 数据的读取关键是利用 array_merger() 方法将两个数据合并:
定义和用法
array_merge() 函数把一个或多个数组合并为一个数组
提示: 您可以向函数输入一个或者多个数组
注释: 如果两个或更多个数组元素有相同的键名, 则最后的元素会覆盖其他元素
注释: 如果您仅向 array_merge() 函数输入一个数组, 且键名是整数, 则该函数将返回带有整数键名的新数组, 其键名以 0 开始进行重新索引
- /* 数据的读取 */
- $userid=$_GET[userid];// 获取文章 id
- $data=$this->case->get_one(array(id=>$id));// 取数据; 如 think5: Case::get([id=>$id]);
- $this->case->table_name=$this->case->table_name._data;// 把数据表设置为附表, 去附表查询相关内容;
- $datas=$this->case->get_one(array(id=>$id));// 查询到附表的字段; 一般为大字段 content 之类的
- $data=array_merge($data,$datas);// 将两个数据合并, 就得到了最终想要的数据了
来源: http://www.bubuko.com/infodetail-2513137.html