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

【MySQL数据库】InnoDB存储引擎:逻辑存储结构、内存架构、磁盘架构

逻辑存储结构

一个数据库是由一张张表组成的,而表中是由一个个段构成的,一个段是由区构成的,区空间是由页构成的,页是行构成的。

①表空间:.ibd文件,一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。

②段:分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment),InnoDB是索引组织表,数据段就是B+树的叶子结点,索引段就是B+树的非叶子结点。段用来管理多个Extent(区)。

③区:表空间的单元结构,每个区大小为1M。默认情况下,InnoDB存储引擎页大小为16K,也就是一个区一共有64各连续的页。

④页:是InnoDB存储引擎磁盘管理的最小单元,每个页大小默认16KB,为了保证页的连续性,InnoDB存储引擎每次从磁盘申请4-5个区。

⑤行:InnoDB存储引擎数据是按行进行存放的。

在每个页中,都会有这么两个隐藏行:

        Trx_id: 每次对某条记录进行改动时,都会把对应的事务id赋给trx_id隐藏列

        Roll_pointer: 每次对某条记录进行改动时,都会把旧的版本写入到undo日志中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。

架构

MySQL5.5版本开始,默认使用InnoDB存储引擎,它擅长事务处理,且具有崩溃恢复特性,在日常开发中使用非常广泛。下面是InnoDB架构图,左侧为内存结构,右侧为磁盘结构。

内存架构

对于上图,我们可以看到,内存结构部分(左侧),很大一部分都是Buffer-即缓冲区。

在内存架构中,标注了四块区域:

①Buffer Pool:缓冲池。

        缓冲池是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据。在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池中没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度。

        假如没有缓冲池,那么我们每次的增删改查的操作,都要从磁盘空间中去读写,磁盘IO的次数越多,效率就越低,在业务比较复杂的情况下,大量的磁盘IO还都是随机IO,这样非常消耗性能。

        我们还可以看到,缓冲池中有着一个一个的小块儿,这个小块儿就是页。缓冲池以Page页为单位,底层采用的是链表的数据结构管理Page。根据状态,将Page分为三种类型:

free page:空闲页,申请但未被使用

clean page:被使用的page,但数据没有被修改过

dirty page:脏页,被使用的page,且数据被修改过,当还没有往磁盘中刷数据的时候,页中数据与磁盘的数据产生了不一致,所以叫做脏页。

②Change Buffer:更改缓冲区

        其实在5.x版本的时候还没有更改缓冲区,相反当时有一个插入缓冲区。在8.0之后呢,才引入了Change Buffer更改缓冲区。更改缓冲区主要是针对非唯一的二级索引页,在执行DML语句时,如果这些数据Page没有BufferPool中,不会直接操作磁盘,而是会将数据变更存在更改缓冲区中,在未来数据被读取时,再将数据合并恢复到BufferPool中,再将合并后的数据从缓冲池在某一阶段刷新到磁盘中去。

        ChangeBuffer存在的意义是什么呢?

        这幅图展示的就是二级索引的一颗B+树结构。跟聚簇索引不同,二级索引通常是不唯一的,并且以相对随机的顺序插入二级索引。同样,删除和更新可能会影响到所引述中不相邻的二级索引页,如果每一次都操作磁盘,会造成大量的磁盘IO,有了ChangeBuffer之后,我们就可以在缓冲池中进行合并处理,减少磁盘IO。

        这里我们区分一下BufferPool和ChangeBuffer,我们可以看到ChangeBuffer其实是在Buffer Pool中的一块比较特殊的区域,这块区域专门用来操作当前缓冲池其它区域中所没有的Page页。而BufferPool的话,存储的是已经有的Page页。关键就在于操作的数据所在页新不新

③Adaptive Hash Index:自适应哈希索引。

提到哈希索引,我们知道InnoDB默认是不支持哈希索引的,它支持的是B+树索引。

这里提到的自适应哈希索引,无需人工干预,是系统根据情况自动完成的(参数: adaptive_hash_index)。主要用于优化Buffer Pool数据的查询。InnoDB存储引擎会监控对表上各索引页的查询,如果观察到hash索引可以提升速度,则建立hash索引,所以称之为自适应的hash索引。

在mysql中使用命令show variables like '%hash_index%';显示变量的值。我们可以看到Value值为ON,也就是开启状态。 

④Log Buffer:日志缓冲区

日志缓冲区:用来保存要写入到磁盘中的log日志数据(redo log、undo log),默认大小为16MB,日志缓冲区的日志定期刷新到磁盘中。如果需要更新、插入或删除许多列的事务,增加日志缓冲区的大小可以节省磁盘IO。

参数:

        innodb_log_buffer_size:缓冲区大小

        innodb_flush_log_at_trx_commit;日志刷新到磁盘时机

 

对于图2的第二个变量对应的值1:代表日志在每次事务提交时写入并刷新到磁盘。而0则代表每秒将日志写入并刷新磁盘一次,2则代表日志在每次事务提交后写入,并每秒刷新到磁盘一次。

磁盘架构

同样的,看上图中,磁盘结构部分(右侧),很大一部分是TableSpace-即表空间。但磁盘架构不止是表空间,还有Doublewrite Buffer Files-双写缓冲区 和 Redo Log-日志。

①System Tablespaces(ibdata1):

        系统表空间:是ChangeBuffer的存储区域。如果表是在系统表空间,而不是每个表文件或通用表空间创建的,它也可能包含表和索引数据。(在MySQL5.x版本,系统表空间还包含InnoDB数据字典,undolog等,在8.0版本之后,重新规划了这块空间)。【参数:innodb_data_file_path】

②File-Per-Table Tablespaces(innodb_file_per_table=ON)

File-Per-Table Tablespaces:每个表的文件表空间包含单个InnoDB表的数据和索引,并存储在文件系统上的单个数据文件中。【参数:innodb_file_per_table】

ON(开启):代表我们创建的每张表对应的表空间都会独立存储在文件系统(.ibd文件)中,就不会存放在系统表空间了。这个idb文件存储的是表的结构、数据、索引等内容。

③General Tablespaces

通用表空间:需要通过命令:

create tablespace xxx 
add datafile filename -- 关联的表空间文件
engine = engine_name;-- example
create tablespace test_stark add datafile 'mystark.ibd' engine = innodb;

该语法创建通用表空间,在创建表时,可以指定将表建在该表空间,这样就不会单独生成表空间文件了。

create table xxx(...
)tablespace test_stark;
④Undo Tablespaces

撤销表空间,MySQL实例在初始化时会自动创建两个(undo_001 && undo_002)默认的undo表空间(初始为16MB),用于存储undo log日志。

⑤Temporary Tablespaces

临时表空间,InnoDB使用会话临时表空间和全局临时表空间。存储用户创建的临时表等数据。

⑥Doublewrite Buffer Files:

双写缓冲区,innoDB引擎将数据页从Buffer Pool刷新到磁盘前,先将数据页写到双写缓冲区文件,便于系统异常时恢复数据【#ib_16384_0.dblwr  &&  #ib_16384_1.dblwr】

⑦Redo Log

重做日志,是用来实现事务的持久性的。该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志文件(redo log),前者是在内存中,后者是在磁盘中。当事务提交后会把所有修改信息都存到该日志中,用于在刷新脏页到磁盘时,发生错误时,进行数据恢复使用。

以循环的方式写入重做日志文件,涉及到两个文件:【ib_logfile0 && ib_logfile1】

后台线程

我们独立的学习了内存和磁盘两个结构,那么内存是怎么刷新到磁盘中的呢?这就涉及到操作系统OS的一组后台线程:

后台线程的作用就是将InnoDB存储引擎缓冲池中的数据在合适的时机刷新到磁盘文件中。

四类后台线程:

①Master Thread

核心后台线程,负责调度其它线程,还负责将缓冲池中的数据异步刷新到磁盘中,保持数据一致性。还包括脏页的刷新,合并插入缓存,undo页的回收。

②IO Thread

在InnoDB存储引擎中大量使用了AIO来处理IO请求,这样可以极大地提高数据库的性能,而IO Thread主要负责这些IO请求的回调。

线程类型默认个数职责
Read thread4负责读操作
Write thread4负责写操作
Log thread1负责将日志缓冲区刷新到磁盘
Insert buffer thread1负责将写缓冲区内容刷新到磁盘
③Purge Thread

主要用于回收事务已经提交了的undo log,在事务提交后,undo log可能不用了,就用它来回收。

④Page Cleaner Thread

协助Master Thread刷新脏页到磁盘的线程,它可以减轻master thread的工作压力,减少阻塞。


!!感谢大家!!

相关文章:

【MySQL数据库】InnoDB存储引擎:逻辑存储结构、内存架构、磁盘架构

逻辑存储结构 一个数据库是由一张张表组成的,而表中是由一个个段构成的,一个段是由区构成的,区空间是由页构成的,页是行构成的。 ①表空间:.ibd文件,一个mysql实例可以对应多个表空间,用于存储…...

HJ16 购物单

https://www.nowcoder.com/exam/oj/ta?tpId37 HJ16 购物单 描述 王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件。 主件可以没有附件,至多有 2个附件。附件不再有从属于自己的附件。如果要买归类为附件的物品,必…...

SLAM文献之DM-VIO: Delayed Marginalization Visual-Inertial Odometry

1. 算法概述 DM-VIO (Delayed Marginalization Visual-Inertial Odometry) 是一种基于延迟边缘化的视觉-惯性里程计算法,它结合了视觉和惯性测量单元(IMU)的数据进行位姿估计。该算法是VINS-Mono的改进版本,主要创新点在于采用了一种延迟边缘化策略&…...

【信息安全】黑芝麻A1000芯片安全启动方案

基于黑芝麻A1000芯片的安全启动方案实现指南: 一、安全启动流程架构设计 // 启动阶段状态机定义(基于A1000芯片手册) typedef enum {ROM_BOOT = 0x01, // BootROM验证 SPL_VERIFY = 0x02, // 二级加载器验证 ATF_SIGN_CHECK = 0x03, // ARM Trusted Firmware验证 OS_LOADE…...

初识Redis · list和hash类型

目录 前言: 哈希类型 基本命令 编码方式 应用场景 列表 基本命令 编码方式 应用场景 前言: 前文我们已经介绍了string的基本使用,以及对应的基本命令,最后也是简单的理解了一下string的应用场景,比如计数统计…...

golang-非orm数据库的操作与对比 database/sql、sqlx 和 sqlc

简单介绍 database/sql database/sql 是一个标准库软件包,负责与数据库(主要是 SQL 关系数据库)的连接和交互。 它为类 SQL 交互提供泛型接口、类型和方法。database/sql 在创建时将简单易用纳入考量,配置为支持与类 SQL 数据库…...

‌DeepSeek模型在非图形智能体的应用中是否需要GPU

答:不一定 概念 1、是否需要GPU与应用是否图形处理应用无关 2、文本内容智能体大多也需要GPU来提供更好的性能 3、‌DeepSeek模型在非图形智能体的应用中是否需要GPU取决于具体的模型版本和部署环境 不需要GPU的模型版本 ‌DeepSeek-R1-1.5B‌: 这…...

RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法

RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法 问题描述解决方法 问题描述 有一天我发现我的 RadioMaster POCKET 遥控器进入 ExpressLRS 设置界面时,界面却一直停留在 “Loading” 状态,完全无法进入设置界面。 我并没有…...

idea的快捷键使用以及相关设置

文章目录 快捷键常用设置 快捷键 快捷键作用ctrlshift/注释选中内容Ctrl /注释一行/** Enter文档注释ALT SHIFT ↑, ALT SHIFT ↓上下移动当前代码Ctrl ALT L格式化代码Ctrl X删除所在行并复制该行Ctrl D复制当前行数据到下一行main/psvm快速生成入口程序soutSystem.o…...

【DDR 内存学习专栏 1.4 -- DDR 的 Bank Group】

文章目录 BankgroupBankgroup 与 Bank 的关系 DDR4 中的 BankgroupDDR4-3200 8Gb芯片为例组织结构访问场景 实际应用示例 Bankgroup Bankgroup是DDR4及后续标准(DDR5)中引入的一个更高层次的组织结构。它将多个Bank组合在一起形成一个Bankgroup,目的是为了进一步提…...

新晋前端框架技术:小程序容器与SuperApp构建

2025年,前端开发领域持续迭代,主流框架如Vue、React等纷纷推出新版本,在性能、开发效率及适用场景上实现突破,进一步巩固其技术地位。 1. Vue 3的全面普及与创新 Vue 3通过多项核心特性优化了开发体验: Teleport组件…...

强化学习:基于价值的方法做的是回归,基于策略的方法做的是分类,可以这么理解吗?

在强化学习领域,基于价值的方法(Value-based Methods)和基于策略的方法(Policy-based Methods)是两种核心范式。本文将从目标函数、优化机制以及与机器学习任务的类比角度,探讨这两种方法是否可以被分别理解为回归和分类任务,并深入分析其内在逻辑。 一、基于价值的方法…...

蓝耘元生代AIDC OS:一站式MaaS平台,助力AI应用快速落地

文章目录 引言1. 什么是MaaS平台?MaaS平台的典型特点 2. 蓝耘元生代AIDC OS 热门模型3. 快速入门:如何调用API?步骤1:注册并获取API Key步骤2:调用API(Python示例) 4. 与Chatbox搭配使用&#x…...

3.2.2.3 Spring Boot配置拦截器

在Spring Boot应用中配置拦截器(Interceptor)可以对请求进行预处理和后处理,实现如权限检查、日志记录等功能。通过实现HandlerInterceptor接口并注册到Spring容器,拦截器可以自动应用到匹配的请求路径。案例中,创建了…...

Python----机器学习(基于PyTorch的蘑菇逻辑回归)

Logistic Regression(逻辑回归)是一种用于处理二分类问题的统计学习方法。它基于线性回归 模型,通过Sigmoid函数将输出映射到[0, 1]范围内,表示概率。逻辑回归常被用于预测某个实 例属于正类别的概率。 一、数据集介绍 本例使用了…...

Python----机器学习(基于PyTorch的乳腺癌逻辑回归)

Logistic Regression(逻辑回归)是一种用于处理二分类问题的统计学习方法。它基于线性回归 模型,通过Sigmoid函数将输出映射到[0, 1]范围内,表示概率。逻辑回归常被用于预测某个实 例属于正类别的概率。 一、数据集介绍 在本例中&…...

如何配置AWS EKS自动扩展组:实现高效弹性伸缩

本文详细讲解如何在AWS EKS中配置节点组(Node Group)和Pod的自动扩展,优化资源利用率并保障应用高可用。 一、准备工作 工具安装 安装并配置AWS CLI 安装eksctl(EKS管理工具) 安装kubectl(Kubernetes命令…...

【C++ Qt】认识Qt、Qt 项目搭建流程(图文并茂、通俗易懂)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 本章将开启Qt的学习,Qt是一个较为古老但仍然在GUI图形化界面设计中有着举足轻重的地位,因为它适合嵌入式和多种平台而被广泛使用…...

用Python打造去中心化知识产权保护系统:科技驱动创作者权益新方案

用Python打造去中心化知识产权保护系统:科技驱动创作者权益新方案 近年来,区块链技术和去中心化系统的兴起为知识产权保护提供了新的可能性。在传统模式下,知识产权保护通常依赖于集中化管理机构,这种方式不仅成本高,还可能因不透明导致权益争议。于是,我们萌生了一个设…...

CVE重要漏洞复现-Fastjson1.2.24-RCE漏洞

本文仅供网络学习,不得用于非法目的,否则后果自负 1、漏洞简介 fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符…...

Windows 图形显示驱动开发-WDDM 1.2功能—显示设备硬件软件认证要求

一、容器技术id技术的硬件级实现要求 1.1 EDID规范深度适配 1.物理层要求: 必须使用EDID 2.0及以上版本数据结构 容器ID需写入VSDB区块的0x50-0x6F区域,采用Little-Endian格式存储 允许的最大传输延迟:I2C总线时钟频率≤100KHz时&#xf…...

Coze流搭建--写入飞书多维表格

目标 使用coze搭建一个业务流,将业务流生产出的数据写入飞书保存 测试业务流 使用图片生成插件,配置prompt生产图片,将生产的结果写入飞书文档 coze流 运行后最终效果 搭建流程 第一步:飞书创建多维表格 注册飞书创建多维表…...

4.14:计组第三章

一、数据的强制类型转换与存储 1、边界对齐与大端小端方式 2、真-强制类型转换 二、存储器的基本知识(不包含磁盘存储器) 1、主存储器 (1)...

Vue3+Vite前端项目部署后部分图片资源无法获取、动态路径图片资源报404错误的原因及解决方案

目录 Vue3vite前端项目部署后部分图片资源无法获取、动态路径图片资源报404错误的原因及解决方案 一、情景介绍 1、问题出现的场景 2、无法加载的图片写法 二、反向代理原理简介 三、造成该现象的原因 四、解决方案 1、放弃动态渲染 2、在页面挂载的时候引入图片资源 …...

Nacos操作指南

第一章:Nacos 概述 1.1 什么是 Nacos? 定义与定位 Nacos(Naming and Configuration Service)是阿里巴巴于2018年开源的动态服务发现、配置管理和服务管理平台,现已成为微服务生态中的重要基础设施。其核心价值在于帮…...

2025年常见渗透测试面试题-红队面试宝典下(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 一、Java反序列化过程及利用链示例 二、大型网络渗透经验 三、Cobalt Strike的两种Dump Hash区别 四…...

扩增子分析|基于R语言microeco包进行微生物群落网络分析(network网络、Zi-Pi关键物种和subnet子网络图)

一、引言 microeco包是福建农林大学姚敏杰教授团队开发的扩增子测序集成分析。该包综合了扩增子测序下游分析的多种功能包括群落组成、多样性、网络分析、零模型等等。通过简单的几行代码可实现复杂的分析。因此,microeco包发表以来被学界广泛关注,截止2…...

flutter-Text等组件出现双层黄色下划线的问题

文章目录 1. 现象2. 原因3. 解决方法 1. 现象 这天我正在写Flutter项目的页面功能,突然发现我的 Text 文字出现了奇怪的样式,具体如下: 文字下面出现了双层黄色下划线文字的空格变得很大,文字的间距也变得很大 我百思不得其解&a…...

优化运营、降低成本、提高服务质量的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本可通过边缘计算技术…...

leetcode第二题

功能函数 typedef struct ListNode {int val;struct ListNode *next; } ListNode;struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {ListNode *dummy (ListNode *)malloc(sizeof(ListNode));ListNode *cur dummy;int carry 0; //carry是进位值…...

QT实现带快捷键的自定义 QComboBox 控件

在现代GUI应用程序中,用户界面的设计不仅要美观,还要提供高效的交互方式。本文将介绍一个自定义的QCComboBox类,它是一个基于Qt的组合框(QComboBox),支持为每个下拉项添加快捷键。通过这些快捷键&#xff0…...

聊聊类模板

我们来聊聊类模板,从基础到实际例子,让你更容易理解。 什么是类模板? 类模板是一种模板,允许我们定义一个可以处理任意数据类型的类。简单来说,就是我们可以编写一个类的“蓝图”,然后在需要的时候使用不…...

使用Python进行AI图像生成:从GAN到风格迁移的完整指南

AI图像生成是一个非常有趣且前沿的领域,结合了深度学习和计算机视觉技术。以下是一些使用Python和相关库进行AI图像生成的创意和实现思路: 1. 使用GAN(生成对抗网络) 基本概念:GAN由两个神经网络组成:生成…...

Java 设计模式:外观模式详解

Java 设计模式:外观模式详解 外观模式(Facade Pattern)是一种结构型设计模式,它为复杂的子系统提供一个简化的统一接口,隐藏子系统的复杂性,使客户端更方便地使用系统。外观模式就像一个“门面”&#xff…...

微信小程序中实现某个样式值setData改变时从350rpx到200rpx的平滑过渡效果

方案一&#xff1a;使用 CSS Transition&#xff08;推荐简单场景&#xff09; WXSS /* 在对应组件的WXSS中添加 */ .transition-effect {transition: all 0.4s ease-in-out;will-change: bottom; /* 启用GPU加速 */ }WXML <!-- 修改后的WXML --> <view class"…...

LINUX基础 [四] - Linux工具

目录 软件包管理器yum Linux开发工具vim vim的基本概念 vim的三种常用模式 vim的简单配置 vim常用模式的基本操作 命令模式 底行模式 处理vim打开文件报错的问题 Linux编译器-gcc/g使用 为什么我们可以用C/C做开发呢&#xff1f; 预处理&#xff08;进行宏替换&#x…...

Spring Cloud之远程调用OpenFeign最佳实践

目录 OpenFeign最佳实践 问题引入 Feign 继承方式 创建Module 引入依赖 编写接口 打Jar包 服务提供方 服务消费方 启动服务并访问 Feign 抽取方式 创建Module 引入依赖 编写接口 打Jar包 服务消费方 启动服务并访问 服务部署 修改pom.xml文件 观察Nacos控制…...

【QT】 常用控件【输入类】

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Qt 目录 一&#xff1a;&#x1f525; 输入类控件 &#x1f98b; Line Edit -- 单行输入框&#x1f380; 录入个人信息&#x1f380; 正则表达式验证输入框数据&#x1f380; 验证两次输入密码一致…...

【Python】读取xyz坐标文件输出csv文件

Python读取xyz坐标文件输出csv文件 import sys import numpy as np import pandas as pd from tqdm import tqdm import cv2 import argparsedef read_xyz(file_path):with open(file_path, "r") as f: # 打开文件data f.readlines() # 读取文件datas []for …...

深度解析Redis过期字段清理机制:从源码到集群化实践 (一)

深度解析Redis过期字段清理机制&#xff1a;从源码到集群化实践 一、问题本质与架构设计 1.1 过期数据管理的核心挑战 Redis连接池时序图技术方案 ​​设计规范&#xff1a;​ #mermaid-svg-Yr9fBwszePgHNnEQ {font-family:"trebuchet ms",verdana,arial,sans-se…...

MapReduce实验:分析和编写WordCount程序(对文本进行查重)

实验环境&#xff1a;已经部署好的Hadoop环境 Hadoop安装、配置与管理_centos hadoop安装-CSDN博客 实验目的&#xff1a;对输入文件统计单词频率 实验过程&#xff1a; 1、准备文件 test.txt文件&#xff0c;它是你需要准备的原始数据文件&#xff0c;存放在你的 Linux 系…...

【中大厂面试题】腾讯云 java 后端 最新面试题

腾讯云&#xff08;一面&#xff09; 1. spring 和 springboot的区别是什么&#xff1f; 配置方式的区别&#xff1a;Spring 应用的配置较为繁琐&#xff0c;通常需要编写大量的 XML 配置文件或者使用 Java 注解进行配置。例如&#xff0c;配置数据源、事务管理器等都需要手动…...

Redis存储“大数据对象”的常用策略及StackOverflowError错误解决方案

Hi&#xff0c;大家好&#xff0c;我是灰小猿&#xff01; 在一些功能的开发中&#xff0c;我们一般会有一些场景需要将得到的数据先暂时的存储起来&#xff0c;以便后面的接口或业务使用&#xff0c;这种场景我们一般常用的场景就是将数据暂时存储在缓存中&#xff0c;之后再…...

【Vue】v-if和v-show的区别

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–核心区别三–使用场景​四–性能对比五–总结​ 二. 核心区别 之前将css的显示隐藏的方式的时候&#xff0c;就已经提到过v-show和v-if了。忘记了的可以再回头去复习复习。 &#xff08;2.1&#xff09…...

南瓜颜色预测:逻辑回归在农业分类问题中的实战应用

南瓜颜色预测&#xff1a;逻辑回归在农业分类问题中的实战应用 摘要 本案例通过预测南瓜颜色的分类问题&#xff0c;全面展示了逻辑回归在农业领域的实战应用。从数据预处理到模型评估&#xff0c;详细介绍了Seaborn可视化、模型构建、性能优化和结果解释等关键环节。案例不仅…...

【物联网-RS-485】

物联网-RS-485 ■ RS-485 连接方式■ RS-485 半双工通讯■ RS-485 的特点■ ModBus■ ModBus-ASCII■ ModBus-RTU ■ RS-485 连接方式 ■ RS-485 半双工通讯 一线定义为A 一线定义为B RS-485传输方式&#xff1a;半双工通信、&#xff08;逻辑1&#xff1a;2V ~ 6V 逻辑0&…...

TDengine 语言连接器(Node.js)

简介 tdengine/websocket 是 TDengine 的官方 Node.js 语言连接器。Node.js 开发人员可以通过它开发存取 TDengine 数据库的应用软件。 Node.js 连接器源码托管在 GitHub。 Node.js 版本兼容性 支持 Node.js 14 及以上版本。 支持的平台 支持所有能运行 Node.js 的平台。 …...

Git分布式版本控制工具

一、工作流程 二、常用指令 1、配置git 配置环境变量 cmd打开命令行&#xff0c;输入git查看是否配置成功。 设置用户名和邮箱 git config --global user.name "用户名" git config --global user.email "邮箱" 查看用户名和邮箱 git config --glob…...

The first day of vue

关于小白直接接触vue3的第1天 首先我们需要一个脚手架node.js (这个可以从官网下载&#xff0c;免费的&#xff0c;安装也比较简单&#xff0c;后续我也会出一个相关的安装教程&#xff0c;方便大家和我一起讨论&#xff0c;互相学习&#xff09; &#xff08;不知道有没有人对…...

C语言超详细指针知识(三)

在经过前面两篇指针知识博客学习之后&#xff0c;我相信你已经对指针有了一定的理解&#xff0c;今天将更新C语言指针最后一篇&#xff0c;一起来学习吧。 1.字符指针变量 在指针类型的学习中&#xff0c;我们知道有一种指针类型为字符指针char*&#xff0c;之前我们是这样使用…...