文档章节

MySQL分表

私人暖炉
 私人暖炉
发布于 2017/07/26 11:25
字数 382
阅读 3
收藏 0

假设现在有一个应用系统可能会有100亿的用户量,另外一个表一般存储量在不超过100万的时候基本能保持良好性能,计算下来,我们需要1万张表,即分表为1万个表。

例如原表是sina_userinformation,包含字段有id,name,sex,address.........。首先需要创建s_userinformation1-100000.

DROP table IF EXISTS s_userinformation1;
create table s_userinformation1(
    id bigint primary key auto_increment ,
    name varchar(20),
    sex tinyint not null default '0',
    ....
)ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

创建剩余表可以写一个脚本 ,其中用   "create table s_userinformation".$num."like s_userinformation1;" 语句来创建其余的表

最后创建总表

DROP table IF EXISTS s_userinformation;
create table s_userinformation(
id bigint primary key auto_increment ,
name varchar(20),
sex tinyint not null default '0',

..........
)ENGINE=MERGE UNION=(tb_member1,tb_member2,........) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1 ;

接下来分数据到每个表中 “insert into tb_member".$i."(id,name,sex...........) select id,name,sex....... from sina_userinfomation where id%".$count."=".$i-1.";"

//查询数据

解释一下:($id >> 20)表示将向右移位20位,(向右移动一位标示减少一半),printf('%d',$data)标示将数据按照十进制输出。

               即id为1~1048575(2的20次幂-1)时均访问user_0,1048576~2097152时访问user_1,以此类推.....

那么问题来了,如果用户更多怎么办,现在需要一个可扩展的方法:

function getTable($id,$bit,$seed){

   return 'user_'.sprintf('%0{$bit}d',($id >> $seed));

}

其中:$id为用户id,$bit标示表后缀的位数,$seed表示要移位的位数即:单个表能存储的记录条数。

这样就可以任意分表了。

© 著作权归作者所有

共有 人打赏支持
私人暖炉
粉丝 1
博文 21
码字总数 3096
作品 0
保定
mysql分表,分区的区别和联系

mysql分表,分区的区别和联系 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成...

henosteven
2012/08/27
0
0
mysql分表,分区的区别和联系

一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同...

haorizi
2013/03/11
0
1
PHPer面试指南-MySQL 篇

本书的 GitHub 地址:https://github.com/todayqq/PHPerInterviewGuide 什么是索引,作用是什么?常见索引类型有那些?Mysql 建立索引的原则? 索引是一种特殊的文件,它们包含着对数据表里所...

angkee
01/24
0
0
多线程检索 mysql 分表模式,发挥分表方案的最大性能

我天真的认为,mysql 的 merge 引擎分表模式下,mysql 会自动启用多线程对旗下的子表进行并发检索,但到目前为止我是没找到 mysql 的此机制设置,简单测试下就会发现....mysql 依然是依次检索...

big_cat
2016/05/19
154
0
Mysql分表和分区的区别、分库和分表区别

分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法。 什么是分区,分区呢就是把一张表的数据分成N多个...

sailikung
05/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
0
0
spring EL 和资源调用

资源调用 import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.Resource;......

Canaan_
今天
0
0
memcached命令行、memcached数据导出和导入

一、memcached命令行 yum装telnet yum install telent 进入memcached telnet 127.0.0.1 11211 命令最后的2表示,两位字节,30表示过期时间(秒) 查看key1 get key1 删除:ctrl+删除键 二、m...

Zhouliang6
今天
0
0
Linux定时备份MySQL数据库

做项目有时候要备份数据库,手动备份太麻烦,所以找了一下定时备份数据库的方法 Linux里有一个 crontab 命令被用来提交和管理用户的需要周期性执行的任务,就像Windows里的定时任务一样,用这...

月夜中徘徊
今天
1
1
shell-日志脚本小实验

1.查找日志2018-8-15,求得那一分钟访问量最大。 #/bin/bash#from cc#2018-8-15#2018-08-15.log 哪一分钟 访问量 最大for d in `ls /data/nginx/logs/`doif [ -a 2018-08-15...

chencheng-linux
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部