当前位置: 首页 > 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…...

XUnity.AutoTranslator完整指南:让外语游戏瞬间变中文的免费神器

XUnity.AutoTranslator完整指南&#xff1a;让外语游戏瞬间变中文的免费神器 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为语言障碍而无法畅玩海外Unity游戏吗&#xff1f;XUnity.AutoTranslator…...

OpenCorpo开源企业情报工具:从数据抓取到关系图谱构建实战

1. 项目概述&#xff1a;当开源情报遇上企业数据最近在开源情报&#xff08;OSINT&#xff09;的圈子里&#xff0c;一个名为 OpenCorpo 的项目引起了我的注意。它不是一个传统意义上的商业数据库&#xff0c;而是一个由社区驱动的、旨在聚合和解析全球企业公开信息的工具集。简…...

M4Markets:技术架构稳健性的多角度观察

在金融服务行业不断深化的当下&#xff0c;平台的综合实力已经成为客户筛选时的关注焦点。M4Markets作为活跃在国际金融领域的服务机构&#xff0c;多年来在多个维度展现出较为突出的特点。本文将从评测视角出发&#xff0c;对其综合表现进行多维度的观察与解读&#xff0c;希望…...

豆包输入法Mac版正式上线,所有人都该试试AI语音输入了。

豆包输入法的Mac版&#xff0c;终于正式上线了。我自己已经内测使用了快1个月了&#xff0c;但是我等这一天&#xff0c;也真的等了好久好久。因为这篇文章我想写很久了&#xff0c;但是一直没写就是因为&#xff0c;对于大众用户来说&#xff0c;之前还一直没有一个比较好的产…...

3大核心优势:Detect It Easy 如何成为文件类型识别的终极工具

3大核心优势&#xff1a;Detect It Easy 如何成为文件类型识别的终极工具 【免费下载链接】Detect-It-Easy Program for determining types of files for Windows, Linux and MacOS. 项目地址: https://gitcode.com/gh_mirrors/de/Detect-It-Easy 想象一下&#xff0c;你…...

模块三-数据清洗与预处理——15. 异常值检测与处理

15. 异常值检测与处理 1. 概述 异常值&#xff08;Outlier&#xff09;是指与其他观测值显著不同的数据点。它们可能来自测量错误、数据录入错误&#xff0c;也可能是真实的极端情况&#xff08;如高收入人群&#xff09;。正确识别和处理异常值对数据分析至关重要。 import pa…...

为什么给 Claude Code 加上 CLAUDE.md 后,它就像换了一个脑子?

我是张大鹏&#xff0c;有十多年 AI 人工智能项目的开发经验&#xff0c;带过不少项目。说实话&#xff0c;最难的不是写代码&#xff0c;是让 AI 真正理解你想要什么。最近给项目加了一份 CLAUDE.md&#xff0c;效果立竿见影——Claude Code 从"莽撞乱撞"变成了&quo…...

告别91卫图!用QGIS Python脚本批量下载Google/Bing卫星图,附完整代码

开源GIS实战&#xff1a;Python脚本自动化下载Google/Bing卫星影像全攻略 当你在深夜赶制城市规划方案时&#xff0c;突然发现91卫图下载的影像分辨率不足&#xff1b;当科研项目需要批量获取区域卫星数据时&#xff0c;商业软件高昂的授权费用让你望而却步——这可能是每个GIS…...

BG3模组管理器版本兼容性终极指南:告别游戏崩溃和模组失效

BG3模组管理器版本兼容性终极指南&#xff1a;告别游戏崩溃和模组失效 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager BG3模组管理器是《博德之门3》…...

基于Java的教学仪器设备销售网站(10017)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远程调试控屏包运行一键启动项目&…...