当前位置: 首页 > news >正文

Mysql架构初识

🥲 🥸 🤌 🫀 🫁 🥷 🐻‍❄️🦤 🪶 🦭 🪲 🪳 🪰 🪱 🪴 🫐 🫒 🫑 🫓 🫔 🫕 🦤 🪶 🦭 🪲 🪳 🪰 🪱 🐻‍❄️ 🫐 🫒 🫑 🫓 🫔 🫕
♔博主昵称:�欢快↑㎡
🕍博客主页:�欢快↑㎡的博客_CSDN博客-学习注意点杂记,BUG集,安装教程领域博主
⚇很方便的在线编辑器:Lightly
🥗感谢点赞🤞🏻评论🤞🏻收藏
相信吧!🤜🏻我们很优秀,还可以更加优秀,加油!🌼让我们一起在写作中记录巩固学习吧!

目录

java和mysql整体概览

MySql驱动

数据库连接池

java系统连接池

mysql数据库的连接池

网络线程连接谁来负责连接

sql接口

查询解析器

查询优化器

执行器

更新怎么执行

InnoDB缓存池

undo日志

redo日志

事务未提交

binlog

binlog刷盘策略

常见刷盘策略

完成事务提交

刷新脏数据


java和mysql整体概览

java的系统连接Mysql的系统

只知道大概在遇到问题不能更好的解决问题。比如死锁,sql性能,异常报错等问题。所以需要我们了解逻辑,才能更好,更快的解决问题。

MySql驱动

我们需要在依赖中增加一个mysql驱动,才能与mysql建立连接。

使用Maven管理项目依赖,可以在pom.xml文件中添加以下依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version>
</dependency>

然后,在Java代码中,需要使用JDBC API与MySQL数据库建立连接。以下是一个示例代码片段:

import java.sql.*;public class MysqlConnect {public static void main(String[] args) {Connection conn = null; //Connection 类可以管理和控制连接try {String dburl = "jdbc:mysql://localhost:3306/mydatabase"; //连接地址String user = "myusername"; //用户名String password = "mypassword"; //密码// 建立连接conn = DriverManager.getConnection(dburl, user, password);System.out.println("连接成功");} catch (SQLException e) {System.out.println("连接失败:" + e.getMessage());} finally {if (conn != null) {try {conn.close(); //关闭连接} catch (SQLException e) {System.out.println("关闭连接失败:" + e.getMessage());}}}}
}

数据库连接池

java系统建立连接是建立多个连接的,建立的连接如果频繁的销毁或创建会造成性能低下,所以是采用复用连接的(web应用是部署在tomcat里面的,springboot项目相当于内嵌了tomcat)

java系统连接池

数据库里面的连接时复用的

mysql数据库的连接池

mysql数据库中的连接也是多线程的,并且也是复用的

网络线程连接谁来负责连接

是靠线程来负责连接的,可以监听连接,读取连接中的sql

sql接口

线程调用sql接口,并将获取到的sql语句给接口

查询解析器

就会解析,让mysql看得懂,比如要从某表做查询动作,条件是什么

查询优化器

选择一个最有查询路径,比如有两条路径(假设)

路径1:定位到user表id=10,查name,age

路径2:把userr name age 都查询出来,看哪条数据id=10

从路径1和路径2中选出一条最优路径

执行器

调用存储引擎,根据优化器生成得执行计划调用存储引擎的接口

mysql中sql接口,sql解析器,查询优化器是同用得

存储引擎有:InnoDB,MyISAM,Memory

更新怎么执行

例子:update user set name = 'aaa' where id = 10;

InnoDB缓存池

它有一个叫Buffeer-pool的缓存池,其中缓存着很多数据,查询的时候,如果缓存池里面有,则不查询磁盘。放在缓存里面可以加快它的访问速度。

如果缓存池里面没有,则从磁盘加载数据到缓存池,对这条数据加独占锁(更新的时候别人不能同时更新)------排他锁------对应共享锁

锁:mysql行锁,表锁,cap锁

undo日志

非自动提交(可以蛇者自动提交)有两个动作:Commit(提交),Rollback(回滚)

InnDB怎么保证可以回滚?

  1. update a

  1. update b

假设执行update a 时发生异常,需要将 update a 回滚

假设更新语句是:update user set name = 'aaa' where id = 10,原来的数据是bbb

先把原来的数据(bbb)写到undo日志。此时磁盘中的数据是aaa,磁盘与缓存中的数据不一致,也就是脏数据。

更新过程:1.检查Buffer Pool里面有没有这条数据,(没有则从磁盘把数据加载到缓存再更新)

2.有则对该条数据加锁,并且将旧值写到undo日志文件

3.将数据刷到磁盘

redo日志

把新值aaa写入Redo Log buffer内存的一个缓存区,用来存redo日志

事务未提交

Mysql宕机,内存(缓存)的数据就会丢失,写到Redo Log buffer内存的一个缓存数据会丢失

redo日志刷盘策略

将内存数据刷到磁盘,刷盘策略是尽可能的保证数据的安全性和性能。

是通过 DBA(数据库管理员) 来调整 innodb_flush_log_at_try_commit 这个参数的。

DBA功能:

  1. 数据库参数设置:DBA 可以根据数据库的实际情况,调整数据库参数,以获得更好的性能。例如,可以调整缓存大小、线程池大小等参数。

  1. 数据库监控:DBA 可以使用各种工具对数据库进行监控,以及时发现并解决问题。例如,可以监控数据库性能、空间使用情况、锁定情况等。

  1. 数据库备份和恢复:DBA 可以设置数据库的备份策略,并保证备份数据的完整性和可用性。在需要时,DBA 还可以从备份中恢复数据。

  1. 安全管理:DBA 可以设置数据库的访问权限、加密等安全措施,以确保数据库系统的安全性。

  1. 性能优化:DBA 可以根据数据库的运行状况,通过重构表结构、索引优化、查询优化等方式,来提高数据库的性能和响应速度。

innodb_flush_log_at_try_commit 这个参数可以设置为 0、1 和 2。

  • 当设置为 0 时,日志缓冲区将被写入日志文件,但不会在事务提交时进行日志文件同步

  • 当设置为 1 时,日志缓冲区将被写入日志文件,并在事务提交时进行日志文件同步

  • 当设置为 2 时,无论是否已提交事务,日志缓冲区每秒都只会被写入一次日志文件。

默认为1,可以设置为2,减少磁盘I/O.

binlog

redo日志是重做,是InnoDB特有的------存储引擎特有

binlog是归档日志,是MySQL中的二进制日志,可以用于记录数据库的所有更改 是mysql server的

binlog刷盘策略

sync_binlog参数:这个参数控制着Binlog是否需要同步写入磁盘。当该参数设置为1时,每次写入Binlog都需要等待写入完成后才能返回成功,这样可以保证写入的数据不会丢失。但是,这也会影响系统的性能,因为同步写入磁盘会增加IO负载。

常见刷盘策略

  1. innodb_flush_log_at_trx_commit参数:这个参数控制着InnoDB引擎写入Redo Log的时机。当该参数设置为1时,每次事务提交后就会将Redo Log写入磁盘,这可以保证数据的持久化。当该参数设置为0时,Redo Log只会被写入缓存,这样可以提高系统性能,但是如果系统崩溃,未写入磁盘的数据将会丢失。

  1. binlog_cache_size参数:这个参数控制着Binlog缓存的大小。当Binlog写满一定大小后,就会进行刷盘操作。如果该参数设置得太小,容易导致频繁的刷盘操作,降低系统性能;如果设置得太大,则可能会浪费过多内存资源。

  1. max_binlog_size参数:这个参数限制了单个Binlog文件的最大大小。一旦文件达到该大小,就会自动切换到下一个文件。如果该参数设置得太小,则会频繁地切换文件,增加系统开销;如果设置得太大,则可能会造成单个文件过大,难以管理。

完成事务提交

写入磁盘文件后,最后完成提交。

将缓存数据写入磁盘,并释放锁定的资源

同时记录binlog文件名称和这次binlog在文件的位置,写入redolog并写入commit标记

刷新脏数据

会有线程再去刷新数据

相关文章:

Mysql架构初识

&#x1f972; &#x1f978; &#x1f90c; &#x1fac0; &#x1fac1; &#x1f977; &#x1f43b;‍❄️&#x1f9a4; &#x1fab6; &#x1f9ad; &#x1fab2; &#x1fab3; &#x1fab0; &#x1fab1; &#x1fab4; &#x1fad0; &#x1fad2; &#x1fad1;…...

字符串函数和内存函数

&#x1f355;博客主页&#xff1a;️自信不孤单 &#x1f36c;文章专栏&#xff1a;C语言 &#x1f35a;代码仓库&#xff1a;破浪晓梦 &#x1f36d;欢迎关注&#xff1a;欢迎大家点赞收藏关注 字符串函数和内存函数 文章目录字符串函数和内存函数前言1. 字符串函数介绍1.1 s…...

Web3中文|GPT-4超越GPT-3.5的五大看点

A Beautiful CinderellaDwelling EagerlyFinally Gains HappinessInspiring Jealous KinLove Magically Nurtures Opulent PrinceQuietly RescuesSlipper TriumphsUniting Very WondrouslyXenial Youth Zealously这是一段描述童话故事《灰姑娘》的内容&#xff0c;它出自GPT-4之…...

动态矢量瓦片缓存库方案

目录 前言 二、实现步骤 1.将数据写入postgis数据库 2.将矢量瓦片数据写入缓存库 3.瓦片接口实现 4.瓦片局部更新接口实现 总结 前言 矢量瓦片作为webgis目前最优秀的数据格式&#xff0c;其主要特点就是解决了大批量数据在前端渲染时出现加载缓慢、卡顿的问题&#xff0…...

628.三个数的最大乘积

给你一个整型数组 nums &#xff0c;在数组中找出由三个数组成的最大乘积&#xff0c;并输出这个乘积。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;6 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3,4] 输出&#xff1a;24 示例 3&#xff1a; …...

【数据结构】堆和集合笔记

自己写一个堆首先&#xff0c;明确一下&#xff0c;为什么需要堆&#xff1f;>考虑插入&#xff0c;删除&#xff0c;查找的效率。数组&#xff0c;查找&#xff0c;最快是二分查找O(lgN)。但查找完如果要做什么操作&#xff0c;比如删除&#xff0c;就要挪动元素了。所以合…...

java LinkedList 源码分析(通俗易懂)

目录 一、前言 二、LinkedList类简介 三、LinkedList类的底层实现 四、LinkedList类的源码解读 1.add方法解读 : 〇准备工作 。 ①跳入无参构造。 ②跳入add方法。 ③跳入linkList方法。 ④增加第一个元素成功。 ⑤向链表中添加第二个元素。 2.remove方法解读 : 〇准备工…...

Vue中实现路由跳转的三种方式详细分解

vue中实现路由跳转的三种方式 目录 vue中实现路由跳转的三种方式 一、使用vue-router 1.下载vue-router模块到当前工程 2.在main.js中引入VueRouter函数 3.添加到Vue.use()身上 – 注册全局RouterLink和RouterView组件 4.创建路由规则数组 – 路径和组件名对应关系 5…...

全国自学考试03708《中国近现代史纲要》重点复习精要

1. 西方列强的殖民扩张和鸦片战争的影响。&#xff08;两面性&#xff09; &#xff1a;反面—破坏了了中国的小农经济&#xff0c;是中国由封建社会转变为两半社会。 --一系列不公平条约&#xff0c;破坏了中国主权领土完整。 --压迫中国人民&#xff0c;给中国人民带来了巨大…...

数据库面试题——锁

了解数据库的锁吗&#xff1f; 锁是数据库系统区别于文件系统的一个关键特性&#xff0c;锁机制用于管理对共享资源的并发访问。 InnoDB下两种标准行级锁&#xff1a; 共享锁&#xff08;S Lock&#xff09;&#xff0c;允许事务读一行数据。 排他锁&#xff08;X Lock&…...

Python笔记 -- 文件和异常

文章目录1、文件1.1、with关键字1.2、逐行读取1.3、写入模式1.4、多行写入2、异常2.1、try-except-else2.2、pass1、文件 1.1、with关键字 with关键字用于自动管理资源 使用with可以让python在合适的时候释放资源 python会将文本解读为字符串 # -*- encoding:utf-8 -*- # 如…...

蓝桥杯刷题冲刺 | 倒计时24天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.修剪灌木2.统计子矩阵1.修剪灌木 题目 链接&#xff1a; 修剪灌木 - 蓝桥云课 (lanqiao.cn) 找…...

真正理解微软Windows程序运行机制——什么是消息

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天说说Windows程序的运行机制。经常被问到MFC到底是一个什么技术&#xff0c;为了解释这个我之前还写过帖子&#xff0c;但是很多人还是不理解。其实这没什么&#xff0c;我在学生时代也被这个问题困绕过。…...

HTTP 缓存的工作原理

缓存是解决http1.1当中的性能问题主要手段。缓存可能存在于客户端浏览器上&#xff0c;也可以存在服务器上面&#xff0c;当使用过期缓存可能给用户展示的是错误的信息而导致一些bug。 HTTP 缓存&#xff1a;为当前请求复用前请求的响应 • 目标&#xff1a;减少时延&#xff1…...

RK3568在Android上进行驱动模块开发(源码外)

文章目录 前言一、ARCH架构二、编译器三、建立自己的Makefile文件总结前言 本文记录在驱动开发时,由于编译内核时间较长,经常会选择单独编译一个模块,这里主要讲解,makefile文件如何编写(主要是编译器和架构) 提示:以下是本篇文章正文内容,下面案例可供参考 一、ARCH…...

操作技巧 | 在Revit中借用CAD填充图案的方法

在建模过程中&#xff0c;有时需要达到多种填充效果&#xff0c;而CAD中大量的二维填充图案&#xff0c;便是最直接的资源之一。 使用 填充图案之前 使用 填充图案之后 其中要用到主要命令便是对表面填充图案的添加与编辑 简单效果 如下 模型填充与绘图填充 区别 模型填…...

Java的二叉树、红黑树、B+树

数组和链表是常用的数据结构&#xff0c;数组虽然查找快&#xff08;有序数组可以通过二分法查找&#xff09;&#xff0c;但是插入和删除是比较慢的&#xff1b;而链表&#xff0c;插入和删除很快&#xff08;只需要改变一些引用值&#xff09;&#xff0c;但是查找就很慢&…...

昨天某读者拿到华为OD岗位offer,今天来分享一下经验,包含华为OD机试

来自读者投稿&#xff0c;已经拿到华为 OD 开发岗位 offer&#xff0c;询问了一些问题&#xff0c;下面是他的一些经验。 文章目录华为 OD 投递简历华为 OD 机试分数OD 机试通过之后&#xff0c;收到综合测评OD 技术面&#xff08;时长 1 小时左右&#xff09;主管/HR 面试&…...

树的遍历方式(前中后,层序遍历,递归,迭代,Morris遍历)-----直接查询代码

目录 一.前序遍历 1.递归 2.栈迭代 3.Morris遍历 二.中序遍历 1.递归 2.栈迭代 3.Morris遍历 三.后序遍历 1.递归 2.栈迭代 3.Morris遍历 四.前中后序的统一迭代法 1.前序遍历 2.中序遍历 3.后序遍历 五.层序遍历 1.队列迭代 2.之字形层序遍历 3.锯齿形层序…...

Docker Registry部署镜像私有仓库及鉴权认证

文章目录一、Docker Registry是什么&#xff1f;二、Docker Registry部署私有仓库2.1、Docker Registry安装2.2、Docker Registry配置2.3、启动Docker Registry2.4、Docker客户端配置2.5、向Docker Registry上传和下载镜像三、Docker Registry鉴权和认证3.1、基本认证3.2、Bear…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...