深入理解MySQL数据库索引
深入理解MySQL数据库索引
个人主页:顾漂亮
1. 索引简介
1.1 索引是什么?
MySQL的索引是一种数据结构,它可以帮助数据库高效地查询、更新数据表中的数据。索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。
MySQL索引类似于书籍的目录,通过指向数据行的位置,**可以快速定位和访问表中的数据。**就像使用汉语字典的目录(索引)页,可以通过笔画、偏旁部首、拼音等排序的目录快速查到所需要的字。
1.2 为什么要使用索引?
- 在工作或者学习中,如果对索引比较了解,可以写出更高效率的SQL语句。
- 索引可以提升数据检索的效率,在应用程序的运行过程中,查询操作的频率远远高于增删改的频率。
2. 索引需要采用什么样的数据结构?
2.1 Hash – 哈希表
查询和删除数据的时间复杂度都是O(1),查询速度非常快,但MySQL并没有选择其作为索引的原因是Hash不支持范围查找。
2.2 二叉搜索树
落选原因:
- 最坏情况下,查询时间复杂度为O(N)。
- 节点个数过多无法保证数的高度。
- AVL和红黑树虽然是平衡或者近似平衡,但毕竟是二叉树。
- 由于数据都是在磁盘上保存的,在检索数据时,每次访问某个节点的子节点时都会发生一次磁盘IO,而在整个数据库系统中,IO是性能的瓶颈,减少IO次数可以有效提升性能。
2.3 N叉树
为了解决树高的问题,可以使用N叉树。
Tips:推荐一个数据结构可视化网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html。
由上图可知,相同数据量的情况下,N叉树的树高可以得到有效控制,也就意味着在相同的情况下可以减少IO的次数,从而提升效率。但是MySQL认为N叉树作为索引的数据结构不是最理想的。
2.4 B+树
-
MySQL使用的是B+树的升级版,一般B+树的叶子节点可以组织成一个单链表,MySQL则将其升级为双向链表结构,更大提升查询和修改的效率。
-
B+树是一种经常用于数据库和文件系统等场合的平衡查找树,MySQL索引采用的数据结构,以4阶B+树为例:
B+树的特点:
- 能够保持数据稳定有序,插入和修改有较为稳定的时间复杂度。
- 非叶子节点仅具有索引作用,不存储数据,所有叶子节点保存真实数据。
- 所有的叶子节点构成一个有序链表。
B+树和B树的对比:
- B+树的叶子节点中的数据是连续的,且相互链接,便于区间查找和搜索。
- 非叶子节点的值都包含在叶子节点中。
- 对于B+树而言,在和B树相同树高的情况下,查找任意元素的时间复杂度都为log(N),性能更加均衡。
3. MySQL中的页
3.1 为什么要使用页?
在.ibd文件中最重要的结构体就是Page(页),页是内存与磁盘交互的最小单元,默认大小为16KB,每次内存和磁盘的交互至少读取一页,所以在磁盘中每个页内部的地址都是连续的。根据局部性原理,将来要使用的数据大概率与当前访问的数据在空间上是邻近的,所以一次从磁盘中读取一页的数据放入内存中,当下次查询的数据还在这个页中就可以直接从内存中直接读取,从而减少磁盘IO,提高性能。
每一页中即使没有数据也会使用16KB的存储空间,同时与索引的B+树中的节点对应,查看页的大小,可以通过系统变量innodb_page_size
查看:
mysql> show variables like 'innodb_page_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 | # 16384表示的是字节数 16*1024 = 16384
+------------------+-------+
1 row in set, 6 warnings (0.01 sec)
- 在MySQL中有多种不同类型的页,最常用的就是用来存储数据和索引的“索引页”,也叫做“数据页”,但是不论哪一种类型的页都会包含页头和页尾,页的主体信息使用数据行进行填充,数据页的基本结构如下图所示:
3.2 页文件头和页文件尾
- 着重关注内容:上一个页号和下一页页号,通过这两个属性可以把页和页之间链接起来,形成一个双向链表。
3.3 页主体
-
页主体部分是保存真实数据的主要区域,每当创建一个新页时,都会自动分配两个行,一个是页内最小行
Infimun
,另一个是页内最大行Supremun
,这两个行并不存储任何真实信息,而是作为数据行链表的头和尾。第一个数据行有一个记录下一行的地址偏移量的区域next_record
,将页内所有数据行组成了一个单向链表。
-
当向一个新页插入数据时,将
Infimun
连接第一个数据行,最后一行真实数据行连接Supremun
,通过这样的方式,数据行就构成了一个单向链表的结构,更多的数据插入之后,会按照主键从小到大的顺序进行连接。
3.4 页目录
-
当按照主键或者索引查找某条数据的时候,最简单直接的方案是从最小行
Infimun
开始,沿着链表顺序逐个比对查找,但一个页有16KB,通常会存在上百行数据,每次都要遍历数百行,无法满足高效查询。为了提高查询效率,InnoDB采用二分查找解决上述问题。 -
具体实现方式是在每一个页加入一个页目录,将页内包含最小、最大行在内的所有行进行分组,约定头行单独为一组,其他每个组最多8条数据,同时把每一个组最后一行在页中的地址,按照主键从小到大记录的顺序记录在页目录中,页目录中每一个位置称为一个槽,每个槽对应一个分组。
-
后续查找按照先在页目录中查找到对应的槽,再进行遍历槽中的数据,最终得到想要的结果。
3.5 数据页头
数据页头记录当前页保存数据相关的信息。
4. B+树在MySQL索引中的应用
查找id=5
的过程:加载索引页1 -> 加载索引页2 -> 加载数据页3。
注意点:
- 因为索引页数据量相对较小的情况下,如果可以把索引页缓存到内存中,一次IO就可以找到目标数据,提升查询性能。
5. 索引分类
5.1 主键索引
-
当在一个表上定义一个主键时,InnoDB使用其作为聚集索引。
-
推荐:为每一个表定义一个主键,如果没有逻辑上唯一且非空的列或者列集可以使用主键,则添加一个自增列。
创建主键索引:
-- 方式一:创建表时创建主键
create table t_test_pk(id bigint primary key auto_increment,name varchar(20)
);-- 方式二:创建表时单独指定主键列
create table t_test_pk1(id bigint auto_increment,name varchar(20),primary key(id)
);-- 方式三:修改表中的列为主键索引
create table t_test_pk2(id bigint,name varchar(20)
);alter table t_test_pk2 add primary key(id);
alter table t_test_pk2 modify id bigint auto_increment;
5.2 普通索引
-
最基本的索引类型,没有唯一性的限制。
-
可以为多个列创建组合索引,称为复合索引。
-
为了提升查询效率,可以为查询频繁的列创建普通索引。
普通索引的使用场景:
- 创建表的时候,明确知道某些列是频繁查询的列,就直接创建。
- 在工作中,一般表中数据量很大的时候,可以创建普通索引来提升查询效率。
- 若数据量非常小,有时全表扫描的效率或许会比创建普通索引效率还要高,因此需要在合适情况下使用。
创建普通索引:
-- 创建表时指定索引列
create table t_test_index(id bigint primary key auto_increment,name varchar(20) unique,sno varchar(20),index(sno)
);-- 修改表中的列为普通索引
create table t_test_index1(id bigint primary key auto_increment,name varchar(20),sno varchar(20)
);
alter table t_test_index1 add index(sno);-- 单独创建索引并指定索引名
create table t_test_index2(id bigint primary key auto_increment,name varchar(20),sno varchar(20)
);create index index_name on t_test_index2(sno);
5.3 唯一索引
- 在一个表上定义一个唯一键
unique
时,自动创建唯一索引。 - 与普通索引类似,但区别在于唯一索引的列不允许有重复值。
创建唯一索引:
-- 创建表时创建唯一索引
create table t_test_uk(id bigint primary key auto_increment,name varchar(20) unique
);-- 创建表时单独指定
create table t_test_uk1(id bigint primary key auto_increment,name varchar(20),unique(name)
);-- 修改表中的列为唯一索引
create table t_test_uk2(id bigint primary key auto_increment,name varchar(20)
);
alter table t_test_uk2 add unique(name);
5.4 全文索引
- 基于文本列(
CHAR
、VARCHAR
、TEXT
)上创建,以加快对这些列中包含的数据查询和DML操作。可以用于全文搜索,仅MyISAM
和InnoDB
支持。
5.5 聚集索引
- 与主键索引是同义词。
- 如果没有为表定义主键,
InnoDB
使用第一个unique
和not null
的列作为聚集索引。 - 如果表中没有主键或者合适的
unique
索引,InnoDB
会为新插入的行生成一个行号并且用6字节的ROW_ID
字段记录,ROW-ID
单调递增,并使用ROW-ID
作为索引。
5.6 非聚集索引
- 聚集索引以外的索引称为非聚集索引或二级索引。
- 非聚集索引中的每一条数据都包含该行的主键值,以及非聚集索引指定的列。
InnoDB
使用这个主键值来搜索聚集索引中的行,这个过程称为回表查询。
详细解释回表查询:
- 回表查询是MySQL中的一种查询方式,主要在使用二级索引(非聚簇索引)时发生。具体过程如下:
- 二级索引查找:首先通过二级索引找到对应的主键值。
- 回表操作:根据主键值回到聚簇索引中查找完整的行数据。
示例
假设有一张表users
,结构如下:
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(100),age INT,INDEX idx_age (age)
);
执行查询:
SELECT * FROM users WHERE age = 25;
- 使用二级索引:先在
idx_age
索引中找到age = 25
的主键值。 - 回表:根据主键值回到聚簇索引中获取完整的行数据。
性能影响
- 优点:二级索引占用空间小,查找速度快。
- 缺点:回表操作增加额外I/O,可能影响性能。
优化方法:
- 覆盖索引:确保查询字段都在索引中,避免回表。
- 索引优化:合理设计索引,减少回表次数。
5.7 索引覆盖
- 当需要查询的列包含在创建的索引列中,可以直接从普通索引返回,这个现象叫做索引覆盖。
举例:
SELECT age FROM users WHERE age = 25;
上述代码会发生索引覆盖,这样的查询方式能够减少内存和磁盘IO,提升查找效率。
6. 查看索引
show index from t_test_index;
7. 删除索引
删除具有自增属性的主键
-- 直接删除含有自增属性的主键索引的列,会报错
alter table t_test_index drop primary key;-- 错误信息 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key-- 先删除自增属性
alter table t_test_index modify id bigint;
删除其他索引
-- 直接删除其他索引
alter table t_test_uk1 drop index name;
-- name为表中索引名称
8. 总结
创建索引的注意事项:
- 索引应该创建在高频查询的列上。
- 索引需要占用额外的存储空间 – 每一个索引都会生成对应的一个索引树。
- 对表进行插入、更新和删除操作的时候,同时也会修改索引,可能会影响性能 – 因为要维护好一个索引树。
- 创建过多或不合理的索引会导致性能下降,需要谨慎选择和规划索引。
相关文章:
深入理解MySQL数据库索引
深入理解MySQL数据库索引 个人主页:顾漂亮 1. 索引简介 1.1 索引是什么? MySQL的索引是一种数据结构,它可以帮助数据库高效地查询、更新数据表中的数据。索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜…...
Spring 中 BeanPostProcessor 的作用和示例
一、BeanPostProcessor 的核心作用 1、作用 BeanPostProcessor 是 Spring Bean 实例级别的扩展接口,在 Bean 初始化前后对实例进行加工或替换。其核心功能包括: 修改 Bean 属性(如动态注入值、调整配置)。生成代理对象…...
图 最 短 路
Diikstra朴素 非负边权单源最短路顶点数最好小于1000少量数据结构知识和一点点的算法基础 算法描述 这个算法我们采用邻接矩阵来存储,有时候输入数据,并不是我们期待的那样,所以需要对数据做一些处理,也就是把图创建起来的过程…...
NA611系列WiFi串口服务器常见问题以及解决办法
NA611系列WiFi串口服务器是一款高性能、高可靠的工业级双频RS485 ⇌ WiFi数据双向透明传输的串口服务器。实现RS485串口数据通过WiFi实现设备联网数据交互,支持 IEEE 802.11 a/b/g/n 标准。WiFi串口服务器在连接、配置和使用过程中可能会遇到多种问题。以下是一些常…...
工程化与框架系列(36)--前端监控告警实践
前端监控告警实践 🔔 引言 前端监控是保障应用质量和用户体验的重要手段。本文将深入探讨前端监控的实现方案,包括性能监控、错误监控、用户行为监控等方面,以及相应的告警机制。 监控系统概述 前端监控系统主要包括以下方面:…...
【深度学习|目标检测】YOLO系列anchor-based原理详解
YOLO之anchor-based 一、关于anchors的设置二、网络如何利用anchor来训练关于register_buffer训练阶段的anchor使用推理阶段的anchor使用 三、训练时的正负样本匹配anchor匹配grid匹配 总结起来其实就是:基于anchor-based的yolo就是基于三个检测头的分支上的grids和…...
vue3+Ts+elementPlus二次封装Table分页表格,表格内展示图片、switch开关、支持
目录 一.项目文件结构 二.实现代码 1.子组件(表格组件) 2.父组件(使用表格) 一.项目文件结构 1.表格组件(子组件)位置 2.使用表格组件的页面文件(父组件)位置 3.演示图片位置 ele…...
【C/C++】文件句柄
什么是文件句柄? 文件句柄(File Handle)是操作系统中的一种抽象概念,它用来表示一个打开的文件或输入/输出设备。 文件句柄是程序与文件之间的桥梁,程序通过文件句柄来访问和操作文件的内容。 1. 文件句柄——作用 文…...
Matlab 基于专家pid控制的时滞系统
1、内容简介 Matlab 185-基于专家pid控制的时滞系统 可以交流、咨询、答疑 2、内容说明 略 在处理时滞系统(Time Delay Systems)时,使用传统的PID控制可能会面临挑战,因为时滞会导致系统的不稳定或性能下降。专家PID控制通过结…...
【高项】信息系统项目管理师(六)项目进度管理【3分】
项目进度管理是为了保证项目按时完成。对项目所需的各个过程进行管理,包括规划进度、定义活动、排列活动顺序、估算活动持续时间、制订项目进度计划和控制进度。小型项目中,定义活动、排列活动顺序、估算活动持续时间以及制订进度模型形成进度计划等过程的联系非常紧密,可以…...
通过MATLAB和Carsim进行联合仿真,利用强化学习实现自动驾驶人机控制权策略的详细步骤和示例代码
以下是一个通过MATLAB和Carsim进行联合仿真,利用强化学习实现自动驾驶人机控制权策略的详细步骤和示例代码: 步骤概述 Carsim配置:对Carsim进行必要的设置,包括车辆模型、道路场景等,并生成S - function接口。MATLAB环境搭建:在MATLAB中配置Carsim的S - function,并创建…...
iOS 模块化架构设计:主流方案与实现详解
随着 iOS 工程规模的扩大,模块化设计成为提升代码可维护性、团队协作效率和开发灵活性的关键。本文将探讨为什么需要模块化,介绍四种主流的模块化架构方案(协议抽象、依赖注入、路由机制和事件总线),并通过代码示例和对…...
PostreSQL指南-内幕探索-学习笔记-01-数据库集簇的逻辑与物理结构
目录 一、环境信息 二、参考内容 三、逻辑结构概念 四、物理结构概念 五、逻辑映射关系 1、数据库与oid映射关系 2、堆表对象与oid映射关系 五、物理映射关系 1、数据库与oid映射关系 2、堆表对象与oid映射关系 六、数据库文件布局 1、表格 2、postmaster.pid文件解…...
java使用(Preference、Properties、XML、JSON)实现处理(读写)配置信息或者用户首选项的方式的代码示例和表格对比
在Java应用程序中,处理应用首选项(preferences)有多种方法,包括使用java.util.prefs.Preferences类、属性文件(如.properties文件)、XML文件和JSON文件。下面是每种方法的详细说明和代码示例,最…...
spring动态代理是在生命周期的哪个阶段实现的
Spring AOP(面向切面编程)的动态代理是在 Bean 生命周期的 初始化后阶段 实现的,具体来说是在 BeanPostProcessor 的 postProcessAfterInitialization() 方法中完成的。下面我们来详细分析 Spring AOP 动态代理的实现位置及其工作原理。 1. S…...
Oracle静默安装方法
Web服务器上面的Linux一般是不会有图形界面的,所有通过图形界面来安装Linux的方式在没有图形界面的Linux上面是行不通的,我们要使用的安装方式叫做Linux的静默安装。即在没有图形界面的Linux上面安装。 1. 下载地址 http://www.oracle.com/technetwork…...
本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】
目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…...
单词翻转(信息学奥赛一本通-1144)
【题目描述】 输入一个句子(一行),将句子中的每一个单词翻转后输出。 【输入】 只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。 【输出】 翻转每一个单词后的字符串,单词之间的空格需与原文一致。 【输入样例】 he…...
Python基础入门掌握(十三)
从基础到进阶,轻松掌握文件读写 目录 文件操作的基本概念 文件的打开与关闭 读取文件内容 写入文件内容 文件操作的高级技巧 总结与建议 文件操作的基本概念 在Python中,文件操作主要涉及以下几个步骤: 打开文件(open…...
【再读】R1-Onevision通过跨模态形式化为复杂多模态推理任务提供了系统性解决方案
R1-Onevision:跨模态形式化驱动的多模态推理技术突破,R1-Onevision通过跨模态形式化、双阶段训练和教育级基准测试,为多模态推理树立了新标杆。其技术创新不仅提升了模型在复杂任务中的表现,更重要的是为行业提供了一种可解释、可迁移的多模态处理范式。随着形式化方法的不断…...
【AWS入门】2025 AWS亚马逊云科技账户注册指南
【AWS入门】2025 AWS亚马逊云科技账户注册指南 A Guide To Register a New account on AWS By JacksonML 0. AWS亚马逊云科技简介 Amazon Web Service(AWS) 即亚马逊云科技,其在全球Cloud Computing(云计算)市场占有最为重要的地位。 AWS连续13年被Gartner评为…...
重生之我在学Vue--第18天 Vue 3 项目功能扩展
重生之我在学Vue–第18天 Vue 3 项目功能扩展 文章目录 重生之我在学Vue--第18天 Vue 3 项目功能扩展前言一、权限管理系统1.1 用户角色体系设计1.2 路由权限控制1.3 组件级权限控制 二、分页与搜索系统2.1 分页类型对比2.2 分页组件实现2.3 搜索功能实现 三、文件上传系统3.1 …...
基于SpringBoot的房地产销售管理系统【附源码】
基于SpringBoot的房地产销售管理系统(源码L文说明文档) 目录 4 系统设计 4.1用户登录功能的详细实现 4.2管理员权限的功能实现 4.2.1客户信息管理功能的详细实现 4.2.2房产管理功能的详细实现 4.2.3预约看房功能的详细实现 4.2.4论…...
数组题型-二分查找-JS
二分查找伪代码 1.定义 target 是在⼀个在左闭右闭的区间⾥,也就是[left, right] let left0;let rightnums.length-1;// 定义target在左闭右闭的区间⾥,[left, right]while(left<right){// 当leftright,区间[left, right]依然有效&#x…...
STL——vector
目录 1 vector介绍 2 vector使用 2.1 vector的定义 2.1.1 无参构造 2.1.2 构造并初始化N个Val 2.1.3 拷贝构造 2.1.4 使用迭代器初始化构造 2.1.5 使用大括号初始化构造 2.2 vector的迭代器 2.2.1 const 迭代器 2.3 vector的空间增长 2.4 vector的增删改查 2.5 ve…...
国内首款载重1吨级无人运输机TP1000首飞成功 2026年投入应急救援
大湾区经济网珠海快讯,据央视新闻报道,3月15日上午,国内首款载重1吨级大型无人运输机TP1000在山东成功首飞。该机由中国民航适航标准完全自主研发,起飞重量3.3吨,满载航程达1000公里,具备智能空投功能&…...
python-leetcode 54.全排列
题目: 给定不含重复数字的数组nums,返回其所有可能的全排列,可以按任意顺序返回答案 回溯法 一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通…...
人工智能实现电脑任务自动化的开源软件
人工智能实现电脑任务自动化的开源软件 hallo大家好,我是星哥,今天给大家介绍一个开源软件,融合了人工智能与机器人流程自动化(AIRPA)的开源软件autoMate! autoMate是什么 autoMate 是一款由开源开发的本地自动化工…...
串口烧录出现频繁回复乱码 频繁回复一个数字且烧录失败 字节混乱
这是因为你的芯片没有处于系统存储区启动一直未进入bootloader 解决办法是检查boot引脚接正确没,要在系统存储器启动...
ens33没有分配到IPV4问题
方法一:手动为 ens33 接口分配 IP 地址 你能够借助 ip 命令手动给 ens33 接口分配 IP 地址。不过这种方式在系统重启之后就会失效。 步骤 查看网络信息 先查看一下当前网络的子网信息,例如网关地址和子网掩码等,你可以通过路由器管理界面或…...
搭建主从服务器
任务需求 客户端通过访问 www.nihao.com 后,能够通过 dns 域名解析,访问到 nginx 服务中由 nfs 共享的首页文件,内容为:Very good, you have successfully set up the system. 各个主机能够实现时间同步,并且都开启防…...
【实测闭坑】LazyGraphRAG利用本地ollama提供Embedding model服务和火山引擎的deepseek API构建本地知识库
LazyGraphRAG 2024年4月,为解决传统RAG在全局性的查询总结任务上表现不佳,微软多部门联合提出Project GraphRAG(大模型驱动的KG);2024年7月,微软正式开源GraphRAG项目,引起极大关注,…...
[Lc14_priority_queue] 最后一块石头重量 | 数据流中的第 K 大元素 | 前K个高频单词 | 数据流的中位数
目录 1.最后一块石头的重量 题解 2.数据流中的第 K 大元素 题解 3.前K个高频单词 题解 代码 ⭕4.数据流的中位数 题解 在C中,使用标准库中的priority_queue,默认情况下它是一个最大堆(即大堆排序),这意味着最…...
Electron使用WebAssembly实现CRC-16 MAXIM校验
Electron使用WebAssembly实现CRC-16 MAXIM校验 将C/C语言代码,经由WebAssembly编译为库函数,可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-16 MAXIM格式校验的方式。 CRC-16 MAXIM校验函数WebAssembly源文件 C语言实…...
案例5_1:单位数码管显示0
文章目录 文章介绍效果图仿真图5_1放置单位数码管 代码5_1.c 文章介绍 效果图 仿真图5_1 复制案例1_2的仿真图,在此基础上修改 注意:栅格大小需要缩小 放置单位数码管 代码5_1.c #include <reg52.h>#define uchar unsigned char #define uint un…...
OpenCV计算摄影学(20)非真实感渲染之增强图像的细节函数detailEnhance()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 此滤波器增强特定图像的细节。 cv::detailEnhance用于增强图像的细节,通过结合空间域和频率域的处理,提升图像中特定细节…...
linux按照nginx
第一步先按照依赖gcc 一键安装上面四个依赖 Nginx的编译安装需要一些依赖库,如gcc、make、zlib、openssl等。可以使用yum命令安装这些依赖: yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 创建目录 mkdir /usr/nginx 切换…...
SpringMVC(八)Knife4j 接口文档
目录 一 基础使用 1 配置pom.xml相关依赖 2 项目配置 3 输入指定路径(http://localhost:8080/doc.html) 二 一些使用方法 1 Tag 2 Operation 3 Schema 4 Parameter 5 可以根据需求来设置 补充:日期的格式化 Knife4j 是基于 Swag…...
Java集成MQTT和Kafka实现稳定、可靠、高性能的物联网消息处理系统
Java集成MQTT和Kafka实现高可用方案 1. 概述 在物联网(IoT)和分布式系统中,消息传递的可靠性和高可用性至关重要。本文将详细介绍如何使用Java集成MQTT和Kafka来构建一个高可用的消息处理系统。 MQTT(消息队列遥测传输)是一种轻量级的发布/订阅协议,适用于资源受限的设备和…...
【操作系统安全】任务6:Linux 系统文件与文件系统安全 学习指南
目录 一、文件系统基础概念 二、查看文件系统信息 2.1 磁盘空间查看 2.2 分区与挂载管理 2.3 文件系统类型操作 三、文件系统权限配置 3.1 基础权限管理 3.2 所有权管理 3.3 特殊权限设置 四、文件操作基础 4.1 文件创建 4.2 文件删除 4.3 文件复制与移动 4.4 文件…...
华为中小型企业项目案例
实验目的(1) 熟悉华为交换机和路由器的应用场景 (2) 掌握华为交换机和路由器的配置方法 实验拓扑实验拓扑如图所示。 华为中小型企业项目案例拓扑图 实验配置市场部和技术部的配置创建VLANLSW1的配置 [LSW1]vlan batch 10 20 [LSW1]q…...
Zabbix安装(保姆级教程)
Zabbix 是一款开源的企业级监控解决方案,能够监控网络的多个参数以及服务器、虚拟机、应用程序、服务、数据库、网站和云的健康状况和完整性。它提供了灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的告警,从而能够快速响应服务器问题。Zabbix 基于存储的数据提供…...
JDBC数据库连接池技术详解——从传统连接方式到高效连接管理
1. 引言 在开发数据库应用时,我们通常需要与数据库建立连接并执行SQL语句。传统的JDBC连接方式虽然简单直接,但在高并发场景下容易带来性能问题,甚至导致系统崩溃。因此,引入数据库连接池(Connection Pool)…...
微服务存在的问题及解决方案
微服务存在的问题及解决方案 1. 存在问题 1.1 接口拖慢 因为一个接口在并发时,正好执行时长又比较长,那么当前这个接口占用过多的 Tomcat 连接,导致其他接口无法即时获取到 Tomcat 连接来完成请求,导致接口拖慢,甚至…...
C语言中的结构体数组
一、什么是结构体数组? 在C语言中,**结构体(struct)**是一种自定义数据类型,它可以将不同类型的数据组合成一个单一的数据结构。结构体数组则是多个结构体元素按顺序存储在内存中的集合。通过结构体数组,可以存储多个相同类型的结构体,每个结构体都拥有自己独立的成员变…...
[GESP 202412 一级 T1] 温度转换
描述 小杨最近学习了开尔文温度、摄氏温度和华氏温度的转换。令符号 KK 表示开尔文温度,符号 CC 表示摄氏温度,符号 FF 表示华氏温度,这三者的转换公式如下: C K - 273.15 F C*1.8 32 现在小杨想编写一个程序计算某一开尔文…...
虚幻基础:GAS
文章目录 Gameplay Tag:项目类:可直接按标签管理游戏中的各种对象。其他:数据表格:gameplaytag primary data asset:项目类:存储游戏中的数据:通常用于配置表蓝图:primary data asse…...
案例:图书管理
掌握图书管理案例的实现,能够使用Spring Boot整合Thymeleaf完成图书管理案例。 1.任务需求 (1)项目使用Spring Boot整合Thymeleaf,项目展示的页面效果全部通过Thymeleaf的模板文件实现。 (2)查询所有图书。…...
Pycharm 社区版安装教程
找到安装包双击安装文件---点击下一步 一般路径是:C:\Rambo\Software\Development 选择完成后就是如下地址: C:\Rambo\Software\Development\PyCharm Community Edition 2024.3.3 点击上述3个位置就可以了----下一步 等待安装就可以了---完成后点击完成…...
RabbitMQ 全面详解(附面试重点)
RabbitMQ 全面详解(附面试重点) 一、RabbitMQ 与其他消息队列对比 特性RabbitMQKafkaRocketMQActiveMQ设计定位企业级消息中间件(传统业务场景)高吞吐分布式流处理平台(日志、大数据)金融级高可靠消息中间…...