亿条数据在PHP中实现Mysql数据库分表100张

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

首先创建100张表:

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

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

函数如下:

1 $table_name=get_hash_table(‘code‘,$full_code);
2 function get_hash_table($table,$code,$s=100){
3 $hash = sprintf("%u", crc32($code));
4 echo $hash;
5 $hash1 = intval(fmod($hash, $s));
6  return $table."_".$hash1;
7 }

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

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

1 CREATE TABLE IF NOT EXISTS `code` (  
2 `full_code` char(10) NOT NULL,
3 `create_time` int(10) unsigned NOT NULL,
4 INDEX(full_code)  
5 ) TYPE=MERGE UNION=(code_0,code_1,code_2.......) INSERT_METHOD=LAST ; 
这样我们通过select * from code就可以得到所有的full_code数据了。

时间: 2024-10-01 04:44:16

亿条数据在PHP中实现Mysql数据库分表100张的相关文章

MySQL数据库分表分区(一)(转)

面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗? 答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的 解决方案: 目前针对海量数据的优化有两种方法: 1.大表拆小表的方式(主要有分表和分区两者技术) (1)分表技术 垂直分割 优势:降低高并发情况下,对于表的锁定. 不足:对于单表来说,随着数据库的记录增多,读写压力将进一步增大. 水平分割 如果单表的IO压力大,可以考虑用水平分割,其原理就是通过hash算法,将一张表分为N

MySQL 数据库分表分区

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!一.分表 为什么要分表? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. 什么是分表? 分表是将一个达标按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,.MYD数据文件..MYI索引文件..frm表结构文件.这些表可以分

mysql数据库分表分区

防伪码:博观而约取,厚积而薄发 为什么要分表和分区? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且 由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. mysql 中有一种机制是表锁定和行锁定,是为了保证数据的完整性.表锁定表示你们都不能 对这张表进行操作,必须等我对表操作完才行.行锁定也一样,别的 sql 必须等我对这条数 据操作完了,才能对这条数据进行操作.当出现这种情况时,我们可以考虑分表或分区. 1.分表 什么是分表? 分表是将一个大表按

MySQL数据库分表分表区

为什么要分表和分区? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性.表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行.行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作.当出现这种情况时,我们可以考虑分表或分区. 1.分表 什么是分表? 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体

MySQL数据库分表的3种方法【转】

一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. 根据个人经验,mysql执行一个sql的过程如下:1,接收到sql;2,把sql放到排队队列中 ;3,执行sql;4,返回执行结果.在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间,第二,sql的执行时间.其实这二个是一回事,等待的同时,肯定有sql在执行.所以我们要缩短sql的执行时间. mysql中有一种

Mycat(4):消息表mysql数据库分表实践

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 未经博主允许不得转载. 1,业务需求 比如一个社交软件,比如像腾讯的qq.可以进行群聊天(gid),也可以单人聊天. 这里面使用到了数据库中间件mycat,和mysql数据表分区. 关于mycat分区参考: [ 数据库垂直拆分,水平拆分利器,cobar升级版mycat] http://blog.csdn.net/freewebsys/article/details

MySQL数据库 分表分库备份及批量恢复如何进行?

脚本实现 #!/bin/bash for db_name in `mysql -e "show databases;"|sed 1d` do mkdir -p /backup/$db_name for table_name in `mysql -e "show tables from $db_name"|sed 1d` do /application/mysql/bin/mysqldump  --master-data=2 $db_name $table_name

php+mysql 数据库分表分段备份程序--宋正河

<?php //宋正河 转载请注明出处 set_time_limit(0); header('content-type:text/html;charset=utf-8'); mysql_connect('localhost','root','root'); mysql_select_db('test'); $table_array=get_tables('test'); mysql_query('set names utf8'); $filesize=1024*1024*4; $start=$_

记录几篇介绍mysql数据库分表策略的文章

https://my.oschina.net/ydsakyclguozi/blog/199498 https://aws.amazon.com/articles/0040302286264415