MySql分表、分库、分片和分区知识点介绍

 更新时间:2020年02月26日 23:49:47   作者:单纯的心  
数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈。需要进行数据的处理,采用的手段是分区、分片、分库、分表,这里就为大家介绍一下,需要的朋友可以参考下

一、前言

    数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈。需要进行数据的处理,采用的手段是分区、分片、分库、分表。

二、分片(类似分库)

     分片是把数据库横向扩展(Scale Out)到多个物理节点上的一种有效的方式,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。Shard这个词的意思是“碎片”。如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。将整个数据库打碎的过程就叫做分片,可以翻译为分片。

     形式上,分片可以简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个片,分区方式可以是任意的,并不局限于传统的水平分区和垂直分区。一个分片可以包含多个表的内容甚至可以包含多个数据库实例中的内容。每个分片被放置在一个数据库服务器上。一个数据库服务器可以处理一个或多个分片的数据。系统中需要有服务器进行查询路由转发,负责将查询转发到包含该查询所访问数据的分片或分片集合节点上去执行。

三、Scale Out/Scale Up 和 垂直切分/水平拆分

Mysql的扩展方案包括Scale Out和Scale Up两种。

Scale Out(横向扩展)是指Application可以在水平方向上扩展。一般对数据中心的应用而言,Scale out指的是当添加更多的机器时,应用仍然可以很好的利用这些机器的资源来提升自己的效率从而达到很好的扩展性。

Scale Up(纵向扩展)是指Application可以在垂直方向上扩展。一般对单台机器而言,Scale Up值得是当某个计算节点(机器)添加更多的CPU Cores,存储设备,使用更大的内存时,应用可以很充分的利用这些资源来提升自己的效率从而达到很好的扩展性。

MySql的Sharding策略包括垂直切分和水平切分两种。

垂直(纵向)拆分:是指按功能模块拆分,以解决表与表之间的io竞争。比如分为订单库、商品库、用户库...这种方式多个数据库之间的表结构不同。

水平(横向)拆分:将同一个表的数据进行分块保存到不同的数据库中,来解决单表中数据量增长出现的压力。这些数据库中的表结构完全相同。

表结构设计垂直切分。常见的一些场景包括

a).大字段的垂直切分。单独将大字段建在另外的表中,提高基础表的访问性能,原则上在性能关键的应用中应当避免数据库的大字段

b). 按照使用用途垂直切分。例如企业物料属性,可以按照基本属性、销售属性、采购属性、生产制造属性、财务会计属性等用途垂直切分

c). 按照访问频率垂直切分。例如电子商务、Web 2.0系统中,如果用户属性设置非常多,可以将基本、使用频繁的属性和不常用的属性垂直切分开

表结构设计水平切分。常见的一些场景包括

a). 比如在线电子商务网站,订单表数据量过大,按照年度、月度水平切分

b). Web 2.0网站注册用户、在线活跃用户过多,按照用户ID范围等方式,将相关用户以及该用户紧密关联的表做水平切分

c). 例如论坛的置顶帖子,因为涉及到分页问题,每页都需要显示置顶贴,这种情况可以把置顶贴水平切分开来,避免取置顶帖子时从所有帖子的表中读取

四、分表和分区

分表从表面意思说就是把一张表分成多个小表,分区则是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上。

分表和分区的区别

1,实现方式上

mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件(MyISAM引擎:一个.MYD数据文件,.MYI索引文件,.frm表结构文件)。

2,数据处理上

分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。分区则不存在分表的概念,分区只不过把存放数据的文件分成了许多小块,分区后的表还是一张表,数据处理还是由自己来完成。

3,提高性能上

分表后,单表的并发能力提高了,磁盘I/O性能也提高了。分区突破了磁盘I/O瓶颈,想提高磁盘的读写能力,来增加mysql性能。

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

4,实现的难易度上

分表的方法有很多,用merge来分表,是最简单的一种方式。这种方式和分区难易度差不多,并且对程序代码来说可以做到透明的。如果是用其他分表方式就比分区麻烦了。分区实现是比较简单的,建立分区表,跟建平常的表没什么区别,并且对代码端来说是透明的。

分区的适用场景

1. 一张表的查询速度已经慢到影响使用的时候。

2.表中的数据是分段的

3.对数据的操作往往只涉及一部分数据,而不是所有的数据

CREATE TABLE sales (
    id INT AUTO_INCREMENT,
    amount DOUBLE NOT NULL,
    order_day DATETIME NOT NULL,
    PRIMARY KEY(id, order_day)
) ENGINE=Innodb
PARTITION BY RANGE(YEAR(order_day)) (
    PARTITION p_2010 VALUES LESS THAN (2010),
    PARTITION p_2011 VALUES LESS THAN (2011),
    PARTITION p_2012 VALUES LESS THAN (2012),
PARTITION p_catchall VALUES LESS THAN MAXVALUE);

分表的适用场景

1. 一张表的查询速度已经慢到影响使用的时候。

2.当频繁插入或者联合查询时,速度变慢。

分表的实现需要业务结合实现和迁移,较为复杂。

五、分表与分库

分表能够解决单表数据量过大带来的查询效率下降的问题,但是,却无法给数据库的并发处理能力带来质的提升。面对高并发的读写访问,当数据库master服务器无法承载写操作压力时,不管如何扩展slave服务器,此时都没有意义了。因此,我们必须换一种思路,对数据库进行拆分,从而提高数据库写入能力,这就是所谓的分库。

与分表策略相似,分库可以采用通过一个关键字取模的方式,来对数据访问进行路由,如下图所示

六、分区与分片区别

到此这篇关于MySql分表、分库、分片和分区知识点介绍的文章就介绍到这了,更多相关MySql分表、分库、分片和分区内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Mysql插入中文字符报错ERROR 1366(HY000)的解决方法

    关于Mysql插入中文字符报错ERROR 1366(HY000)的解决方法

    这篇文章主要介绍了关于Mysql插入中文字符报错ERROR 1366(HY000)的解决方法,在我们日常使用mysql的过程中会经常遇到各种报错,今天我们就来看一下ERROR 1366报错的解决方法吧
    2023-07-07
  • MySQL查看与修改字符集的方法实例教程

    MySQL查看与修改字符集的方法实例教程

    这篇文章主要给大家介绍了关于MySQL查看与修改字符集的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • MySQL8.0 如何快速加列

    MySQL8.0 如何快速加列

    这篇文章主要介绍了MySQL8.0 如何快速加列,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • Mac下mysql 8.0.22 找回密码的方法

    Mac下mysql 8.0.22 找回密码的方法

    这篇文章主要介绍了Mac下mysql 8.0.22 找回密码的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • JDBC连接MySQL出现的问题

    JDBC连接MySQL出现的问题

    采用JDBC连接MySQL数据库,JDBC驱动已经添加到eclipse的项目构建路径里了,按理来说应该一切正常。运行项目后提示“无法加载驱动”。
    2010-12-12
  • MySQL中字符串比较大小详解(日期字符串比较问题)

    MySQL中字符串比较大小详解(日期字符串比较问题)

    varchar类型的数据是不能直接比较大小的,下面这篇文章主要给大家介绍了关于MySQL中字符串比较大小的相关资料,详细介绍了日期字符串比较问题,需要的朋友可以参考下
    2022-08-08
  • Mysql BinLog存储机制与数据恢复方式

    Mysql BinLog存储机制与数据恢复方式

    这篇文章主要介绍了Mysql BinLog存储机制与数据恢复方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • MySQL 4G内存服务器配置优化

    MySQL 4G内存服务器配置优化

    MySQL对于web架构性能的影响最大,也是关键的核心部分。下面我们了解一下MySQL优化的一些基础,MySQL自身(my.cnf)的优化
    2017-07-07
  • MySQL慢查询分析工具pt-query-digest详解

    MySQL慢查询分析工具pt-query-digest详解

    pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析,这篇文章主要介绍了MySQL慢查询分析工具pt-query-digest详解,需要的朋友可以参考下
    2023-01-01
  • MySQL 动态分区管理自动化与优化实践记录

    MySQL 动态分区管理自动化与优化实践记录

    本文将详细介绍如何通过 MySQL 的存储过程和事件调度器实现动态分区管理,确保分区表能够自动适应数据增长,同时避免分区冲突,感兴趣的朋友一起看看吧
    2025-05-05

最新评论