为什么要分表,分库: 当我们的数据表数据量,访问量很大,或者是使用频繁的时候,一个数据表已经不能承受如此大的数据访问和存储,所以,为了减轻数据库的负担,加快数据的存储,就需要将一张表分成多张,及将一类数据存入不同的几张表,当分表已经不能满足

为什么要分表,分库:

当我们的数据表数据量,访问量很大,或者是使用频繁的时候,一个数据表已经不能承受如此大的数据访问和存储,所以,为了减轻数据库的负担,加快数据的存储,就需要将一张表分成多张,及将一类数据存入不同的几张表,当分表已经不能满足需求是,我们还可以分库,及用几个数据库存储。

分表会随着需求和功能的不同有不同的实现方法,下面是我做项目中的一个例子:

需求:product,product_price两张表是一对多的关系,及产品和产品每日的价格,一个产品对应几种价格,现在由于产品表数据量很大,每天多有上百万条数据,就以天为单位对表进行分表,以月为单位对数据库进行分库,表的命名为‘product_price2014-07-20’表格式:前面是原数据库表名,后面是日期(年-月-日).

创建数据库和表的代码如下:

function get_product_price_table(){

$db_info=array();

//这个月

$newmot_time=date("Y-m");

//今天日期

$newday_time=date("Y-m-d");

//本月数据库,今天的表

$db_name = 'acbooking'.$newmot_time;

$table_name = "product_price".$newday_time;

//昨天的日期

$yesday_time = date("Y-m-d",strtotime("-1 day"));

//取出昨天的数据,获取 product_price的最后id,作为新表id的起始值

$last_one_product_price = get_info('product_price_table_id',array('time'=>$yesday_time));

if($last_one_product_price['table_id_end']>0){

$table_id = $last_one_product_price['table_id_end']+1;

}else{

$table_id = 1;

}

//创建数据库

$Db_string_line = C('DB_TYPE').'://'.C('DB_USER').':'.C('DB_PWD').'@'.C('DB_HOST').'/'.$new_db_database;

$DB_P=C('DB_PREFIX');

$Model=M($table,$DB_P,$Db_string_line);

$db_name=$Model->execute($sql);//通过sql语句配置创建新数据库新标,此处省略了sql语句

//创建数据表

$Db_string_line = C('DB_TYPE').'://'.C('DB_USER').':'.C('DB_PWD').'@'.C('DB_HOST').'/'.$new_db_database;

$DB_P=C('DB_PREFIX');

$Model=M($table,$DB_P,$Db_string_line);

$table_name=$Model->execute($sql);

//返回新 数据库,新的表

$db_info['database']=$db_name;

$db_info['table']=$table_name;

return $db_info;

}

创建出分表后,即可存储当天的所有数据,每天换一张表,执行效率很高。。。。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

thinkphp mysql分表_数据库分表和分库的原理及基于thinkPHP的实现方法相关推荐

  1. mysql 订单表与商品表_数据库——订单表中有不同类型的商品,表的设计

    具体需求,做一个类似购物平台,该平台中有多个商家,提供多种销售如酒水,虚拟商品(送花),座位预订等. 现在有两方面的问题,一个在订单方面,是将不同的商品放在不同的订单表中,还是放在同一的一个订单表中. ...

  2. nodejs mysql 分表_数据库分库分表学习

    大型网站数据库分库分表 分库分表方案: 垂直&水平 1.什么是垂直拆分? 指的是将一个包含了很多表的数据库,根据表的功能的不同,拆分为多个小的数据库,每个库中包含部分表. .垂直拆分的另外2种 ...

  3. Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结

    Atitit.操作注册表 树形数据库 注册表的历史 java版本类库总结 1. 注册表是树形数据库 1 2. 注册表的由来 1 3. Java  操作注册表 2 3.1. 使用Preferences  ...

  4. mysql 多维度分表_亿级订单数据分库分表设计方案(满足多维度查询:订单号、用户、商家、渠道)...

    根据业务初步预估订单业务量,每天500万的数据.我们将订单数据划分为了2大类型:分别为热数据和冷数据. 热数据:1个月内的订单数据,查询实时性较高; 冷数据:归档订单数据,查询频率不高; 根据实际业务 ...

  5. mybatis+mysql分库分表_一种简单易懂的 MyBatis 分库分表方案

    数据库分库分表除了使用中间件来代理请求分发之外,另外一种常见的方法就是在客户端层面来分库分表 -- 通过适当地包装客户端代码使得分库分表的数据库访问操作代码编写起来也很方便.本文的分库分表方案基于 M ...

  6. mysql 留存率统计_留存率,数据表分表问题

    你的位置: 问答吧 -> PHP基础 -> 问题详情 留存率,数据表分表问题 本帖最后由 minoc 于 2013-5-22 15:00 编辑 现在有一个1千多万的数据表,是记录的用户的产 ...

  7. mysql新闻分表,新闻数据库分表案例 - http://www.netkiller.cn - OSCHINA - 中文开源技术交流社区...

    本文节选自<Netkiller Architect 手札> 6.3. 新闻数据库分表案例 这里我通过一个新闻网站为例,解决分表的问题 避免开发中经常拼接表,我采用一个一劳永逸的方法,建立一 ...

  8. hash oracle 分表_数据库hash分表

    前言 平常我们一直用的就是按时间进行分表,按时间分表可以减轻以时间维度的查询.但是如果查询的条件不是时间,那么当查询主表的时候,就会去遍历所有的分表,没有起到分表的优化效果. 方法 如果不能按照时间分 ...

  9. MySQL学习_数据库和表的基本操作

    目录 1 创建和查看数据库 1.1 创建数据库 1.2 查看数据库 1.3 修改数据库 1.4 删除数据库 2 数据类型 2.1 整数类型 2.2 日期数据类型 2.3 字符串数据类型 3表的基本操作 ...

最新文章

  1. MPlayer的移植
  2. 学习Java需要达到的25个目标
  3. php安装问题_PHP安装十大经典问题
  4. sqlite database is locked 问题解决方案
  5. Cannot perform runtime binding on a null reference
  6. navicat for mysql 导入psc文件
  7. boost::mpi::cartesian_communicator相关用法的测试程序
  8. 4 指针运算_C++用指针访问数组元素(学习笔记:第6章 08)
  9. 《用python写网络爬虫》 编写第一个网络爬虫
  10. c++ 获取当前时间_ThinkPHP6中获取参数的3种常用方法【总结】
  11. 再也回不去的 GitHub。。。
  12. 多个android客户端使用的数据库,android – 将Firebase数据库与本地数据库一起使用...
  13. pywinauto简单示例
  14. 夏令营讲课内容整理 Day 6 Part 3.
  15. ES6 Map 数据结构、ES6 箭头函数
  16. linux pagecache与内存占用
  17. 用微PE安装KALI LINUX到U盘,【U盘安装kali】U盘+kali+pe三合一教程!装机,存储(自己用来做U盘使用的空间)...
  18. ROS位置导航基础之坐标变换
  19. Python运算(四)random模块secrets模块
  20. Idea 代码注释模板(获取参数,方法外可用) , java版

热门文章

  1. 基于python的Tkinter模块和Threading模块制作的用于班级/多人抽签的小程序
  2. Revit机电翻模插件【管线编辑】跨系统分类
  3. android广告平台哪个好用,安卓手机里谁家系统广告最少?看完后想说:真怕小米MIUI垫底!...
  4. maven依赖本地宝
  5. 同一局域网下两台电脑传文件
  6. 小程序使用分包整体大小可达到20M
  7. 纽约大学计算机专业研究生学费,美国纽约大学硕士学费
  8. Symbian开发FAQ(转)
  9. java用户头像保存_微信授权后获取用户头像保存到服务器
  10. pycharm IMPORTANT: You may need to close and restart your shell after running ‘conda init‘.