【MySQL精通之路】InnoDB(6)-磁盘结构(5)-Redolog
主博客:
【MySQL精通之路】InnoDB(6)-磁盘上的InnoDB结构-CSDN博客
上一篇:
【MySQL精通之路】InnoDB-双写缓冲区-CSDN博客
下一篇:
目录
1.配置Redo Log容量(MySQL 8.0.30或更高版本)
2.配置重做日志容量(MySQL 8.0.30之前)
3.自动恢复日志容量配置
4.重做日志存档
5.性能注意事项
6.禁用重做日志记录
Redo Log重做日志是一种基于磁盘的数据结构,在崩溃恢复期间用于更正由不完整事务写入的数据。
在正常操作过程中,重做日志对SQL语句或低级API调用产生的更改表数据的请求进行编码。
在初始化期间和接受连接之前,意外关闭之前没有完成更新数据文件的操作将自动重播。
有关重做日志在崩溃恢复中的作用的信息,请参阅“InnoDB恢复”。
【MySQL精通之路】InnoDB(18)-备份与恢复-CSDN博客
重做日志在磁盘上由Redo Log文件物理表示。写入Redo Log文件的数据是根据受影响的记录进行编码的,这些数据统称为重做。通过Redo Log文件的数据传输由不断增加的LSN值表示。重做日志数据会随着数据修改的进行而附加,最旧的数据会随着检查点的进行而截断。
与重做日志相关的信息和过程在本节的以下主题下进行了描述:
1.配置Redo Log容量(MySQL 8.0.30或更高版本)
在MySQL 8.0.30中,innodb_redo_log_cability系统变量控制重做日志文件占用的磁盘空间量。
您可以在启动时或运行时使用SET GLOBAL语句在选项文件中设置此变量;
例如,以下语句将重做日志容量设置为8GB:
SET GLOBAL innodb_redo_log_capacity = 8589934592;
当在运行时设置时,配置更改会立即生效,但可能需要一些时间才能完全实现新的限制。
如果Redo Log文件占用的空间小于指定值,则脏页会从缓冲池刷新到表空间数据文件的力度会降低,最终会增加重做日志文件所占用的磁盘空间。
如果Redo Log文件占用的空间超过指定值,脏页会被更积极地刷新,最终会减少重做日志文件所占用的磁盘空间。
如果未定义innodb_do_log_cability,并且既没有定义innodd_log_file_size也没有定义innodab_log_file_in_group,则使用默认的innodab_do_long_cabilition值。
如果没有定义innob_redo_log_cability,如果定义了innodb_log_file_size和/或innodb_og_files_in_group,则Redo Log文件容量计算为(innodb_logo _files_i_group*innodb_log _file_size)。
此计算不会修改未使用的innodb_redo_log_cability设置的值。
Innodb_redo_log_cability_resize服务器状态变量表示所有Redo Log文件的总Redo Log文件容量。
重做日志文件位于数据目录中的#innodb_Redo目录中,除非innodb_log_group_home_dir变量指定了其他目录。
如果定义了innodb_log_group_home_dir,则重做日志文件位于该目录中的#innodb_redo目录中。
有两种类型的重做日志文件,普通和备用。
正在使用的是普通的Redo Log文件。备用Redo Log文件是那些等待使用的文件。InnoDB尝试总共维护32个Redo Log文件,每个文件的大小等于1/32*InnoDB_redo_log_cability;
但是,在修改innodb_redo_logcapacity设置后,文件大小可能会在一段时间内有所不同。
重做日志文件使用#ib_redoN命名约定,其中N是重做日志文件编号。
备用重做日志文件由_tmp后缀表示。
以下示例显示了#innodb_redo目录中的重做日志文件,其中有21个活动Redo Log文件和11个备用Redo Log文件(按顺序编号)。
'#ib_redo582' '#ib_redo590' '#ib_redo598' '#ib_redo606_tmp'
'#ib_redo583' '#ib_redo591' '#ib_redo599' '#ib_redo607_tmp'
'#ib_redo584' '#ib_redo592' '#ib_redo600' '#ib_redo608_tmp'
'#ib_redo585' '#ib_redo593' '#ib_redo601' '#ib_redo609_tmp'
'#ib_redo586' '#ib_redo594' '#ib_redo602' '#ib_redo610_tmp'
'#ib_redo587' '#ib_redo595' '#ib_redo603_tmp' '#ib_redo611_tmp'
'#ib_redo588' '#ib_redo596' '#ib_redo604_tmp' '#ib_redo612_tmp'
'#ib_redo589' '#ib_redo597' '#ib_redo605_tmp' '#ib_redo613_tmp'
每个普通的重做日志文件都与特定范围的LSN值相关联;
例如,以下查询显示上一示例中列出的活动Redo Log文件的START_LSN和END_LSN值:
mysql> SELECT FILE_NAME, START_LSN, END_LSN FROM performance_schema.innodb_redo_log_files;
+----------------------------+--------------+--------------+
| FILE_NAME | START_LSN | END_LSN |
+----------------------------+--------------+--------------+
| ./#innodb_redo/#ib_redo582 | 117654982144 | 117658256896 |
| ./#innodb_redo/#ib_redo583 | 117658256896 | 117661531648 |
| ./#innodb_redo/#ib_redo584 | 117661531648 | 117664806400 |
| ./#innodb_redo/#ib_redo585 | 117664806400 | 117668081152 |
| ./#innodb_redo/#ib_redo586 | 117668081152 | 117671355904 |
| ./#innodb_redo/#ib_redo587 | 117671355904 | 117674630656 |
| ./#innodb_redo/#ib_redo588 | 117674630656 | 117677905408 |
| ./#innodb_redo/#ib_redo589 | 117677905408 | 117681180160 |
| ./#innodb_redo/#ib_redo590 | 117681180160 | 117684454912 |
| ./#innodb_redo/#ib_redo591 | 117684454912 | 117687729664 |
| ./#innodb_redo/#ib_redo592 | 117687729664 | 117691004416 |
| ./#innodb_redo/#ib_redo593 | 117691004416 | 117694279168 |
| ./#innodb_redo/#ib_redo594 | 117694279168 | 117697553920 |
| ./#innodb_redo/#ib_redo595 | 117697553920 | 117700828672 |
| ./#innodb_redo/#ib_redo596 | 117700828672 | 117704103424 |
| ./#innodb_redo/#ib_redo597 | 117704103424 | 117707378176 |
| ./#innodb_redo/#ib_redo598 | 117707378176 | 117710652928 |
| ./#innodb_redo/#ib_redo599 | 117710652928 | 117713927680 |
| ./#innodb_redo/#ib_redo600 | 117713927680 | 117717202432 |
| ./#innodb_redo/#ib_redo601 | 117717202432 | 117720477184 |
| ./#innodb_redo/#ib_redo602 | 117720477184 | 117723751936 |
+----------------------------+--------------+--------------+
当执行检查点时,InnoDB将检查点LSN存储在包含该LSN的文件的头中。
在恢复过程中,将检查所有重做日志文件,并在最新的检查点LSN开始恢复。
提供了几个状态变量,用于监控Redo Log文件和Redo Log文件容量调整操作;
例如,您可以查询Innodb_redo_log_resize_status来查看调整大小操作的状态:
mysql> SHOW STATUS LIKE 'Innodb_redo_log_resize_status';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| Innodb_redo_log_resize_status | OK |
+-------------------------------+-------+
Innodb_redo_log_cability_resize状态变量显示当前Redo Log文件容量限制:
mysql> SHOW STATUS LIKE 'Innodb_redo_log_capacity_resized';+----------------------------------+-----------+
| Variable_name | Value |
+----------------------------------+-----------+
| Innodb_redo_log_capacity_resized | 104857600 |
+----------------------------------+-----------+
其他适用的状态变量包括:
Innodb_redo_log_checkpoint_lsn
Innodb_redo_log_current_lsn
Innodb_redo_log_flushed_to_disk_lsn
Innodb_redo_log_logical_size
Innodb_redo_log_physical_size
Innodb_redo_log_read_only
Innodb_redo_log_uuid
有关更多信息,请参阅状态变量说明。
您可以通过查询Performance Schema库的innodb_redo_log_files表来查看有关活动Redo Log文件的信息。以下查询从表的所有列中检索数据:
SELECT FILE_ID, START_LSN, END_LSN, SIZE_IN_BYTES, IS_FULL, CONSUMER_LEVEL
FROM performance_schema.innodb_redo_log_files;
2.配置重做日志容量(MySQL 8.0.30之前)
在MySQL 8.0.30之前,InnoDB默认在数据目录中创建两个redo日志文件,分别命名为ib_logfile0和ib_logfile 1,并以循环方式写入这些文件。
修改Redo Log文件容量需要更改Redo Log文件的数量或大小,或者同时更改两者。
1.停止MySQL服务器并确保其关闭时没有出现错误。
2.编辑my.cnf以更改重做日志文件配置。要更改重做日志文件的大小,请配置
innodb_log_file_size。要增加重做日志文件的数量,请配置innodb_log_files_in_group。
3.再次启动MySQL服务器。
如果InnoDB检测到InnoDB_log_file_size与重做日志文件大小不同,它会写入一个日志检查点,关闭并删除旧的日志文件,以请求的大小创建新的日志文件并打开新日志文件。
3.自动恢复日志容量配置
当innob_dedicated_server启用时,innodb会自动配置某些innodb参数,包括Redo Log文件容量。
自动配置适用于驻留在MySQL专用服务器上的MySQL实例,MySQL服务器可以使用所有可用的系统资源。
有关更多信息,请参阅“启用专用MySQL服务器的自动配置”。
4.重做日志存档
在备份操作进行过程中,复制Redo Log文件的备份实用程序有时可能无法跟上重做日志生成的步伐,从而导致这些记录被覆盖而丢失重做日志记录。
当MySQL服务器在备份操作过程中有重大活动,并且重做日志文件存储介质的运行速度比备份存储介质快时,最常出现此问题。
MySQL 8.0.17中引入的Redo Log文件归档功能。
通过将重做日志记录顺序写入归档文件以及Redo Log文件来解决此问题。
备份实用程序可以根据需要从存档文件中复制重做日志记录,从而避免潜在的数据丢失。
如果在服务器上配置了重做日志归档,MySQL Enterprise Edition提供的MySQL Enterprise Backup在备份MySQL服务器时会使用重做日志归档功能。
在服务器上启用重做日志存档需要为innodb_redo_log_archive_dirs系统变量设置一个值。该值指定为标记的重做日志存档目录的分号分隔列表。
label:目录对由冒号(:)分隔
例如
mysql> SET GLOBAL innodb_redo_log_archive_dirs='label1:directory_path1[;label2:directory_path2;…]';
标签是存档目录的任意标识符。它可以是任何字符串,但不允许使用冒号(:)。
空标签也是允许的,但在这种情况下仍然需要冒号(:)。
必须指定directory_path。激活重做日志存档或返回错误时,为重做日志存档文件选择的目录必须存在。
路径可以包含冒号(“:”),但不允许使用分号(;)。
在激活重做日志归档之前,必须配置innodb_redo_log_archive_dirs变量。
默认值为NULL,不允许激活重做日志存档。
注意:
指定的存档目录必须满足以下要求。(当激活重做日志归档时,会强制执行这些要求。):1.目录必须存在。目录不是由重做日志存档过程创建的。否则,将返回以下错误:
错误3844(HY000):重做日志存档目录“directory_path1”不存在或不是目录
2.目录不能在全球范围内访问。这是为了防止重做日志数据暴露给系统上未经授权的用户。否则,将返回以下错误:
错误3846(HY000):所有操作系统用户都可以访问重做日志存档目录“directory_path1”
3.目录不能是由
datadir
innob_data_home_dir
innodb_Directories
innob_log_group_home_dirinnodb_tmp_tablespaces_dir
innodd_tmpdir innodb_undo_directory
secure_file_priv
定义的目录,也不能是这些目录的父目录或子目录。
否则,将返回类似于以下内容的错误:
错误3845(HY000):重做日志存档目录“directory_path1”位于服务器目录“datadir”中、之下或之上-“/path/to/data_directory”
当支持重做日志归档的备份实用程序启动备份时,该备份实用程序通过调用innodb_redo_log_archive_start()函数来激活重做日志归档。
如果您没有使用支持重做日志归档的备份实用程序,也可以手动激活重做日志归档,如图所示:
mysql>选择innodb_redo_log_archive_start('label','subdir');
+------------------------------------------+
|innodb_redo_log_archive_start(“标签”)|
+------------------------------------------+
| 0 |
+------------------------------------------+
mysql> DO innodb_redo_log_archive_start('label', 'subdir');
Query OK, 0 rows affected (0.09 sec)
注意:
激活重做日志归档的MySQL会话(使用innodb_redo_log_archive_start())在归档期间必须保持打开状态。同一会话必须停用重做日志存档(使用innodb_redo_log_archive_stop())。
如果会话在显式停用重做日志归档之前终止,则服务器隐式停用重做记录归档并删除重做记录归档文件。
其中
label是innodb_redo_log_archive_dirs定义的标签;
subdir是一个可选参数,用于指定由保存归档文件的标签标识的目录的子目录;它必须是一个简单的目录名(不允许使用斜线(/)、反斜线(\)或冒号(:))。subdir可以为空、null,也可以省略。
只有具有INNODB_REDO_LOG_ARCHIVE权限的用户才能通过调用INNODB_REDO_LOG_ARCHIVE_start()激活重做日志归档
或者使用INNODB_reado_LOG_aArchive_stop()将其停用。
运行备份实用程序的MySQL用户或手动激活和停用重做日志归档的MySQL用户必须具有此权限。
重做日志存档文件路径为directory_identified_by_label/[subdir/]archive.serverUUID.0000001.log,其中directory_identified _by_label是由innodb_redo_log_archive_start()的label参数标识的存档目录。subdir是用于innodb_redo_log_archive_start()的可选参数。
例如,重做日志存档文件的完整路径和名称如下所示:
/directory_path/subdirectory/archive.e71a47dc-61f8-11e9-a3cb-080027154b4d.000001.log
备份实用程序完成复制InnoDB数据文件后,通过调用InnoDB_redo_log_archive_stop()函数来停用重做日志归档。
如果您没有使用支持重做日志归档的备份实用程序,也可以手动停用重做日志归档,如图所示:
mysql> SELECT innodb_redo_log_archive_stop();
+--------------------------------+
| innodb_redo_log_archive_stop() |
+--------------------------------+
| 0 |
+--------------------------------+
mysql> DO innodb_redo_log_archive_stop();
Query OK, 0 rows affected (0.01 sec)
停止功能成功完成后,备份实用程序会从归档文件中查找重做日志数据的相关部分,并将其复制到备份中。
备份实用程序完成复制重做日志数据并且不再需要重做日志归档文件后,将删除归档文件。
在正常情况下,删除存档文件是备份实用程序的责任。
但是,如果重做日志归档操作在调用innodb_redo_log_archive_stop()之前意外退出,MySQL服务器将删除该文件。
5.性能注意事项
由于额外的写入活动,激活重做日志归档通常会带来较小的性能成本。
在Unix和类Unix操作系统上,假设没有持续的高更新率,对性能的影响通常很小。
在Windows上,假设相同,性能影响通常会更高一些。
如果存在持续的高更新率,并且重做日志归档文件与重做日志文件位于同一存储介质上,则由于复杂的写入活动,性能影响可能更为显著。
如果存在持续的高更新率,并且重做日志归档文件位于比重做日志文件慢的存储介质上,则性能会受到任意影响。
写入重做日志归档文件不会妨碍正常的事务日志记录,除非重做日志归档文件存储介质以比重做日志文件存储介质慢得多的速率运行,并且有大量的持久化重做日志块等待写入重做日志档案文件。在这种情况下,事务日志记录速率会降低到可以由重做日志归档文件所在的较慢存储介质管理的水平。
6.禁用重做日志记录
从MySQL 8.0.21开始,您可以使用以下命令禁用重做日志记录
ALTER INSTANCE DISABLE INNODB REDO_LOG
此功能旨在将数据加载到新的MySQL实例中。
禁用重做日志记录可以避免重做日志写入和双写缓冲,从而加快数据加载。
警告
此功能仅用于将数据加载到新的MySQL实例中。不要在生产系统上禁用重做日志记录。允许在禁用重做日志记录时关闭和重新启动服务器,但在禁用重做记录时服务器意外停止可能会导致数据丢失和实例损坏。
在禁用重做日志记录的情况下,在服务器意外停止后尝试重新启动服务器被拒绝,错误如下:
[ERROR] [MY-013598] [InnoDB] Server was killed when Innodb Redo logging was disabled. Data files could be corrupt. You can try to restart the database with innodb_force_recovery=6
在这种情况下,初始化一个新的MySQL实例,然后再次启动数据加载过程。
启用和禁用重做日志记录需要INNODB_REDO_LOG_ENABLE权限。
Innodb_redo_log_enabled状态变量允许监视重做日志记录状态。
在禁用重做日志记录时,不允许克隆操作和重做日志存档,反之亦然。
ALTER INSTANCE [ ENABLE | DISABLE ] INNODB REDO_LOG操作
需要一个独占备份元数据锁,这将阻止其他ALTER INSTANCE操作同时执行。
其他ALTER INSTANCE操作必须等待锁释放后才能执行。
以下过程演示了如何在将数据加载到新MySQL实例时禁用重做日志记录。
1.在新的MySQL实例上,将INNODB_REDO_LOG_ENABLE权限授予负责禁用重做日志记录的用户帐户。
mysql> GRANT INNODB_REDO_LOG_ENABLE ON *.* to 'data_load_admin';
2.作为data_load_admin用户,禁用重做日志记录:
mysql> ALTER INSTANCE DISABLE INNODB REDO_LOG;
3.检查Innodb_redo_log_enabled状态变量以确保重做日志记录被禁用。
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Innodb_redo_log_enabled | OFF |
+-------------------------+-------+
4.运行数据加载操作。
5.作为data_load_admin用户,在数据加载操作完成后启用重做日志记录:
mysql>ALTER INSTANCE ENABLE INNODB REDO_LOG;
6.检查Innodb_redo_log_enabled状态变量以确保已启用重做日志记录。
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Innodb_redo_log_enabled | ON |
+-------------------------+-------+
扩展知识:
重做日志配置
优化InnoDB重做日志记录
重做日志加密
相关文章:
【MySQL精通之路】InnoDB(6)-磁盘结构(5)-Redolog
主博客: 【MySQL精通之路】InnoDB(6)-磁盘上的InnoDB结构-CSDN博客 上一篇: 【MySQL精通之路】InnoDB-双写缓冲区-CSDN博客 下一篇: 目录 1.配置Redo Log容量(MySQL 8.0.30或更高版本) 2.配置重做日志容量(MySQL…...
【探索自然语言处理:构建一个简单的文本分类器】
文章目录 前言文本预处理特征提取模型训练文本分类结论 前言 在信息时代,文本数据无处不在,从社交媒体帖子到客户反馈,文本是沟通和信息交流的主要媒介。自然语言处理(NLP)是人工智能的一个分支,它使计算机…...

概率论统计——大数定律
大数定律 弱大数定律(辛钦大数定律) 利用切比雪夫不等式,证明弱大数定律 应用 伯努利大数定理,(辛钦大数定理的推论) 证明伯努利大数定理 注意:这里将二项分布转化成0,1分布来表示,…...
vscode终端命令行前面出现两个conda环境名的问题决解方法
已经安装了conda,打开vscode的terminal时,命令行前面有两个虚拟环境名。 进入vscode的setting 找到Python->Python:Default Interpreter Path,把这个值复位,就可以解决。 如果不想前面带(base),可以运行 conda co…...

“AI黏土人”一夜爆火,图像生成类应用应该如何长期留住用户?
文章目录 最近大火的“AI黏土人”,一股浓浓的《小羊肖恩》风。 凭借这这种搞怪的风格,“AI黏土人”等图像生成类应用凭借其创新技术和市场需求迅速崛起并获得巨大关注。然而,要保持用户黏性并确保长期发展,这些应用需要采取一系列…...
【MySQL精通之路】SQL优化(1)-查询优化(12)-块嵌套循环和批处理Key访问联接
在MySQL中,可以使用批处理Key访问(BKA)联接算法,该算法使用对联接表的索引访问和联接缓冲区。 BKA算法支持内联接、外联接和半联接操作,包括嵌套的外部联接。 BKA的优点包括由于更高效的表扫描而提高了联接性能。 此…...

SQL使用函数给多个分表添加同一字段
数据库中分表时,往往需要向多个分表中添加同一个字段,可以定义一个函数,每次调用这个函数向多个份表中添加同意字段。 1、创建函数示例: 在PostgreSQL中创建一个简单的函数 以下是一个在PostgreSQL中创建函数的简单示例&#x…...

OpenAI 再次刷新认知边界:GPT-4 颠覆语音助手市场,流畅度直逼真人互动?
前言 近日,美国人工智能研究公司 OpenAI 发布了其最新旗舰模型 GPT-4o,这一革命性的进展不仅标志着人工智能领域的新突破,更预示着即将步入一个全新的交互时代?GPT-4o 的发布,对于我们来说,意味着人工智能…...

UE5 使用外置摄像头进行拍照并保存到本地
连接外置摄像头功能:https://docs.unrealengine.com/4.27/zh-CN/WorkingWithMedia/IntegratingMedia/MediaFramework/HowTo/UsingWebCams/ 核心功能:UE4 相机拍照功能(图片保存)_ue 移动端保存图片-CSDN博客 思路是: …...

【C++】从零开始map与set的封装
送给大家一句话: 今日的事情,尽心、尽意、尽力去做了,无论成绩如何,都应该高高兴兴地上床恬睡。 – 三毛 《亲爱的三毛》 🌃🌃🌃🌃🌃🌃🌃&#x…...
Python可以声明并赋值一个hash类型变量吗?
在Python中,不能直接声明一个变量为hash类型,因为Python是一种动态类型语言,不需要(也不能)在声明变量时指定其类型。变量的类型是根据赋给它的值自动推断的。 将一个哈希值(即一个整数)赋值给…...

苗情灾情监控系统—提高农业生产效率
TH-MQ2苗情灾情监控系统是一种用于监测农作物生长状况和灾情的设备,通过实时监测和数据分析,帮助农民及时了解作物生长情况,采取相应的管理措施,提高农业生产效率和降低生产成本。 该系统通常由多种传感器、摄像头、数据传输模块等…...
wpf自定义按钮样式
在WPF中,自定义按钮样式可以通过创建一个ControlTemplate来实现。以下是一个简单的自定义按钮样式的例子: 首先,在你的WPF项目资源字典中定义按钮的ControlTemplate。 <Window.Resources><ControlTemplate x:Key"CustomButto…...

Meme币总市值突破630亿美元 以太坊ETF获批意味着代币化资产“完全安全”
近日,数字货币市场再次掀起轩然大波。一方面,Meme币总市值突破了630亿美元,令人瞠目结舌;另一方面,以太坊ETF的获批也引发了市场的广泛关注,被视为代币化资产的“完全安全”标志。 Meme币总市值飙升 Meme币…...

MySQL数据库语法(二)
一、数据库的创建 创建数据库CRATE DATABASE语法:CREATE DATABASE [IF NOT EXISTS]数据库名;功能:用给定的名字创建一个数据库如果数据库已经存在,发生一个错误。查看创建数据库:SHOW CREATE DATABASE <数据库名>ÿ…...

Linux makefile
Linux makefile 用makefile去自动编译和删除静态库和动态库 在实际开发中,项目的源代码文件比较多,按类型、功能、模块分别存放在不同的目录和文件中,哪些文件需要先编译,那些文件后编译,那些文件需要重新编译…...
信息安全基础知识
信息安全基础知识 安全策略表达模型是一种对安全需求与安全策略的抽象概念表达,一般分为自主访问控制模型(HRU)和强制访问控制模型(BLP、Biba)IDS基本原理是通过分析网络行为(访问方式、访问量、与历史访问…...

【数据结构】链式二叉树(超详细)
文章目录 前言二叉树的链式结构二叉树的遍历方式二叉树的深度优先遍历前序遍历(先根遍历)中序遍历(中根遍历)后序遍历(后根遍历) 二叉树的广度优先遍历层序遍历 二叉树链式结构接口实现二叉树结点个数二叉树叶子结点个数二叉树的深度(高度)二叉树第k层结…...
排序题目:最小绝对差
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:最小绝对差 出处:1200. 最小绝对差 难度 2 级 题目描述 要求 给定整数数组 arr \texttt{arr} arr,其中每个元素都不相同&…...

沃飞携AE200真机亮相澳门,全方位赋能城市低空出行
5月22日-25日,第四届BEYOND国际科技创新博览会(BEYOND Expo 2024)在澳门盛大举行。吉利沃飞长空携旗下全自研产品AE200真机亮相,吸引了现场众多领导嘉宾以及媒体、观众的关注。 作为亚洲顶尖的年度科技盛会,本届BEYOND…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...
41道Django高频题整理(附答案背诵版)
解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...