mysql 分库分表ITeye - 千亿集团

mysql 分库分表ITeye

2019-01-11 00:27:56 | 作者: 平安 | 标签: 分表,数据,数据库 | 浏览: 1674

1.为什么要分表:

当一张表的数据抵达几千万时,你查询一次所花的时刻会变多,假如有联合查询的话,我想有可能会死在那儿了。分表的意图就在于此,减小数据库的担负,缩短查询时刻。

mysql中有一种机制是表确认和行确认,是为了确保数据的完整性。表确认表明你们都不能对这张表进行操作,有必要等我对表操作完才行。行确认也相同,其他sql有必要等我对这条数据操作完了,才能对这条数据进行操作。

2. mysql proxy:amoeba

做mysql集群,使用amoeba。

从上层的java程序来讲,不需要知道主服务器和从服务器的来历,即主从数据库服务器关于上层来讲是通明的。能够通过amoeba来装备。

 3.大数据量而且拜访频频的表,将其分为若干个表

比方关于某网站渠道的数据库表-公司表,数据量很大,这种能预估出来的大数据量表,咱们就事前分出个N个表,这个N是多少,依据实际情况而定。

     某网站现在的数据量至多是5000万条,能够规划每张表包容的数据量是500万条,也便是拆分红10张表,

那么怎么判别某张表的数据是否容量已满呢?能够在程序段关于要新增数据的表,在刺进前先做统计表记载数量的操作,当 500万条数据,就直接刺进,当现已抵达阀值,能够在程序段新创建数据库表(或许现已事前创建好),再履行刺进操作。

 4. 使用merge存储引擎来完成分表

假如要把已有的大数据量表分隔比较苦楚,最苦楚的事便是改代码,由于程序里边的sql句子现已写好了。用merge存储引擎来完成分表, 这种办法比较合适.

举比如:

 

 ------------------- ----------富丽的切割线--------------------------------------

 数据库架构

1、简略的MySQL主从仿制:

MySQL的主从仿制处理了数据库的读写别离,并很好的提升了读的功能,其图如下:

 

其主从仿制的进程如下图所示:

 

可是,主从仿制也带来其他一系列功能瓶颈问题:

1. 写入无法扩展

2. 写入无法缓存

3. 仿制延时

4. 锁榜样上升

5. 表变大,缓存率下降

那问题发生总得处理的,这就发生下面的优化计划,一起来看看。

2、MySQL笔直分区

   假如把事务切割得满足独立,那把不同事务的数据放到不同的数据库服务器将是一个不错的计划,而且如果其间一个事务溃散了也不会影响其他事务的正常进行,而且也起到了负载分流的效果,大大提升了数据库的吞吐能力。通过笔直分区后的数据库架构图如下:

 

可是,虽然事务之间现已满足独立了,可是有些事务之间或多或少总会有点联络,如用户,基本上都会和每个事务相关联,何况这种分区方法,也不能处理单张表数据量暴升的问题,因而为何不试试水平切割呢?

3、MySQL水平分片(Sharding)

这是一个非常好的思路,将用户按必定规矩(按id哈希)分组,并把该组用户的数据存储到一个数据库分片中,即一个sharding,这样跟着用户数量的添加,只需简略地装备一台服务器即可,原理图如下:

 

怎么来确认某个用户地点的shard呢,能够建一张用户和shard对应的数据表,每次恳求先从这张表找用户的shard id,再从对应shard中查询相关数据,如下图所示:

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    exceptionITeye

    成果,形似,有点
  • 2
  • 3

    mysql的count函数优化ITeye

    索引,优化,情况
  • 4
  • 5

    DB2锁机制ITeye

    机制,程序,数据
  • 6

    oracle功能优化总结ITeye

    索引,视图,优化
  • 7

    oracle存储进程ITeye

    存储,进程,数据
  • 8

    Oracle中rownum、rowid、rowITeye

    相同,记载,排名
  • 9
  • 10