QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1444|回复: 3

[PHP开发] 1亿条数据在PHP中实现Mysql数据库分表100张

[复制链接]

274

主题

292

帖子

1143

积分

中级会员

Rank: 3Rank: 3

积分
1143
发表于 2015-7-30 09:05:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度。笔者做了一个简单的尝试,1亿条数据,分100张表。具体实现过程如下:
首先创建100张表:
  1. $i=0;
  2. 2 while($i<=99){
  3. 3 echo "$newNumber \r\n";
  4. 4 $sql="CREATE TABLE `code_".$i."` (
  5. 5  `full_code` char(10) NOT NULL,
  6. 6  `create_time` int(10) unsigned NOT NULL,
  7. 7  PRIMARY KEY  (`full_code`),
  8. 8 ) ENGINE=MyISAM DEFAULT CHARSET=utf8";
  9. 9 mysql_query($sql);
  10. 10 $i++;
复制代码
下面说一下我的分表规则,full_code作为主键,我们对full_code做hash
函数如下:
  1. $table_name=get_hash_table('code',$full_code);
  2. 2 function get_hash_table($table,$code,$s=100){
  3. 3 $hash = sprintf("%u", crc32($code));
  4. 4 echo $hash;
  5. 5 $hash1 = intval(fmod($hash, $s));
  6. 6  return $table."_".$hash1;
  7. 7 }
复制代码
  1. CREATE TABLE IF NOT EXISTS `code` (  
  2. 2 `full_code` char(10) NOT NULL,
  3. 3 `create_time` int(10) unsigned NOT NULL,
  4. 4 INDEX(full_code)  
  5. 5 ) T
复制代码
这样我们通过select * from code就可以得到所有的full_code数据了。

0

主题

2

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2016-2-26 15:16:36 | 显示全部楼层
直接操作数据库,为啥不行呢

4

主题

78

帖子

2965

积分

中级会员

Rank: 3Rank: 3

积分
2965

灌水之王活跃会员

发表于 2016-2-28 21:13:08 | 显示全部楼层
真的可以这么实现么

0

主题

1

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2016-3-4 11:29:27 | 显示全部楼层
感谢楼主分享~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

     
    战略合作|联系方式|广告赞助|商务合作|手机版|小黑屋|( 京ICP备14036609号-6 )

GMT+8, 2017-6-28 03:10

© 2013-2017 Powered by Discuz! X3.3. 本站由 又拍云 提供 CDN 图片存储服务 七牛 提供 CDN 静态文件加速服务

快速回复 返回顶部 返回列表