您的位置是:网站首页>Python编程Python编程

mysql如何分表

少儿编程网2020-11-13 13:31:50Python编程 人已围观 来源:少儿编程 -用户投稿

简介分表的原因:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。分库分表有垂直切分和水平切分两种:1、依照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这样的切分称之为数据的垂直(纵向)

版权所有:https://wWw.pxcodeS.com

Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

分表的原因:Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。
Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

分库分表有垂直切分和水平切分两种:Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

1、依照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这样的切分称之为数据的垂直(纵向)切分。Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

2、依据表中的数据的逻辑关系,将同一个表中的数据依照某种条件拆分到多台数据库(主机,当然也可能是同一个数据库)上面。这样的切分称之为数据的水平(横向)切分。Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

数据的垂直切分Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

将数据库想象成由非常多个一大块一大块的“数据块”(表)组成,我们垂直的将这些“数据块”切开,然后将他们分散到多台数据库(主机)上面,这样的切分方法就是一个垂直(纵向)的数据切分。Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

数据的水平切分Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

数据的垂直切分基本上能够简单的理解为依照表依照模块来切分数据,而水平切分就不再是依照表或者是功能模块来切分了。一般来说,简单的水平切分主要是将某个访问极其频繁的大表再依照某个字段的某种规则来分散到多个表之中。每一个表中包括一部分数据。Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

简单来说,就是将表中的某些行切分到一个数据库(表),而另外的某些行又切分到其它的数据库(表)中。当然,为了能够比较容易的判定各行数据被切分到哪个数据库(表)中了,切分总是都须要依照某种特定的规则来进行的。Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

水平分库分表的切分规则主要包括如下几种:Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

按号段分Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

user_id为区分,1~1000的对应DB1,1001~2000的对应DB2,以此类推;Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

优点:可部分迁移Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

缺点:数据分布不均Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

hash取模分:Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

对user_id进行hash,然后用一个特定的数字,比如应用中需要将一个数据库切分成4个数据库的话,我们就用4这个数字对user_id的hash值进行取模运算,也就是user_id%4,这样的话每次运算就有四种可能:结果为0的时候对应DB1;结果为1的时候对应DB2;结果为2的时候对应DB3;结果为3的时候对应DB4,这样一来就非常均匀的将数据分配到4个DB中。如上图所示。Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

优点:数据分布均匀Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

缺点:数据迁移的时候麻烦,不能按照机器性能分摊数据Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

在认证库中保存数据库配置Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

建立一个DB,这个DB单独保存user_id到DB的映射关系,每次访问数据库的时候都要先查询一次这个数据库,以得到具体的DB信息,然后才能进行我们需要的查询操作。Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

优点:灵活性强,一对一关系Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

缺点:每次查询之前都要多一次查询,性能大打折扣Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

其他方式Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

1)按照地理区域:比如按照华东,华南,华北这样来区分业务。Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

2)按照时间切分,就是将6个月前,甚至一年前的数据切出去放到另外的一张表,因为随着时间流逝,这些表的数据被查询的概率变小,所以没必要和“热数据”放在一起,这个也是“冷热数据分离”。Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

推荐:MySQL教程Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

来源:php中文网Kry少儿编程网-Scratch_Python_教程_免费儿童编程学习平台

版权所有:https://wWw.pxcodeS.com

相关文章:

支持一下 ( )

mysql如何分表

      匿名评论
    • 评论
    人参与,条评论
    mysql如何分表

微信公众号

免费视频教程

先知道