1亿条数据如何分表100张到Mysql数据库中(PHP)

下面通过创建100张表来演示下1亿条数据的分表过程,具体请看下文代码。

当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度。笔者做了一个简单的尝试,1亿条数据,分100张表。具体实现过程如下:

首先创建100张表:

 $i=0;
 while($i<=99){
 echo "$newNumber \r\n";
 $sql="CREATE TABLE `code_".$i."` (
 `full_code` char(10) NOT NULL,
 `create_time` int(10) unsigned NOT NULL,
 PRIMARY KEY (`full_code`),
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8";
 mysql_query($sql);
 $i++;

下面说一下我的分表规则,full_code作为主键,我们对full_code做hash

函数如下:

$table_name=get_hash_table('code',$full_code);
function get_hash_table($table,$code,$s=100){
$hash = sprintf("%u", crc32($code));
echo $hash;
$hash1 = intval(fmod($hash, $s));
 return $table."_".$hash1;
}

这样插入数据前通过get_hash_table获取数据存放的表名。

最后我们使用merge存储引擎来实现一张完整的code表

CREATE TABLE IF NOT EXISTS `code` (
`full_code` char(10) NOT NULL,
`create_time` int(10) unsigned NOT NULL,
INDEX(full_code)
) TYPE=MERGE UNION=(code_0,code_1,code_2.......) INSERT_METHOD=LAST ;

这样我们通过select * from code就可以得到所有的full_code数据了。

以上介绍就是本文的全部内容,希望对大家有所帮助。

(0)

相关推荐

  • Yii2——使用数据库操作汇总(增删查改、事务)

    本文介绍了 Yii2--使用数据库操作汇总(增删查改.事务),具体如下: 对象操作 查询 //1.简单查询 $admin=Admin::model()->findAll($condition,$params); $admin=Admin::model()->findAll("username=:name",array(":name"=>$username)); $infoArr= NewsList::model()->findAll(&quo

  • 详解yii2实现分库分表的方案与思路

    前言 大家可以从任何一个gii生成model类开始代码上溯,会发现:yii2的model层基于ActiveRecord实现DAO访问数据库的能力. 而ActiveRecord的继承链可以继续上溯,最终会发现model其实是一个component,而component是yii2做IOC的重要组成部分,提供了behaviors,event的能力供继承者扩展. (IOC,component,behaviors,event等概念可以参考http://www.digpage.com/学习) 先不考虑上面的

  • Yii2框架数据库简单的增删改查语法小结

    User::find()->all(); //返回所有用户数据: User::findOne($id); //返回 主键 id=1 的一条数据: User::find()->where(['name' => 'ttt'])->one(); //返回 ['name' => 'ttt'] 的一条数据: User::find()->where(['name' => 'ttt'])->all(); //返回 ['name' => 'ttt'] 的所有数据: U

  • yii2.0数据库迁移教程【多个数据库同时同步数据】

    本文讲述了yii2.0数据库迁移的方法.分享给大家供大家参考,具体如下: 创建迁移 使用如下命令来创建一个新的迁移: yii migrate/create <name> 必填参数 name 的作用是对新的迁移做一个简要的描述.例如,如果这个迁移是用来往多个数据库同一张表  ( 假设每个数据库都有news表 )   添加字段的,那么你可以使用addColumn_news (该名称自定义)这个名称并运行如下命令: yii migrate/create addColumn_news 注意:因为 na

  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作. User::find()->all();    //返回所有用户数据: User::findOne($id);   //返回 主键 id=1  的一条数据: User::find()->where(['name' => 'ttt'])->one();   //返回 ['name' => 'ttt'] 的一条数据: User::find(

  • php 分库分表hash算法

    复制代码 代码如下: //分库分表算法 function calc_hash_db($u, $s = 4) { $h = sprintf("%u", crc32($u)); $h1 = intval(fmod($h, $s)); return $h1; } for($i=1;$i<100;$i++) { echo calc_hash_db($i); echo "<br>"; } function calc_hash_tbl($u, $n = 256

  • PHP操作mysql数据库分表的方法

    一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.首先,我们需要想好到底分多少个 表,前提当然是满足应用.这里我使用了一个比较简单的分表方法,就是根据自增id的尾数来分,也就是说分0-9一共10个表,其取值也很好做,就是对10 进行取模.另外,还可以根据某一字段的md5值取其中几位进行分表,这样的话,可以分的表就很多了. 好了,先来创建表吧,代码如下: CREATE TABLE `ttlsa_com`.`article_0` ( `i

  • php实现mysql数据库分表分段备份

    分卷导出思路:统计sql语句变量的长度,按1个字符当成1 字节比较,如果大于设定分卷大小,则写入一个sql文件(我也不知道这样统计是否稳当,这也是借鉴其他的人的). 分卷导入思路:按行读取sql文件,将每一行当作完整的sql语句存到数组再循环执行插入数据库就可以了,但是在创建表语句分了多行,这个需要单独处理(就这个花了我好长时间的): <?php //宋正河 转载请注明出处 set_time_limit(0); header('content-type:text/html;charset=utf

  • YII2数据库查询实践

    初探yii2框架,对增删改查,关联查询等数据库基本操作的简单实践. 数据库配置. /config/db.php 进行数据库配置 实践过程中有个test库->test表->两条记录如下 mysql> select * from test; +----+--------+ | id | name | +----+--------+ | 1 | zhuai | | 2 | heng | +----+--------+ 18 rows in set (0.00 sec) sql 查询方式 yii

  • 使用Yii2实现主从数据库设置

    前言 MySQL主从同步是目前使用比较广泛的数据库架构,技术比较成熟,配置也不复杂,特别是对于负载比较大的网站,主从同步能够有效缓解数据库读写的压力.以前在使用yii1的时候,主从数据库的支持没有那么方便,只能写上多个DB的components,然后在AR的getDB中返回相应的db.这样也可以用来对付主从数据库 实现方法 Yii2则已经解决这个问题,直接在代码中进行处理即可: PHP代码 'db' =>[ 'class' => 'yii\db\Connection', // 配置主服务器 '

随机推荐