面试数据库八股文十问十答第九期

面试数据库八股文十问十答第九期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)MySQL 读写分离

MySQL 读写分离是指将读操作和写操作分别分配到不同的数据库实例上,以提高数据库的读取性能和可用性。一般的做法是:

  • 配置主从复制:将主数据库(用于写操作)与多个从数据库(用于读操作)进行配置。
  • 读写分离代理:在应用程序和数据库之间部署读写分离代理,如 MySQL Proxy、ProxySQL 等,用于拦截数据库请求并将读操作转发到从数据库,写操作转发到主数据库。
  • 负载均衡:使用负载均衡器来分发读操作请求到不同的从数据库,以平衡数据库负载。
  • 监控和管理:实时监控数据库实例的健康状态,确保主从同步正常,及时处理异常情况。

2)MySQL 主从同步机制

MySQL 主从同步是指将主数据库的数据变更同步到从数据库,以保持数据一致性。主从同步机制包括以下步骤:

  • binlog 日志:主数据库记录所有的数据变更操作到二进制日志(binlog)中。
  • relay log 日志:从数据库通过主数据库的 binlog 日志进行数据同步,将数据变更操作记录到自己的中继日志(relay log)中。
  • IO 线程:从数据库的 IO 线程从主数据库读取 binlog 日志,并将数据写入自己的 relay log 日志中。
  • SQL 线程:从数据库的 SQL 线程从 relay log 日志中读取数据变更操作,并在本地执行,保持数据的一致性。

3)主从同步延迟处理

主从同步可能会出现延迟,主要原因包括网络延迟、从数据库负载过高等。处理主从同步延迟可以采取以下方法:

  • 监控延迟:实时监控主从同步延迟,及时发现延迟情况。
  • 优化网络:优化网络连接,减少网络延迟,可以考虑使用专线或者增加带宽。
  • 调整参数:调整 MySQL 参数,如增大 binlog 大小、调整复制线程参数等,以提高同步效率。
  • 增加从库:增加从数据库实例,将读操作分散到多个从数据库上,减少单个从数据库的负载压力。
  • 重放 binlog:如果从库同步延迟严重,可以考虑暂停从库的同步,重新生成主库上的 binlog,并在从库上重放 binlog,以快速恢复数据一致性。

这些方法可以帮助处理主从同步延迟问题,确保数据库的数据一致性和可用性。

4)分库分表的理解

  • 分库:将一个数据库中的数据按照一定规则划分到多个数据库中,每个数据库负责存储一部分数据。
  • 分表:将一个表中的数据按照一定规则划分到多个物理表中,每个物理表负责存储一部分数据。

分库分表的主要目的是提高数据库的性能和扩展性,通过水平拆分数据,减少单个数据库或表的负载,提高系统的并发处理能力和可用性。

5)分库分表的实施方式

分库分表的实施方式可以根据具体业务需求和数据特点来确定,一般包括以下几个步骤:

  • 数据分片规则设计:根据业务需求设计合适的数据分片规则,如按照用户 ID、地理位置、时间等进行分片。
  • 分库策略:根据分片规则将数据分散到多个数据库中,一般采用水平分库的方式。
  • 分表策略:根据分片规则将数据分散到多个物理表中,一般采用水平分表或者垂直分表的方式。
  • 数据迁移和同步:将现有数据按照分片规则进行迁移,确保数据分布到各个库表中,并设置数据同步机制,保持数据的一致性。

6)分表带来的问题

尽管分表可以提高数据库的性能和扩展性,但也会带来一些问题,包括但不限于:

  • 查询复杂性增加:分表后,对跨表查询和聚合查询的支持会变得更加复杂,需要设计合适的查询方式来处理分布在不同表中的数据。
  • 事务管理困难:跨表事务管理会变得更加复杂,需要设计合适的事务管理策略来保证事务的一致性。
  • 数据迁移和维护成本增加:分表后,数据迁移和维护的成本会增加,需要设计合适的数据迁移和维护策略来保证系统的稳定性和可用性。
  • 分片平衡:分表后,可能会出现分片不均衡的情况,需要设计合适的分片策略来保证各个分片的负载均衡。

解决这些问题需要综合考虑业务需求和数据库特点,设计合适的分库分表方案,并配合合适的技术方案来实施和管理。

7)从 MySQL 获取数据,是从硬盘读取的吗?

MySQL 在获取数据时,其读取数据的来源取决于数据是否在内存中的缓存(例如缓存池)。一般情况下,数据首次读取会来自硬盘。一旦被访问,数据将被加载到内存中的缓存区,如 InnoDB 的缓冲池。之后的访问可能直接从内存中读取,大大加快了数据访问速度。但如果内存中没有找到所需数据,MySQL 将从硬盘中读取。

8)MySQL change buffer

MySQL 的 change buffer 是 InnoDB 存储引擎的一个特性,用于优化非唯一索引下的数据插入、删除和修改操作。当对一个非唯一索引的表执行写操作时,如果相关的数据页不在缓冲池中,InnoDB 会使用 change buffer 来记录这些更改,而不是立即从硬盘读取数据页进行更新。这减少了磁盘 I/O 的需求,并提高了性能。在后续的数据页被加载到缓冲池时,这些更改会被合并(merge)到数据页中。

9)MySQL Doublewrite Buffer

MySQL 的 Doublewrite Buffer 是 InnoDB 存储引擎用来防止部分写损坏(partial page writes)的一种机制。在将数据页写入磁盘之前,InnoDB 首先将它们写入到一个称为 doublewrite buffer 的特殊区域。这个缓冲区位于共享表空间内,InnoDB 会将每个数据页写两次(一次到 doublewrite buffer,一次到最终位置)。如果在写入过程中发生崩溃,InnoDB 可以从 doublewrite buffer 恢复完整的数据页,确保数据的一致性和完整性。

10)MySQL Log Buffer

MySQL 的 Log Buffer 是 InnoDB 存储引擎用于缓存即将写入 redo log 的数据修改信息的内存区域。当事务提交时,事务中的修改首先记录在 Log Buffer 中。这些日志信息随后异步写入到磁盘上的 redo log 文件中。Log Buffer 的使用减少了磁盘 I/O,因为它允许系统合并多个事务日志的写入操作。如果数据库突然崩溃,redo log 保证了事务的持久性,可以在重启后使用 redo log 来重放这些修改,恢复到崩溃前的状态。

这些内部机制共同提高了 MySQL 的性能,同时确保了数据的完整性和持久性。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1300+ Star,2W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型如何“开窍”?算法、数据与架构的三重奏

一、算法创新 1. 探索新的学习范式 自监督学习:利用未标注数据让模型自我学习,提高模型的泛化能力。元学习:让模型学会如何学习,以便在不同任务之间快速迁移。强化学习:通过试错与奖励机制,使模型在与环境…

012、哈希_应用场景

图为关系型数据表记录的两条用户信息,用户的属性作为表的列,每条用户信息作为行。 如果将其用哈希类型存储,如图所示。 相比于使用字符串序列化缓存用户信息,哈希类型变得更加直观,并且在更新操作上会更加便捷。可以将每个用户的id定义为键后缀,多对field-value对应每…

Flutter 中的 RotatedBox 小部件:全面指南

Flutter 中的 RotatedBox 小部件:全面指南 在 Flutter 的丰富组件库中,RotatedBox 是一个简单而强大的小部件,它能够对子组件进行旋转。这使得 RotatedBox 成为实现某些布局效果和动画的理想选择。本文将详细介绍 RotatedBox 的使用方法&…

Springboot 开发 -- 集成 JWT 构建安全的API接口服务

一、JWT简介 JSON Web Token(JWT)是一种基于JSON的开放标准(RFC 7519),用于在各方之间以JSON对象的形式安全地传输信息。JWT可以被签名,确保信息在传输过程中的完整性和可信度。JWT通常用于身份验证和信息…

vue2和3区别

Vue2和Vue3在**源码架构、性能提升以及API设计**等方面存在区别。具体分析如下: 1. **源码架构** - **Vue2**:Vue2的源码相对更传统,主要使用Options API来构建组件。这种方式要求开发者在一个对象中定义组件的各种属性(如data、m…

微软 Edge 深度探索:现代浏览器的蜕变

微软 Edge 浏览器经历了令人瞩目的转变,从备受诟病的 Internet Explorer 继任者,发展成为功能强大、特性丰富的浏览器,与 Google Chrome 和 Mozilla Firefox 等行业巨头正面竞争。本文将深入探讨 Edge,从用户体验、功能、内容、平…

Android 14.0 SystemUI状态栏屏蔽掉通知栏不显示通知

1.概述 在14.0的系统产品开发中,在SystemUI定制化开发中,有产品需求要求屏蔽通知显示,由于对状态栏的通知管控的比较严,所以要求屏蔽掉通知栏的通知不显示通知 接下来就需要对通知栏的显示流程分析,屏蔽掉通知就可以了 2.SystemUI状态栏屏蔽掉通知栏不显示通知的核心类 f…

12-常用类

1. 包装类 针对八种基本数据类型封装的相应的引用类型。 有了类的特点,就可以调用类中的方法。(为什么要封装) 基本数据类型包装类booleanBooleanchar CharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble 1.1 …

C# Sdcb.PaddleInference 中文分词、词性标注

C# Sdcb.PaddleInference 中文分词、词性标注 目录 效果 项目 代码 下载 参考 效果 项目 代码 using Sdcb.PaddleNLP.Lac; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Windows.Forms; namespace C__Sdcb.Pad…

kafka-消费者组-点对点测试

文章目录 1、点对点测试1.1、获取 kafka-consumer-groups.sh 的帮助信息1.2、列出所有的 消费者组1.3、创建消费者1并指定组 my_group11.4、创建消费者2并指定组 my_group11.5、创建消费者3并指定组 my_group11.6、创建生产者发送消息到 my_topic1 主题1.6.1、发送第一条消息ro…

华为WLAN无线组网技术与解决方案

WLAN无线组网技术与解决方案 网络拓扑采用AP和AC旁挂式无线组网 配置思路: 1.让AP上线 1.1,使得AP能够获得IP地址 配置步骤: 1.把AC当作一个一个有管理功能的三层交换机 sys Enter system view, return user view with CtrlZ. [AC6605]vlan …

多态的好处

使用多态(Polymorphism)在C中有多个重要的原因,这些原因使得多态成为面向对象编程中不可或缺的一部分。以下是使用多态的一些关键原因: 代码复用和灵活性: 多态允许我们编写可以处理多种类型对象的通用代码。通过使用…

为什么MySQL需要binlog、undo log、redo log 3种日志?

binlog是 server层生成的日记,而 undo log、redo log 是Innodb 存储引擎层生成的日志 binlog,是 binary log的英文缩写,翻译为二进制日志或者归档日志(带有业务含义),它是从 MySQL 3.23.14版本引入的。bin…

高并发处理

高并发处理是对系统在同时处理大量请求能力的一种考验。在设计高并发系统时,通常会涉及到多个层面的优化,包括应用程序、数据库、服务器和网络架构等方面的优化。以下是一些建议如何设计和优化高并发系统: 应用程序层面 : 异步处…

【Qt】Qt框架文件处理精要:API解析与应用实例:QFile

文章目录 前言:1. Qt 文件概述2. 输入输出设备类3. 文件读写类3.1. 打开open3.2. 读read / readline/ readAll3.3. 写write3.4. 关闭close 4. 读写文件示例5. 文件件和目录信息类总结: 前言: 在现代软件开发中,文件操作是应用程序…

【贪吃蛇game】

好的,我将为您编写一个简单的贪吃蛇游戏的代码。这个游戏将使用Python语言和pygame库来实现。首先,请确保您的环境中已经安装了pygame库。如果尚未安装,可以使用pip install pygame命令进行安装。 接下来,我将编写代码。代码完成后…

如何恢复已删除/丢失或未保存的 PDF 文件?

许多用户曾因某些问题删除或丢失 PDF 文件。此外,一些用户在关闭应用程序时未保存 PDF 文件,从而丢失 PDF 文件。您可以尝试一些解决方案来恢复已删除的 PDF 文件、恢复未保存的 PDF 文件,以及在任何其他数据丢失情况下挽救丢失的 PDF 文件。…

优化效率,简化流程:探索工资结算系统的重要性与实施方法

在现代企业中,工资结算是一项重要而复杂的任务。为了更好地管理和处理员工的工资事务,许多企业采用工资结算系统。本文将探讨工资结算系统的重要性,并介绍一些实施该系统的方法。 ### 1. 概述 工资结算系统是一种自动化的软件系统&#xff0…

apexcharts数据可视化之极坐标区域图

apexcharts数据可视化之极坐标区域图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式: 基础极坐标区域图单色极坐标区域图 基础极坐标区域图 import ApexChart from react-apexcharts;export function BasicPolar() {// 数据序列const series…

【论文阅读|cryoET】DeepETPicker:使用弱监督深度学习的快速准确cryoET三维颗粒挑选算法

题目 DeepETPicker: Fast and accurate 3D particle picking for cryo-electron tomography using weakly supervised deep learning 发表期刊: Nature Communications 发表时间:2024.02 Accepted 作者:Guole Liu, Tongxin Niu 中科院自动化…