MYSQL 分表分区

MySQL分区分表

为什么要分区和分表

我们的数据库数据越来越大,随之而来的是单个表中数据太多,以至于查询速度过慢,而且由于表的锁机制导致应用操作也受到严重影响,出现数据库性能瓶颈。

以阿里订单系统为例(参考《企业IT架构转型之道:阿里巴巴中台战略思想与架构实现》),它选择了三个column作为三个独立的sharding column,即:order_id,user_id,merchant_code。user_id和merchant_code就是买家ID和卖家ID,因为阿里的订单系统中买家和卖家的查询流量都比较大,并且查询对实时性要求都很高。而根据order_id进行分库分表,应该是根据order_id的查询也比较多。所以要分表分区存在

MySQL中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示我在操作表时,你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操纵。但出现这种情况时,我们可以考虑分表或者分区。

1、分表

什么是分表

分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,MYI索引文件,frm表结构文件。这些表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的表名,然后去操作他。

用单个数据库表进行拆分,拆分成多个数据表,然后用户访问的时候,根据一定的算法(如用hash算法的方式,也可以用求余(取模)的方式),让用户访问不同的表,这样数据分散到多个数据表中,减少了单个表的访问压力,提升了数据库的访问性能。分表的目的就在于此,减少数据库的负担,缩短查询时间。

MySQL分表分为垂直切分和水平切分

垂直切分是指数据表列的切分,把一张列比较多的表拆分为多张表。 通常我们按照以下原则进行垂直切分: 把不常用的字段单独放到一张表。 把text,blob(binary large object,二进制大对象)等大字段拆分出来放在附表中 经常组合查询的列放在一张表中: 垂直切分更多时候就应该在数据表设计之初就执行的步骤,然后查询的时候用join关键起来即可。 水平拆分是指数据表行的拆分,把一张表的数据拆成多张表来存放。

水平拆分的原则 通常情况下,我们使用hash,取模的方式来进行表的拆分。 比如一张拥有400W的用户表users,为了提高其查询效率,我们把其分为四张表 user1,user2,user3,user4 通过ID取模的方法把数据分散到四张表内 id%4=[0,1,2,3] 然后查询,更新,删除也是通过取模的方式来查询 部分业务逻辑也可以通过地区,年份等字段来进行归档拆分; 进行拆分后的表,这是我们就要约束用户的查询行为。比如我们是按年来进行拆分的,这个时候在页面设计上就约束用户必须要先选择年,然后才能进行查询。分表的几种方式

1、mysql集群 他并不是分表,但是起到了和分表相同的作用。集群可分担数据库的操作次数,将任务分担到多台数据库上。集群可以读写分离,减少读写的压力。从而提升数据库的性能。

2、预先估计会出现大数据量并且访问频繁的表,将其分为若干个表 根据一定的算法(如hash的方式,也可以使用求余(取模)的方式)让用户访问不同的表。

3、利用merge存储去引擎来实现分表 merge分表,分为主表和子表,主表类似于一个壳子,逻辑上封装了子表,实际上都是存储在子表中的。 我们可以通过主表插入和查询数据,如果清除分表规律也可以直接操作子表。

2、分区

什么是分区

分区和分表相似,都是按照规则分解表。不同在与分表将大表分解若干个独立的实体表,而分区是将数据分段划分在多个位置存放,分区后,表还是一张表,但数据散列到多个位置了。app读写的时候操作还是表名子,db自动去组织分区的数据。

分区主要的两种数据;

    水平分区:这种形式的分区是对表的行进行分区,所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。

    垂直分区:这种分区形式一般来说是通过对表的垂直划分来减少对目标表的宽度,使某些特定的列,被划分到特定的分区,每个分区都包括了其中的列所对应的行。

3、实现方式上

1、mysql的分表是真正意义上的分表,一张表分成很多表以后,每一个小表都是完整的一张表,都对应三个文件,一个是MYD数据文件,MYI索引文件,frm表结构文件

2、分区不一样,一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了。

2、在数据上

1、分表后,数据都是存放在分表里,总表只是一个外壳,存放数据发生在一个一个的分表里。

2、分区呢,不存在分表的概念,分区只不过把存放数据的文件分成许多的小块,分区后的表呢,还是一张表,数据处理还是有自己完成。

3、提高性能上

1、分表后,单表的并发能力提高了,磁盘IO性能提高了。

为什么并发提高了,因为查询一次所花的时间变短了,如果出现高并发的花,总表可以根据不同的查询,将并发压力分到不同的小表里面。

2、mysql提出了分区的概念,主要是想突破磁盘的IO瓶颈,提高磁盘的读写能力,提高磁盘的读写能力来增加mysql的性能。

在这一点上,分区和分表的侧重点不同,分表重点是存取数据时,如何提高mysql并发能力上,而分区是突破磁盘的读写能力,从而达到提高mysql性能的目的。

4、实现难易程度上

1、分表的方法有很多,用merge来分表,是最简单的一种方式。这种方式跟分区的难以程度差不多,并且对程序代码来说可以做到透明。如果是用其他分表方式就比分区麻烦了。

2、分区实现是比较简单的,建立分区表,跟建平常的表没有什么区别,并且对开代码端来说是透明的。

mysql分表和分区有什么联系

1、都是提高mysql的性能,在高并发的状态下都有一个良好的表现

2、分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表。我们可以采取分区的方式,访问量不大,但是表数据较多的表,我们可以采取分区的方式等。

3、分表技术是比较麻烦的,需要手动去创建子表,app服务端读写的时候需要计算子表名。采用merge好一些,但也要创建子表和配置子表间的union关系。

4、表分区相当于分表,操作方便,不需要创建子表。

具体可以参考下面大牛博客:

https://www.cnblogs.com/butterfly100/p/9034281.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,548评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,497评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,990评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,618评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,618评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,246评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,819评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,725评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,268评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,356评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,488评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,181评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,862评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,331评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,445评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,897评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,500评论 2 359

推荐阅读更多精彩内容

  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,736评论 0 30
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,440评论 1 8
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,334评论 0 9
  • Sharding的基本思想其实就是采用分治的思想,要把一个数据库切分成多个部分放到不同的数据库(server)上,...
    jiangmo阅读 9,402评论 0 7
  • 今年,远赴北方过年,却意外碰上飞机晚点了!除夕夜只能在飞机上用餐;孩子觉得新奇有趣,大人心中却万分忐忑,担...
    馨眼看世界阅读 272评论 0 5