架构师必会之-DBA级问题的数据库底层设计思想

这篇具有很好参考价值的文章主要介绍了架构师必会之-DBA级问题的数据库底层设计思想。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是sulny_ann,这期想跟大家分享一下我之前在面试里面问过比较难的数据库相关的问题。

大家经常也在调侃后端好像就是技术数据库的增删改查,所以作为后端开发,你对应数据库这一块掌握的怎么样,是非常能看出你整个开发的技术能力水平。

接下来就分享 3 个我之前问到的关于数据库的 3 个问题。

第一个问题就是如果一个事务当中有更新操作,也有查询操作,那我是先更新好呢?还是先查询好?

很多小伙伴一听到这个问题不知道我想考啥,我印象比较深刻就是这个候选人他还是比较聪明的,他还先问我一下,你这个更新操作依不依赖这个查询的操作。我也提示了这两个是没有什么依赖关系的,所以这里我的重点是开启了一个事物,那对于事物它肯定是要消耗资源的,那消耗的资源有哪些东西?

 文章来源地址https://www.toymoban.com/news/detail-687937.html

架构师必会之-DBA级问题的数据库底层设计思想

 

 

有连接池,还有底层的锁,那大家想一下,更新它可能是会持有什么锁呢?有可能是行锁,也有可能是间隙锁,甚至可能是表锁。那既然这个事物加锁,那其他的事物只能在这些资源上去做一个等待,这就可能降低整个数据库的并发性能。

 

 

架构师必会之-DBA级问题的数据库底层设计思想

 

 

所以这个问题应该怎么去回答呢?其实在大部分的情况就应该先去查询,再去更新,但这里的查询默认是不会去加锁的。如果先更新,再去查询,如果这个查询是一个慢SQL,那这个更新操作它持有的资源是会一直阻塞在这里。

 

 

架构师必会之-DBA级问题的数据库底层设计思想

 

 

那先查询再更新,那你 select 就算是一个慢SQL,在这个查询执行过程当中其实是没有加锁的,这能够一定程度提升整个数据库的并发能力。我之前在线上确实也做过类似的优化,只要把他们执行的顺序稍微改一下,在一些并发比较高的接口确实能够提升很大的性能。

 

 

架构师必会之-DBA级问题的数据库底层设计思想

 

                                        

第二个问题就是我们经常在设计数据库表的时候,经常会做一些字段的冗余,你觉得这样做有什么优缺点?

这其实也是非常常见的一种反范式设计。做字段冗余大部分情况下是为了便于去查询,例如商品跟店铺之间的关系,我可能有一个关系表,但是我在业务上有很多查询,就是要基于店铺去查询他所有的商品,那难道每一次查询都要去做一个join吗?或者查两次吗?如果说我在商品这个表里面去加一个店铺的字段,做这么一个字段的冗余就能够很大程度提升整个查询的性能。

那做字段冗余有什么缺点吗?也有就是如果你要去更新这个关系,你可能要改多个地方,这个就有点类似于缓存的一致性问题,而且这种问题如果在同一个数据库可能还比较好控制,如果是在多个数据库,那你这个风险就非常大了。

所以这里你还要看你的业务场景,就是查询的占比比较高,还是写的占比比较高。如果说是写的占比比较高,那你这个带来事物还有不一致的风险可能会更大。

 

第三个问题确实也比较有挑战,就是我们的 MySQL 里面的 binlog redolog,哪一个是先产生的?

这个问题大家又觉得我是想问什么东西呢?要回答好这个问题,你首先要知道 binlog 跟 read log 它们分别是用来干嘛的,解决什么问题的。

简单介绍一下, MySQL 底层其实是分了好几个结构的,其中有 Server 层,还有 engine 层。 

 

 

架构师必会之-DBA级问题的数据库底层设计思想

 

 

binlog它就是产生在 Server 层,是用来记录数据库DML 产生的二进制日志,主要是用来做主从主备他们之间的一些数据备份。

 

 

架构师必会之-DBA级问题的数据库底层设计思想

 

 

那 redolog 它是产生在 MySQL 的 engine 层的,主要是用来保证数据操作的原子性。那这两种日志他们其实都有自己的一个缓冲区。

 

 

架构师必会之-DBA级问题的数据库底层设计思想

 

 

但是他们持久化一般都是分两个步骤:先写在操作系统的内核区,再去做一个刷盘操作。

 

架构师必会之-DBA级问题的数据库底层设计思想

 

 

如果对可行性要求比较高,那我们每次产生事物的时候都是去做一个持久化,但是我们一般情况只会考虑把它刷在操作系统的内核层,因为这种情况是性能跟它的数据可靠性做一个折中,只要操作系统层面没有宕机,那这个数据一般是不会丢失的。

说到这里我们好像并没回答这个问题,就是这两个操作哪个先产生?那这里产生是站在什么角度?是站在磁盘的角度,还是说站在 MySQL 进程的角度?如果说是进程,他们两个基本上是同时产生的,但是坐在磁盘的角度,其实redolog 它可能先产生,为什么说是可能呢?因为 binlog 他一定说是事物提交之后才会去做一个持久化。

 

架构师必会之-DBA级问题的数据库底层设计思想

 

 

但是 Redo log 它其实有多种刷盘的机制,例如 MySQL 层面,它提供了一个同步的参数,你只要每次事务都操作,都去做一个提交,这个性能可能是比较差的。

但是它还有另外两种刷盘的机制,它默认有一个 1 秒钟去刷新整个内核缓冲区的一个进程,那这个时候你就算事务没有提交,它也会把缓冲区的这个redolog进行刷盘操作。

 

 

架构师必会之-DBA级问题的数据库底层设计思想

 

那在这个过程当中,可能事务还没有提交,那 redolog 已经放在磁盘上了。

当然有些小伙伴可能会觉得如果这个过程当中断电了怎么办?那会不会有 redolog,然后binlog不一致?​这就是 MySQL 它为什么要去实现一个二阶段提交这么一个过程,这里时间有限,就不去做过多展开了。

 

架构师必会之-DBA级问题的数据库底层设计思想

 

 

当然不同的 MySQL 它底层的版本参数也会有一些不一样,比如说它有些可能还是基于你事物提交多少个它就进行一个刷盘,或者中间你可以去设计一个缓冲区,容量达到多少它也会进行一个强制刷盘。

这个在不同的 MySQL 版本之间,它们的默认值,还有这些缓冲区的参数可能都不太一样。然后这里很多同学可能就会想,我学这些有什么用,平时在工作当中又用不上。

怎么说呢,还是有一定用途的,你会发现这些很多参数基本上都是在可用性跟性能之间去做一个选择,所以如果你在特定的业务场景下,你确实是可以在数据库层面去做这么一些调优。这也是为什么很多高级的DBA,他必须要去了解一定的业务场景。可能站在开发的角度就觉得 DBA 你只要管好运维就行了,你不用去关心我的业务。那同样呢,开发其实也可以去基于你的业务场景去反向给 DBA 提供一些建议,可以去调整哪些参数?可能在大部分小伙伴的工作环境下,其实并没有必要去调整这些东西,你的业务也可以正常的运行,所以大家就没有学习这些东西的积极性了。

​但是我认为作为后端开发,你还是要去了解底层的一些结构的,这些配置的参数名你没必要去记,但是你至少知道大概有这么一个东西,然后用的时候你可以快速的去查,然后学到这些东西,你还可以把这种比较好的思想应用在你的项目实际的工作当中,他很多思想跟设计哲学其实是可以借鉴过来的,这也是我们对于技术专家和架构师他需要的一个通用能力。

好,这一期就分享我之前在面试当中问到这几个数据库比较复杂的问题,如果大家认为写的还不错,也希望大家点赞转发,没关注的小伙伴也别忘了关注下,后面就不会错过很多技术的干货了。

 

到了这里,关于架构师必会之-DBA级问题的数据库底层设计思想的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 架构师必知必会系列:容器安全与容器漏洞管理

    作者:禅与计算机程序设计艺术 容器漏洞是一个敏感的话题。由于容器技术的普及和社区成熟,越来越多的企业、组织将容器技术作为一种“云”服务进行应用部署、运维和管理,而容器成为一个“平台”,其潜在危险性也越来越高。因此,保护容器环境免受攻击并修补漏洞

    2024年02月04日
    浏览(47)
  • AI架构师必知必会系列:云计算与AI

    作者:禅与计算机程序设计艺术 近年来,随着互联网的飞速发展,机器学习和深度学习等AI技术的应用日益广泛,越来越多的人开始对AI技术产生浓厚兴趣,并开始探索如何运用AI技术解决实际问题,而作为一名AI架构师则成为许多企业、组织和个人的必备技能。但是,作为一

    2024年02月05日
    浏览(73)
  • 后端架构师必知必会系列:网络协议与通信机制

    作者:禅与计算机程序设计艺术 随着互联网的普及和互联网服务平台的崛起,越来越多的人开始了解到网络协议和通信机制。而作为后端开发工程师,掌握网络协议、通信机制对于系统的性能优化和网络安全来说至关重要。这几年,网络协议和通信机制在各个领域都得到了广

    2024年02月07日
    浏览(48)
  • AI架构师必知必会系列:AI与区块链

    作者:禅与计算机程序设计艺术 人工智能(Artificial Intelligence)或简称AI,是近几年随着计算能力的提高而被广泛关注的一门新兴科技。其应用范围涵盖从计算理论到机器学习、深度学习、图像识别、语音识别、语言处理等各个领域。但由于AI技术在发展的过程中还存在一些问

    2024年02月03日
    浏览(40)
  • AI架构师必知必会系列:FPGA加速与AI

    作者:禅与计算机程序设计艺术 什么是FPGA?它是什么时候出现的?它又是如何工作的?这是需要了解的。FPGA加速对AI的影响又是什么样的呢?如何利用好FPGA?总而言之,要掌握FPGA加速的相关知识、技巧与能力,才能更好的进行AI应用。因此,本文将从如下几个方面进行详细

    2024年02月07日
    浏览(46)
  • AI架构师必知必会系列:迁移学习与领域自适应

    作者:禅与计算机程序设计艺术 迁移学习(Transfer Learning)是当今深度学习中一个重要应用领域。主要解决的问题是如何利用别人的经验教训来快速学习新的任务。而领域自适应(Domain Adaptation)则是根据不同领域的特点,设计不同的模型结构来解决同类任务上的差异性。基

    2024年02月06日
    浏览(56)
  • 架构师必知必会系列:区块链与分布式账本

    作者:禅与计算机程序设计艺术 区块链,又称分布式数据库,是一个P2P网络,采用点对点的方式,将所有数据记录在不断增加的区块中,每个区块都具有校验功能,利用密码学的方法保证数据不被篡改。其主要优点如下: 可追溯性:任何一方都可以验证任意时刻上链的数据

    2024年02月08日
    浏览(55)
  • 后端架构师必知必会系列:性能优化与负载均衡策略

    作者:禅与计算机程序设计艺术 在互联网高速发展的今天,网站的流量越来越多,为了保证网站的正常运行,优化服务器的性能显得尤为重要。同时为了提升网站的访问速度、节省网络带宽成本、提供更好的用户体验,很多网站都会采用分布式架构或云计算平台来提高网站的

    2024年02月06日
    浏览(55)
  • AI架构师必知必会系列:AI在智慧城市的应用

    作者:禅与计算机程序设计艺术 随着科技的进步、经济的发展以及社会的变革,智慧城市也逐渐成为人们生活中不可缺少的一部分。据统计,截至2021年底,全球智慧城市占有土地面积超过5万平方公里,规模达到10亿美元,是世界第四大智慧城市。如今,智慧城市已经成为人

    2024年02月07日
    浏览(51)
  • 后端架构师必知必会系列:搜索引擎与全文检索

    作者:禅与计算机程序设计艺术 什么是搜索引擎?它是指在互联网上搜集、整理并快速索引海量信息的数据结构与数据库,对用户的查询请求进行快速、准确的响应的技术。搜索引擎又分为互联网搜索引擎(英语: internet search engine)和本地搜索引擎(英语: local search engine)。 全文

    2024年02月05日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包