MySQL篇之分库分表

这篇具有很好参考价值的文章主要介绍了MySQL篇之分库分表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、为什么要分库分表

1.目的

        1. 分担了访问压力    2. 解决存储压力

2.分库分表的时机

        1. 前提,项目业务数据逐渐增多,或业务发展迅速,单表的数据量达1000W或20G以后。

        2. 优化已解决不了性能问题(主从读写分离、查询索引…)。

        3. IO瓶颈(磁盘IO、网络IO)、CPU瓶颈(聚合查询、连接数太多)。

二、拆分策略

1.垂直拆分

(1)垂直分库

        垂直分库:以表为依据,根据业务将不同表拆分到不同库中。

        特点: 1. 按业务对数据分级管理、维护、监控、扩展。

                    2. 在高并发下,提高磁盘IO和数据量连接数。

MySQL篇之分库分表,mysql,数据库,面试,java

(2)垂直分表

        垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。

        特点: 1. 冷热数据分离。

                    2. 减少IO过渡争抢,两表互不影响。

        拆分规则: 把不常用的字段单独放在一张表。

                           把text,blob等大字段拆分出来放在附表中。

MySQL篇之分库分表,mysql,数据库,面试,java

2.水平拆分

(1)水平分库

        水平分库:将一个库的数据拆分到多个库中。

        特点: 1. 解决了单库大数量,高并发的性能瓶颈问题。

                    2. 提高了系统的稳定性和可用性。

MySQL篇之分库分表,mysql,数据库,面试,java

(2)水平分表

        水平分表:将一个表的数据拆分到多个表中(可以在同一个库内)。

         特点: 1. 优化单一表数据量过大而产生的性能问题。

                     2. 避免IO争抢并减少锁表的几率。

MySQL篇之分库分表,mysql,数据库,面试,java

三、产生的问题以及如何解决

        分库之后的问题:

                1. 分布式事务一致性问题。

                2. 跨节点关联查询。

                3. 跨节点分页、排序函数。

                4. 主键避重。

        解决方案:

                分库分表中间件:

                1. sharding-sphere。

                2. mycat。

四、面试的回答

面试官:你们项目用过MySQL的分库分表吗?

候选人:因为我们都是微服务开发,每个微服务对应了一个数据库,是根据业务进行拆分的,这个其实就是垂直拆分。

面试官:那你之前使用过水平分库吗?

候选人:这个是使用过的,我们当时的业务是(xxx),一开始,我们也是单库,后来这个业务逐渐发展,业务量上来的很迅速,其中(xx)表已经存放了超过1000万的数据,我们做了很多优化也不好使,性能依然很慢,所以当时就使用了水平分库。

我们一开始先做了3台服务器对应了3个数据库,由于库多了,需要分片,我们当时采用的mycat来作为数据库的中间件。数据都是按照id(自增)取模的方式来存取的。

当然开始的时候,那些旧数据,我们做了一些清洗的工作,我们也是按照id取模规则分别存储到了各个数据库中,好处就是可以让各个数据库分摊存储和读取的压力,解决了我们当时性能的问题。文章来源地址https://www.toymoban.com/news/detail-831635.html

到了这里,关于MySQL篇之分库分表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库的分库分表

     

    2024年02月14日
    浏览(45)
  • 数据库分库分表思路

    一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据

    2024年02月09日
    浏览(49)
  • 数据库-分库分表初探

    数据量在百万以里,可以通过Tina集从库、优化索引等提升性能 数据量超过千万,为了减少数据库的负担,提升数据库响应速度,缩短查询时间,需要进行分库分表 推荐:采用垂直分库水平分表 总结:分库要解决的是硬件资源的问题,不管是拆分字段,还是拆分数据,都是要

    2024年01月25日
    浏览(44)
  • 浅谈数据库分库分表

    本文主要介绍数据库分库分表相关的基础知识,包括分库分表是什么,为什么要分库分表,以及有哪些解决方案。 数据库分库分表,用英文表示是 \\\"database sharding\\\" or \\\"database partitioning\\\" 。 分库分表是指将一个大型数据库按照一定的规则拆分成多个小型数据库,每个小型数据库

    2024年02月15日
    浏览(46)
  • shell脚本:数据库的分库分表

     

    2024年02月15日
    浏览(43)
  • 架构篇15:高性能数据库集群-分库分表

    上篇我们讲了“读写分离”,读写分离分散了数据库读写操作的压力,但没有分散存储压力,当数据量达到千万甚至上亿条的时候,单台数据库服务器的存储能力会成为系统的瓶颈,主要体现在这几个方面: 数据量太大,读写的性能会下降,即使有索引,索引也会变得很大,

    2024年01月24日
    浏览(47)
  • 数据库系列文章 之 MySQL分表的三种方法

    先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。 根据个人经验,mysql执行一个sql的过程如下: 1,接收到sql;2,把sql放到排队队列中

    2024年02月16日
    浏览(45)
  • 千万级并发架构下,如何进行关系型数据库的分库分表

    最近项目上线后由于用户量的剧增,导致数据库的数据量剧增,随之而来的就是海量数据存储的问题,针对最近解决数据的优化过程,谈谈sql语句的优化以及数据库分库分表的方案。 建议大家先阅读一下数据库的优化方案 《数据库大数据量的优化方案》,里面从 1.优化现有数

    2024年02月16日
    浏览(54)
  • 分库分表已成为过去式,使用分布式数据库才是未来

    转载至我的博客 https://www.infrastack.cn ,公众号:架构成长指南 当我们使用 Mysql数据库到达一定量级以后,性能就会逐步下降,而解决此类问题,常用的手段就是引入数据库中间件进行分库分表处理,比如使用 Mycat 、 ShadingShpere 、 tddl ,但是这种都是过去式了,现在使用分布

    2024年02月19日
    浏览(49)
  • MySQL 数据存储和优化------MySQL索引原理和优化 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新

    Mysql架构体系全系列文章主目录(进不去说明还没写完) https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第二章:MySQL索引原理和优化,只解释索引相关概念。 索引可以提高查询效率,影响where查询和order by排序,它可以从多方面进行分类,但是实际创建时

    2024年02月02日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包