美文网首页
分表,分区,分库概念及实现

分表,分区,分库概念及实现

作者: 其实都没有_8881 | 来源:发表于2019-03-15 13:15 被阅读0次

分表(参考文章(侵权删)

1.目的:如用户表,随着业务不断扩展,表越来愈大,代码里的sql语句就会慢慢越来越慢,这个时候将一个表分解成多个表,每个表查询时控制在良好的速度,这样就起到了优化的作用。

2.实现方式:1)水平分表,即表的数据结构相同,只是存储的数据不同 [merge引擎分表只能在MyISAM引擎下,不支持InnoDB]

具体实现:1.创建表:表1   ->    create table tb_member1(

                                    id bigint primary key auto_increment ,

                                    name varchar(20),

                                    sex tinyint not null default '0'

                                    )ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

                                    表2 -> create table tb_member2 like tb_member1;

                                    表3(关键,总表只是一个外壳,存取数据发生在一个一个的分表里面,不管是更新还是增加总表都跟随分表)   -> DROP table IF EXISTS tb_member;

                                                create table tb_member(

                                                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 ;

                   2.定义一个算法,来检测,什么时候访问哪个表

                        这个可以自己从逻辑上去控制,比如说新增,规定一个表最多只能存储1000个用户,判断表大小然后存储在对应的表里,如果是更新操作,根据用户的id来找哪个用户存储在哪个表即可。

        2)垂直分表:将一张表按照列进行分

        如:用户表有如下字段,id,name,sex,money  就可以分成表1id,name,sex  表2 id,money 将冷数据(不常变化的数据)放在一张表,热数据(经常变动的数据)放在一张表 冷数据可用MyISAM(适合读取)的引擎,热数据用InnoDB(适合写)的引擎

分库

分库的理念其实同分表差不多,例如,一个系统中存在用户表,商品表,系统表等,随着业务的不断扩展,表的数据不断壮大,为了减少数据库的并发量,可以单独将用户表分离出数据库,形成新的用户中心数据库,商品表同样成为商品中心数据库。操作的时候根据分解的规则去操作数据库,如果是分库的话,业务逻辑中肯定会牵扯到多数据库操作

分区(请参考文章一  文章二 侵权删)

1.数据存放格式

myisam: .frm(存放表结构). myd(存放表数据).myi(存表索引)

innnodb:.frm(存放表结构).idb(存放数据和索引)

用range方式进行分区:

1)创建数据表并创建分区:create table t1 (id int not null) 

                                            partition BY RANGE (id) (

                                             partition p0 VALUES LESS THAN (6),

                                            partition p1 VALUES LESS THAN (11),

                                            partition p2 VALUES LESS THAN (16),

                                            partition p3 VALUES LESS THAN (21)

                                        );

2)数据表已存在,创建分区:ALTER TABLE t1 PARTITION BY RANGE (id)

                                            ( PARTITION p1 VALUES LESS THAN (6),

                                            PARTITION p2 VALUES LESS THAN (6),

                                            PARTITION p3 VALUES LESS THAN MAXVALUE );

用list方式进行分区

创建表和创建分区都同上,只是关键字为list

                                        PARTITION BY LIST(store_id)

                                        PARTITION pNorth VALUES IN (3,5,6,9,17),

                                        PARTITION pEast VALUES IN (1,2,10,11,19,20),

                                        PARTITION pWest VALUES IN (4,12,13,14,18),

                                        PARTITION pCentral VALUES IN (7,8,15,16)

                                        );

    还有其他分区方式,目前我这两种是比较好理解的

遗留问题:分表和分库时怎么保证线上数据库正常运行,同时也不影响以后的业务,这个可能是非常麻烦也关键的

总结:以上所有都只是为进一步学习下mysql数据相关的知识,关于分表,分库,分区,mysql集群这样的话题是一个很大的话题,不是单单百度下就可以了解其中的奥妙的,时间才是检验真理的唯一标准,不管是使用哪种方式去分区,分表,分库,都有优缺点,最好是根据项目实际出发,考量。

相关文章

  • 分表,分区,分库概念及实现

    分表(参考文章(侵权删)) 1.目的:如用户表,随着业务不断扩展,表越来愈大,代码里的sql语句就会慢慢越来越慢,...

  • Springboot整合 ShardingSphere 实现分库

    概述 之前介绍过分布式系统中,分库分表分区的概念,可参考 《分布式系统中,数据库的分表、分库和分区基本概念梳理[h...

  • Mysql分区分析

    关于什么是分区和分表,可以先参考下面前两篇文章。 MySQL 分库分表与分区的区别和思考搞懂MySQL分区MySQ...

  • [MySQL]MySQL分区与传统的分库分表

    传统的分库分表 传统的分库分表都是通过应用层逻辑实现的,对于数据库层面来说,都是普通的表和库。 分库 分库的原因 ...

  • MySQL分库分表、分区

      今天介绍下分库分表、分区。这块理解起来也比较简单。传统应用一般访问量小,数据量小,所以单表就能解决问题,但随着...

  • mysql分库分表分区

    为什么要设计分库分表 由于业务发展,单表的数据量激增,单库单表无法承载整体的数据存储时,采取的一种将整体数据分散存...

  • MySQL优化

    1、 读写分离2、 给查询字段添加索引3、 分表4、 分库5、 分区

  • 面试必备:我们为什么要分库分表?

    目录 什么是分库分表 为什么需要分库分表呢 如何分库分表 什么时候开始考虑分库分表 分库分表会导致哪些问题 分库分...

  • Mysql的分库分表,水平拆分-垂直拆分

    参考文章MySQL分库分表总结参考数据库分库分表策略,如何分库,如何分表?MySQL分库分表原理 MySQL单库数...

  • 5.5MySQL高可扩展和高可用考点

    考官考点分区表的原理分库分表的原理延伸:MySQL的复制原理及负载均衡 工作原理对用户而言,分区表是一个独立的逻辑...

网友评论

      本文标题:分表,分区,分库概念及实现

      本文链接:https://www.haomeiwen.com/subject/rfncmqtx.html