iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >怎么在MySQL中分表分库时对数据进行切分
  • 313
分享到

怎么在MySQL中分表分库时对数据进行切分

2023-06-14 07:06:42 313人浏览 安东尼
摘要

今天就跟大家聊聊有关怎么在MySQL中分表分库时对数据进行切分,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。数据库分布式核心内容无非就是数据切分(Sharding)以及切分后对数据的

今天就跟大家聊聊有关怎么在MySQL中分表分库时对数据进行切分,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

数据库分布式核心内容无非就是数据切分(Sharding)以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个数据库中,使得单一数据库中的数据量变小,通过扩充主机的数量缓解单一数据库的性能问题,从而达到提升数据库操作性能的目的。

数据切分根据其切分类型,可以分为两种方式:垂直(纵向)切分和水平

1.垂直(纵向)切分

垂直切分常见有垂直分库和垂直分表两种。

1.1 垂直分库 

就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务

分类进行独立划分。与"微服务治理"的做法相似,每个微服务使用单独的一个数据库。如图:

怎么在MySQL中分表分库时对数据进行切分

将不同模块的数据表分库存储。模块间不相互关联查询

如果有,就需要通过数据冗余或者应层二次加工来解决。这种业务方法和数据结构最清晰。但若不能杜绝跨库关联查询,宣告此路不同

1.2 垂直分表 

是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。在字段很多的情况下(例如一个大表有100多个字段),通过"大表拆小表",更便于开发与维护,也能避免跨页问题,Mysql底层是通过数据页存储的,一条记录占用空间过大会导致跨页,造成额外的性能开销。另外数据库以行为单位将数据加载到内存中,这样表中字段长度较短且访问频率较高,内存能加载更多的数据,命中率更高,减少了磁盘io,从而提升了数据库性能。

怎么在MySQL中分表分库时对数据进行切分

垂直切分的优点:

  • 解决业务系统层面的耦合,业务清晰

  • 与微服务的治理类似,也能对不同业务的数据进行分级管理、维护、监控、扩展等

  • 高并发场景下,垂直切分一定程度的提升IO、数据库连接数、单机硬件资源的瓶颈

缺点:

  • 部分表无法join,只能通过接口聚合方式解决,提升了开发的复杂度

  • 分布式事务处理复杂

  • 依然存在单表数据量过大的问题(需要水平切分)

2. 水平(横向)切分

当一个应用难以再细粒度的垂直切分,或切分后数据量行数巨大,存在单库读写、存储性能瓶颈,这时候就需要进行水平切分了。

水平切分分为库内分表和分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中,每个表中只包含一部分数据,从而使得单个表的数据量变小,达到分布式的效果。如图所示: 

怎么在MySQL中分表分库时对数据进行切分

相对纵向切分这一将表分类的做法,此法是按表内每个字段的某个规则来将数据分散存储于不同的数据库(或不同的表),也就是按照数行来进行切分数据。

库内分表只解决了单一表数据量过大的问题,但没有将表分布到不同机器的库上,因此对于减轻mysql数据库的压力来说,帮助不是很大,大家还是竞争同一个物理机的CPU、内存、网络IO,最好通过分库分表来解决。

水平切分的优点:

  • 不存在单库数据量过大、高并发的性能瓶颈,提升系统稳定性和负载能力

  • 应用端改造较小,不需要拆分业务模块

缺点:

  • 跨分片的事务一致性难以保证

  • 跨库的join关联查询性能较差

  • 数据多次扩展难度和维护量极大

水平切分后同一张表会出现在多个数据库/表中,每个库/表的内容不同。几种典型的数据分片规则为:

2.1 根据数值范围

按照时间区间或ID区间来切分。例如:按日期将不同月甚至是日的数据分散到不同的库中;将userId为1~9999的记录分到第一个库,10000~20000的分到第二个库,以此类推。某种意义上,某些系统中使用的"冷热数据分离",将一些使用较少的历史数据迁移到其他库中,业务功能上只提供热点数据的查询,也是类似的实践。

这样的优点在于:

  • 单表大小可控

  • 天然便于水平扩展,后期如果想对整个分片集群扩容时,只需要添加节点即可,无需对其他分片的数据进行迁移

  • 使用分片字段进行范围查找时,连续分片可快速定位分片进行快速查询,有效避免跨分片查询的问题。

缺点:

  • 热点数据成为性能瓶颈。连续分片可能存在数据热点,例如按时间字段分片,有些分片存储最近时间段内的数据,可能会被频繁的读写,而有些分片存储的历史数据,则很少被查询

怎么在MySQL中分表分库时对数据进行切分

2.2 根据数值取模

一般采用hash取模mod的切分方式,例如:将 Customer 表根据 cusno 字段切分到4个库中,余数为0的放到第一个库,余数为1的放到第二个库,以此类推。这样同一个用户的数据会分散到同一个库中,如果查询条件带有cusno字段,则可明确定位到相应库去查询。

优点:

  • 数据分片相对比较均匀,不容易出现热点和并发访问的瓶颈

缺点:

  • 后期分片集群扩容时,需要迁移旧的数据(使用一致性hash算法能较好的避免这个问题)

  • 容易面临跨分片查询的复杂问题。比如上例中,如果频繁用到的查询条件中不带cusno时,将会导致无法定位数据库,从而需要同时向4个库发起查询,再在内存中合并数据,取最小集返回给应用,分库反而成为拖累。

怎么在MySQL中分表分库时对数据进行切分

看完上述内容,你们对怎么在Mysql中分表分库时对数据进行切分有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网数据库频道,感谢大家的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么在MySQL中分表分库时对数据进行切分

本文链接: https://www.lsjlt.com/news/268893.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在MySQL中分表分库时对数据进行切分
    今天就跟大家聊聊有关怎么在MySQL中分表分库时对数据进行切分,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。数据库分布式核心内容无非就是数据切分(Sharding)以及切分后对数据的...
    99+
    2023-06-14
  • MySQL 分表分库怎么进行数据切分
    关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分...
    99+
    2022-05-23
    MySQL 分表分库 MySQL 数据切分
  • MySQL分表分库如何进行数据切分
    这篇文章主要讲解了“MySQL分表分库如何进行数据切分”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL分表分库如何进行数据切分”吧!数据库分布式核心...
    99+
    2022-10-19
  • 怎么在MySQL数据库中实现分表分库操作
    这篇文章将为大家详细讲解有关怎么在MySQL数据库中实现分表分库操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。分表分库垂直拆分垂直拆分就是要把表按模块划...
    99+
    2022-10-18
  • zabbix上怎么对mysql数据库做分区表
    本篇内容介绍了“zabbix上怎么对mysql数据库做分区表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-18
  • MySQL数据库中怎么实现水平切分
    MySQL数据库中怎么实现水平切分,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 随着互联网应用的广泛普及,海量数据的存储和...
    99+
    2022-10-18
  • MySQL中怎么实现数据切分
    MySQL中怎么实现数据切分,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  什么是MySQL数据切分  "Shard"...
    99+
    2022-10-18
  • MySQL对数据表已有表进行分区表的实现
    目录操作方式操作过程对现有的一个表进行创建分区表,并把数据迁移到新表,可以按时间来分区,然后这表不是实时更新,每天有一次插入操作。 时间比较充裕,但是服务器上有其他应用,使用较小资源...
    99+
    2022-11-12
  • 在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询
    在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第一步,搭建这个小案例,引入spring和mybti...
    99+
    2023-05-31
    springmvc mybatis mysql
  • 怎样进行mysql数据库的分析
    怎样进行mysql数据库的分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、数据库是什么?数据库是管理数据的一类软件。对数据的管理体现在两个方面,第一是描述数据,即一条...
    99+
    2023-06-22
  • Mysql数据库中的分库分表怎么利用MyBatis来实现
    本篇文章给大家分享的是有关Mysql数据库中的分库分表怎么利用MyBatis来实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。MyBatis实现分表最简单步骤我们模拟用户表数...
    99+
    2023-05-31
    mybatis mysql
  • 怎么在python中对列表进行分片操作
    今天就跟大家聊聊有关怎么在python中对列表进行分片操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyt...
    99+
    2023-06-14
  • 在spring中使用mybatis实现对mysql数据库进行读写分离
    这期内容当中小编将会给大家带来有关在spring中使用mybatis实现对mysql数据库进行读写分离,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言    &n...
    99+
    2023-05-31
    spring mybatis mysql
  • Python怎么用CNN实现对时序数据进行分类
    这篇“Python怎么用CNN实现对时序数据进行分类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么用CNN实...
    99+
    2023-07-05
  • 怎么对MySQL数据库中表的数据进行更新
    小编给大家分享一下怎么对MySQL数据库中表的数据进行更新,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Update语句的基本语...
    99+
    2022-10-18
  • 数据库中在什么情况下需要用分库分表
    这篇文章主要介绍数据库中在什么情况下需要用分库分表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据量在什么情况下需要分表?为了保证数据库的查询效率,当数据达成一定量时建议进行分表操作1、oracle当oracle单...
    99+
    2023-06-14
  • MySQL对数据表已有表进行分区表的实现方法是什么
    本篇内容介绍了“MySQL对数据表已有表进行分区表的实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!操作方式@1 可以使用ALT...
    99+
    2023-06-25
  • 如何进行分库分表中多数据源的事务处理
    这期内容当中小编将会给大家带来有关如何进行分库分表中多数据源的事务处理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。系统经sharding改造之后,原来单一的数据库会演变...
    99+
    2022-10-19
  • 大数据报表怎么实现对数据列进行排名分析
    这篇文章跟大家分析一下“大数据报表怎么实现对数据列进行排名分析”。内容详细易懂,对“大数据报表怎么实现对数据列进行排名分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“大数据报表...
    99+
    2023-06-03
  • 怎么用数据库中间件Mycat+SpringBoot完成分库分表
    这篇文章主要讲解了“怎么用数据库中间件Mycat+SpringBoot完成分库分表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用数据库中间件Mycat+SpringBoot完成分库分表...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作