MySQL分表处理的实现方法

原创 2012年03月31日 08:59:13

MySQL分表处理用于处理海量的数据库,下面就为您详细介绍MySQL分表处理的实现方法,希望对您能够有所启迪。

面对海量数据的表的时候,我们需要对它进行分表处理,我是按月份分的表,即每月都要建立一张表

比如 table_2010_04,table_2010_05,table_2010_06......您可以根据自己的需要,可以根据时间和不同的字段以及类型来分表。我按月分表是因为我只需要查询每天的数据,不需要查月份的数据,不需要好几张表同时(union)查询,所以查询速度还是很快的,但是如果需要很多张表的union查询的话速度可能就要慢了,那时候就要重新考虑分表的方式了。

每个月的开始都要进行一个操作建立一张以月为单位的新表来存储过去一个月的数据,当然有一张表的表名是一直不变的,这张表是用来暂时存储新的一个月的数据的。

我现在有一张表叫 my_table ,那这张表是一直存在的,比如现在是六月三号,那六月份的数据就暂时存储在这张表中,这时候首先需要my_table变名,

rename table my_table to table_2010_05; 这时候就重新命名了my_table这张表,但是原来的my_table这张表还是存在的,只不过所有的数据都已经存储在table_2010_05这张表上了,这就是用rename进行批处理的好处,大量的数据不需要在进行转移的时候不需要进行导出和导入的操作,那样效率会很低,而且对数据库造成的压力会很大,

在重新命名了my_table这张表后需要重新要创建my_table这张表,CREAT my_table (.......)

table_2010_05 原则上存储的都是五月份的数据,但是因为是三号才进行这个操作,所以肯定是六月一号到三号的数据还是存储到了table_2010_05 这张表上,那就需要从这张表中把一号到三号的数据重新查找出来插入到my_table (暂时存储的是六月份的数据)

insert into my_table (field1,field2....) SELECT field1,field2....FROM my_table_2010_05 WHERE filed3 >= "2010-06-01"; 这样就把一号到三号的数据存入到了暂时存储六月份数据的my_table 到七月初的时候还要对该表进行重复的操作进行分表处理,my_table 这张表保持不变的好处是每次插入的sql语句就不用改了,但是进行查询的时候就需要对时间进行判断,以确定具体查找那一张表,因为我们已经进行了分表操作。

这样每个月初都重复这样一个操作,分表就顺利实现,在进行插入之间还要进行这样一个操作,ALTER TABLE my_table MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000;这样操作的好处是保证表存储好大量数据(超过2G)的数据,目前我的一个月的表中存储了11G多的数据,所以进行分表错做非常有必要,大家可以根据自己的实际情况来进行分表操作(如果是数据量很小的话就不需要进行这个操作了)


ALTER TABLE bm_user MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000

ALTER TABLE bm_user MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000;

ALTER TABLE bm_user MAX_ROWS=46000000

alter table bm_user max_rows=200000000000 avg_row_length = 50;

ALTER TABLE bm_user MAX_ROWS=1000000000

alter bm_user max_rows=2000000000000,avg_low_length=500000


水平分库分表的关键问题及解决思路

在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分库所带来的问题和解决方法。本篇中,我们将继续聊聊水平分库分表的一些技巧。 分片技术的由来 关系型数据库本身比较容易成为系统性...
  • george_auyeung
  • george_auyeung
  • 2017年08月31日 14:40
  • 276

Java 大型系统高并发大数据的处理方式

页面静态化 (页面层面的缓存) 缓存 (memcached、Redis等,数据缓存、避免多次请求) 集群负载均衡(单机处理能力不足) 分库分表(大量数据的处理、原则分、分、分) 读写分离 队...
  • white__cat
  • white__cat
  • 2017年02月24日 09:04
  • 502

使用Merge存储引擎实现 mysql分表

分表就是把N条记录的表,分成若干个分表,各个分表记录的总和仍为N。   分表的方法有很多,用merge来分表,是最简单的一种方式. Merge表的优点: A: 分离静态的和动态的数据 B:...
  • rorntuck7
  • rorntuck7
  • 2016年02月15日 14:26
  • 1878

mysql分表处理基本设计思想和实现

from: http://hi.baidu.com/pplboy/item/faf85093ad9ce11d934f41fd 一、概述 分表是个目前算是比较炒的比较流行的概念,特别是在大负载的...
  • nomad2
  • nomad2
  • 2014年03月24日 03:04
  • 1612

分库分表方案之Shark

Shark用户指南 分布式mysql分库分表中间件,sharding领域的一站式解决方案。具备丰富、灵活的路由算法支持,能够方便DBA实现库的水平扩容和降低数据迁移成本。shark采用应用集成架构,...
  • huangzhengbo
  • huangzhengbo
  • 2017年11月07日 10:02
  • 413

MySQL数据库如何解决大数据量存储问题

利用MySQL数据库如何解决大数据量存储问题? 各位高手您们好,我最近接手公司里一个比较棘手的问题,关于如何利用MySQL存储大数据量的问题,主要是数据库中的两张历史数据表,一张模拟量历史数据和...
  • likika2012
  • likika2012
  • 2014年08月25日 09:11
  • 90063

mysql分表存储过程

分表存储过程 CREATE DEFINER=`hs_us_hq`@`%` PROCEDURE `bk_trade_data`() BEGIN #Routine body goes here.....
  • yangxujia
  • yangxujia
  • 2016年11月04日 16:38
  • 516

mysql分表的方法

一、利用merge存储引擎来实现分表 1、创建分表,和主表的表结构相同,这里创建3个表 [sql] view plaincopy CREA...
  • l241002209
  • l241002209
  • 2014年08月15日 11:06
  • 722

分库分表的几种常见形式

在谈论数据库架构和数据库优化的时候,我们经常会听到“分库分表”、“分片”、“Sharding”…这样的关键词。让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着...
  • yu757371316
  • yu757371316
  • 2018年02月10日 09:56
  • 64

mysql大数据量表的处理方法(拆表,分区)

在我们正常开发中基本都会遇到一个表中已有大量数据,比如达到了两三G,几千万条数据,这时候对于这种表的维护就相对困难,查询效率上也比较低; 处理这样的表一般有2种做法,一是分表,二是分区; 分表: ...
  • u011484382
  • u011484382
  • 2013年10月30日 15:46
  • 2465
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL分表处理的实现方法
举报原因:
原因补充:

(最多只允许输入30个字)