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

MySQL InnoDB 中的数据页

文章目录

    • 1. 数据库的存储结构概述
      • 1.1 表空间(Tablespace)
      • 1.2 段(Segment)
      • 1.3 区(Extent)
      • 1.4 页(Page)
    • 2. InnoDB 数据页的深入解析
      • 2.1 数据页的物理结构
      • 2.2 数据页中的行存储
      • 2.3 数据页满时的分裂与合并
      • 2.4 大字段(LOB)的存储机制
      • 2.5 页分裂与合并的影响
    • 3. B+ Tree 查询逻辑的实现
      • 3.1 B+ Tree 的结构特性
      • 3.2 数据页在 B+ Tree 查询中的角色
      • 3.3 查询逻辑详解
      • 3.4 页缓存(Buffer Pool)的作用
    • 4. 最佳实践
      • 4.1 优化数据页
      • 4.2 从数据页角度优化查询
    • 5. 总结


1. 数据库的存储结构概述

在 MySQL 的 InnoDB 引擎中,记录是按照行来存储的,但是数据库的读取并不以行为单位,否则一次读取(也就是一次I/O操作)只能处 理一行数据,效率会非常低。因此在数据库中,不论读一行,还是读多行,都是将这些行所在的⻚进行加 载。也就是说,数据库管理存储空间的基本单位是⻚(Page)。

一个⻚中可以存储多个行记录(Row),同时在数据库中,还存在着区(Extent)、段(Segment)和表空 间(Tablespace)。行、⻚、区、段、表空间的关系如下图所示:

aa

从图中你能看到一个表空间包括了一个或多个段,一个段包括了一个或多个区,一个区包括了多个⻚,而一 个⻚中可以有多行记录。以下将详细解析这些存储单元的定义、关系以及作用。


1.1 表空间(Tablespace)

定义

表空间是 InnoDB 存储逻辑的最高层次单位,可以视为存储数据的容器。每个表空间由多个段、区和页组成。它将数据的物理存储与逻辑组织分离,便于管理和扩展。

表空间类型

  1. 系统表空间(System Tablespace)

    • 默认的共享表空间,包含数据字典、Undo 日志等核心信息。
    • 对所有表共享,位于 ibdata1 文件中。
  2. 独立表空间(File-Per-Table Tablespace)

    • 为每张表单独创建的表空间。
    • 文件扩展名为 .ibd,更容易进行备份和迁移。
  3. 临时表空间(Temporary Tablespace)

    • 用于存储临时表和内部操作。
    • 随服务重启自动清空。

与下层结构的关系

  • 表空间是段的集合。
    每个表或索引在表空间中分配一个或多个段。
  • 段通过区进行管理。
    每个段可包含多个区。
  • 区由固定数量的页组成。
    页是表空间中的实际数据存储单元。

表空间的扩展机制

  1. 自动扩展
    默认配置下,InnoDB 会动态调整表空间大小。
  2. 手动配置
    可通过 innodb_data_file_path 参数定义系统表空间文件的大小和增长策略。

1.2 段(Segment)

定义

段是表空间中的逻辑存储单元,用于组织表的数据和索引。每个表和索引都有独立的段。

段的类型

  1. 数据段(Data Segment)
    • 用于存储表中的数据。
  2. 索引段(Index Segment)
    • 用于存储 B+ Tree 索引。
  3. 回滚段(Rollback Segment)
    • 用于记录事务的 Undo 信息。

段的扩展策略

段通过分配新的区来扩展。每次扩展区的大小可能翻倍,以减少频繁分配的开销。

段与区的关系

  1. 一个段包含多个区。
  2. 一个区归属于唯一的段。

1.3 区(Extent)

定义

区是 InnoDB 分配数据存储的中间层,由一组连续的页组成。每个区的大小为 1MB,即包含 64 个 16KB 的页。

区分配机制

  1. 初始分配
    • 数据库创建时分配的区通常位于系统表空间的前部。
  2. 按需分配
    • 当段的现有区无法满足存储需求时,InnoDB 会分配新的区。

与上下游的关系

  • 区是段的一部分。
    每个区只属于一个段,数据逻辑上由段管理。
  • 区由页组成。
    页是区中的最小单位,存储具体数据行。

1.4 页(Page)

定义

页是 InnoDB 中的最小存储单元,每页默认大小为 16KB。数据最终存储在页中。

页的种类

  1. 数据页(Data Page)
    • 存储实际的行数据。
  2. 索引页(Index Page)
    • 用于存储索引条目。
  3. Undo 页(Undo Page)
    • 记录事务回滚所需的历史数据。
  4. 系统页(System Page)
    • 包含系统元信息。
  5. 事务页(Transaction Page)
    • 用于记录事务状态信息。

与区的关系

  • 每个区包含 64 个页。
  • 页是区的组成部分,但同时直接存储数据或索引。

2. InnoDB 数据页的深入解析


2.1 数据页的物理结构

page

数据页的组成部分

名称占用大小说明
File Header38字节文件头,描述页的信息
Page Header56字节页头,记录页的元信息,如页号和上级索引指针。
Infimum + Supremum26字节最小和最大记录,这是两个虚拟的行记录
User Records不确定用户记录,存储行记录内容
Free Space不确定空闲空间,页中还没有被使用的空间
Page Directory不确定页目录,存储用户记录的位置
File Trailer8字节文件尾,校验页是否完整

2.2 数据页中的行存储

数据页的核心功能是存储表中的行数据。在 InnoDB 中,行的存储布局经过精心设计,以优化存储空间和检索效率。

行记录格式

InnoDB 支持两种行存储格式:CompactRedundant

  • Compact 格式(默认)

    • 数据更紧凑,节省存储空间。
    • 仅存储必要的列值和指针信息。
    • 行数据前包含一个固定长度的变长字段偏移数组,用于快速解析列值的起始位置。
  • Redundant 格式

    • 早期版本的存储格式。
    • 每列有额外的开销,用于存储列长度和指针信息。

行记录的结构(Compact 格式)

每条行记录由以下部分组成:

  1. 记录头信息(Record Header)

    • 存储元信息,例如记录的长度、下一条记录的指针等。
  2. 隐藏列

    • DB_ROW_ID:系统生成的唯一行标识(如果表未定义主键)。
    • DB_TRX_ID:最后修改该行的事务 ID。
    • DB_ROLL_PTR:指向 Undo 日志的回滚指针。
  3. 用户数据列

    • 存储表中定义的实际列值。

行存储对比:Compact 与 Redundant

特性CompactRedundant
数据占用空间更少较多
列值解析效率较低
使用场景默认(推荐使用)兼容旧版本表

2.3 数据页满时的分裂与合并

数据页有固定的大小(通常为 16KB)。当页中的行数据达到存储极限时,InnoDB 会触发页分裂机制,将数据分散到新的页中。这一机制与 B+ Tree 的结构密切相关。

页分裂的触发条件

  • 主键插入顺序:当新插入的记录超过页的容量时,触发页分裂。
  • 非主键索引:对索引页的插入可能导致分裂,尤其是当索引值分布不均时。

页分裂的过程

  1. 新页分配:从当前段中分配一个空闲页,用作分裂后的目标页。
  2. 数据迁移:将当前页中约一半的数据迁移至新页。
  3. 父节点更新:更新上层索引页中的指针,记录新页位置。

页合并

当页中的数据量减少到一定程度(例如小于 50%)时,InnoDB 会尝试合并当前页与相邻页,以减少存储碎片并优化查询效率。


2.4 大字段(LOB)的存储机制

当列的数据长度超过数据页的存储容量时,InnoDB 会将其存储为大字段(LOB,Large Object)。

大字段的存储策略

  • INLINE 模式
    • 小型大字段直接存储在数据页中,避免额外的 I/O。
  • OFF-PAGE 模式
    • 超过指定大小的大字段,存储在单独的页中,并通过指针与主记录关联。

2.5 页分裂与合并的影响

查询效率的影响

  • 页分裂会导致树的深度增加,从而增加查询路径。
  • 页合并会减少树的深度,但在高并发写入时可能引发锁争用。

存储碎片的影响

频繁的分裂和合并可能导致存储碎片,从而降低存储利用率和检索性能。定期优化表(OPTIMIZE TABLE)可以缓解这一问题。


3. B+ Tree 查询逻辑的实现

在 MySQL InnoDB 中,索引的数据结构是基于 B+ Tree 实现的。B+ Tree 将数据分布在叶子节点上,通过多层索引加速查询。在这个过程中,数据页(Page)扮演着关键角色。以下将从 B+ Tree 的结构、查询逻辑、以及与数据页的关联逐步剖析。


3.1 B+ Tree 的结构特性

定义与特点

  1. 树结构

    • B+ Tree 是一种平衡的多叉树,每个节点可以有多个子节点。
    • 根节点到叶子节点的路径长度相同。
  2. 节点分布

    • 非叶子节点存储索引键值和指向子节点的指针。
    • 叶子节点存储实际数据(或指向数据的指针)。
  3. 顺序访问

    • 所有叶子节点通过链表连接,支持范围查询和排序操作。
  4. 分裂与合并

    • 节点满时分裂;节点数据过少时合并。

B+ Tree 的优势

  • 高扇出率:节点中可以存储多个索引键,树的深度较小。
  • 磁盘友好:每次 I/O 操作加载一个完整的页,减少磁盘访问次数。
  • 有序性:天然支持范围查询和排序。

B+ Tree的结构图

tree

B+树记录检索流程

在一棵B+树中,每个节点都是一个⻚,每次新建节点的时候,就会申请一个⻚空间。同一层上的节点之 间,通过⻚的结构构成一个双向的链表(⻚文件头中的两个指针字段)。非叶子节点,包括了多个索引行, 每个索引行里存储索引键和指向下一层⻚面的⻚面指针。最后是叶子节点,它存储了关键字和行记录,在节 点内部(也就是⻚结构的内部)记录之间是一个单向的链表,但是对记录进行查找,则可以通过⻚目录采用 二分查找的方式来进行。

  1. 首先是从B+树的根开始,逐层检索,直到找到叶子节点,也就是找到对应的数据⻚为止

  2. 将数据⻚加载到内存中,⻚目录中的槽(slot)采用二分查找的方式先找到一个粗略的记录分组

  3. 然后再在分组中通过链表遍历的方式查找记录。


3.2 数据页在 B+ Tree 查询中的角色

B+ Tree 的每个节点对应于一个 页(Page),根据节点的功能不同,可分为以下几类:

  1. 根页(Root Page)

    • 位于树的最顶部,保存全局索引范围的入口点。
    • 查询从根页开始,逐层向下遍历。
  2. 非叶子页(Non-Leaf Page)

    • 存储子节点的索引范围和指针,用于指导查询方向。
  3. 叶子页(Leaf Page)

    • 存储实际数据或指向数据的指针。
    • 所有叶子页通过链表相连,支持顺序扫描。

页与索引条目的关系

  • 每个非叶子页中的索引条目包含一个键值范围和指向下层页的指针。
  • 叶子页的条目记录主键值与行数据的位置(或直接存储行数据)。

3.3 查询逻辑详解

查询路径示意图

假设有如下 B+ Tree 索引树,表示一张表的主键索引:

在这里插入图片描述

查询主键值 60 的流程如下:

  1. 从根页开始

    • 比较查询值 60 和根页索引值 50,判断其位于右子树中。
    • 跳转到右子节点页(Index Page (75))。
  2. 访问非叶子页

    • 在右子节点页中,60 小于 75,定位到左子节点(叶子页)。
  3. 访问叶子页

    • 在叶子页中,扫描主键值,找到匹配的记录。

通过页目录加速定位

InnoDB 数据页中的**页目录(Page Directory)**可以进一步优化叶子页内的查询效率。页目录将数据按偏移量分段,允许通过二分查找快速定位具体行数据。

主键索引与辅助索引查询

  1. 主键索引查询

    • 主键索引是聚簇索引(Clustered Index),叶子节点直接存储行数据。
    • 查询时路径:根页 -> 非叶子页 -> 叶子页 -> 数据行
  2. 辅助索引查询

    • 辅助索引的叶子节点存储主键值,而非行数据。
    • 查询时路径:
      • 第一步:通过辅助索引定位主键值。
      • 第二步:回到主键索引查找实际数据(称为回表)。

3.4 页缓存(Buffer Pool)的作用

在查询过程中,InnoDB 使用**缓冲池(Buffer Pool)**将频繁访问的页保存在内存中,减少磁盘 I/O。

缓冲池的工作机制

  1. 缓存读取
    • 查询页时,先从缓冲池中查找;如果页不存在,则从磁盘加载到缓冲池。
  2. 缓存替换
    • 使用 LRU(最近最少使用)算法管理缓冲池中的页。

性能优化建议

  • 增加 innodb_buffer_pool_size 参数以适配更大的缓冲池。
  • 通过 SHOW ENGINE INNODB STATUS 分析缓冲池的命中率。

4. 最佳实践

在深入理解了 InnoDB 的存储结构及其在查询、插入中的表现后,可以总结以下关键点和最佳实践,这些建议可以帮助开发者优化数据库设计,提高性能。


4.1 优化数据页

1. 主键设计

  • 使用自增整数主键,避免主键长度过长。
  • 避免使用随机值(如 UUID)作为主键,减少页分裂几率。

2. 合理选择索引

  • 为高频查询字段添加索引,但要避免过多索引增加写入开销。
  • 使用覆盖索引优化性能,减少不必要的回表。
  • 定期检查和重建索引,清理碎片。

3. 数据分布管理

  • 控制插入顺序,尽量保证数据的逻辑顺序与物理存储顺序一致。
  • 定期执行 OPTIMIZE TABLE,减少存储碎片,提高页利用率。

4. 参数调优

  • 调整 innodb_buffer_pool_size,尽可能提高缓冲池命中率,减少磁盘 I/O。
  • 根据业务场景调整 innodb_page_size,为大数据场景选择 32KB 页,为小型数据选择 16KB 页。
  • 使用 SHOW ENGINE INNODB STATUS 和性能分析工具(如 Percona Toolkit)监控表和页的使用情况。

4.2 从数据页角度优化查询

1. 充分利用缓冲池

  • 缓冲池作为数据页的内存缓存,命中率直接影响性能。
  • 调整缓冲池大小时,应确保其占用内存不超过服务器物理内存的 75%,避免系统交换空间(swap)的使用。

2. 减少页分裂与回表操作

  • 保证主键连续性和顺序性,减少页分裂次数。
  • 对经常查询的字段设计覆盖索引,避免回表操作。

3. 提前规划分区

  • 对存储需求巨大的表,提前设计分区表。
  • 结合分区键和索引优化,减少不必要的全表扫描。

5. 总结

  • 理解数据页:数据页是 InnoDB 存储的基础,设计优化时需关注其分裂、合并及数据分布。
  • 掌握存储结构:表空间、段、区、页的管理方式决定了数据存储的灵活性和性能表现。
  • 优化索引使用:根据查询需求合理设计索引,减少不必要的回表操作。
  • 配置调优:结合业务场景调整页大小、缓冲池大小等参数,提升查询性能。

关注我

相关文章:

MySQL InnoDB 中的数据页

文章目录 1. 数据库的存储结构概述1.1 表空间(Tablespace)1.2 段(Segment)1.3 区(Extent)1.4 页(Page) 2. InnoDB 数据页的深入解析2.1 数据页的物理结构2.2 数据页中的行存储2.3 数…...

React Fiber

React Fiber 是 React 16 引入的全新重写的协调(Reconciliation)算法的实现,旨在改善 React 的更新机制和性能,尤其是在复杂应用和大量更新的场景下。它使得 React 更加灵活、可调度,能够实现优先级控制和中断更新等特…...

hive 小文件分析

1、获取fsimage文件: hdfs dfsadmin -fetchImage /data/xy/ 2、从二进制文件解析: hdfs oiv -i /data/xy/fsimage_0000000019891608958 -t /data/xy/tmpdir -o /data/xy/out -p Delimited -delimiter “,” 3、创建hive表 create database if not exists…...

大模型运用-Prompt Engineering(提示工程)

什么是提示工程 提示工程 提示工程也叫指令工程,涉及到如何设计、优化和管理这些Prompt,以确保AI模型能够准确、高效地执行用户的指令,如:讲个笑话、java写个排序算法等 使用目的 1.获得具体问题的具体结果。(如&…...

Linux(网络协议和管理)

后面也会持续更新,学到新东西会在其中补充。 建议按顺序食用,欢迎批评或者交流! 缺什么东西欢迎评论!我都会及时修改的! 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…...

前端项目打包部署

打包和部署前端项目是将开发环境中的代码转化为生产环境可直接运行的静态文件,并将其部署到服务器上的过程。 # 项目打包 pnpm run build# 上传文件至远程服务器 将本地打包生成的 dist 目录下的所有文件拷贝至服务器的 /usr/share/nginx/html 目录。# nginx.cofig…...

Linux驱动开发(12):中断子系统–按键中断实验

本章我们以按键为例讲解在驱动程序中如何使用中断, 在学习本章之前建议先回顾一下关于中断相关的裸机部分相关章节, 这里主要介绍在驱动中如何使用中断,对于中断的概念及GIC中断控制器相关内容不再进行讲解。 本章配套源码和设备树插件位于“…...

C语言(函数指针与指针函数)

函数指针 定义:函数指针本质上是指针,它是函数的指针(定义了一个指针变量,变量中存储了函数的地 址)。函数都有一个入口地址,所谓指向函数的指针,就是指向函数的入口地址。这里函数名就代 表入…...

中国计算机学会计算机视觉专委会携手合合信息举办企业交流活动,为AI安全治理打开“新思路”

近期,《咬文嚼字》杂志发布了2024年度十大流行语,“智能向善”位列其中,过去一年时间里,深度伪造、AI诈骗等话题屡次登上热搜,AI技术“野蛮生长”引发公众担忧。今年9月,全国网络安全标准化技术委员会发布了…...

MacOs 日常故障排除troubleshooting

1. 关闭开机自启动 app X macOs 15.1 System settings -> General -> Login Items & Extensions->Open at Login -> Select app X and click -...

ArcGIS字符串补零与去零

我们有时候需要 对属性表中字符串的补零与去零操作 我们下面直接视频教学 下面看视频教学 ArcGIS字符串去零与补零 推荐学习 ArcGIS全系列实战视频教程——9个单一课程组合 ArcGIS10.X入门实战视频教程(GIS思维) ArcGIS之模型构建器(Mod…...

【FLASH、SRAM和DRAM、CISC和RISC、冯诺依曼和哈佛】单片机内存结构的了解

【FLASH、SRAM和DRAM、CISC和RISC、冯诺依曼和哈佛】单片机内存结构的了解 一、单片机概念 单片机:Single-Chip Microcomputer,单片微型计算机,是一种集成电路芯片 1.1RAM里的SRAM和DRAM SRAM(Static Random Access Memory&…...

ionic capacitor JSValueEncodingContainer报错

try to clean the build folder. exit Xcode. upgrade your capacitor core libraries update cocoapods to 1.13.0 do “pod install --repo-udpdate” after that: ionic build --prodnpx cap updatenpx cap syncnpx cap open ios capacitor ios最低版本要求13 [Bug]:…...

pdf merge

在 Ubuntu 22.04 上,你可以使用以下命令行工具来合并多个 PDF 文件: 1. pdftk pdftk 是一个强大的 PDF 工具,支持合并、拆分和其他操作。安装和使用方法如下: sudo apt install pdftk pdftk file1.pdf file2.pdf cat output me…...

【Trouble Shooting】Oracle ADG hung,出现ORA-04021

异常问题: 突然收到告警,ADG实例状态异常。 环境: 版本:Oracle 11.2.0.4.201020 状态:Active Dataguard 问题: 查看Oracle实例alert日志,发现有异常报错: Thu Dec 12 22:15:23 …...

奇怪的知识又增加了:ESP32下的Lisp编程=>ULisp--Lisp for microcontrollers

ESP32下有MicroPython,那么我就在想,有Lisp语言支持吗?答案是果然有!有ULisp,专门为MCU设计的Lisp! 网址:uLisp - Lisp for microcontrollers 介绍:用于微控制器的 Lisp 适用于 Ar…...

什么是CRM系统?CRM系统的功能、操作流程、生命周期

CRM系统作为企业管理和维护客户关系的重要工具,在商业活动中扮演着越来越重要的角色。今天,就让我们一起揭开它的神秘面纱,看看这个“幕后英雄”到底是怎么工作的。 什么是CRM系统? 首先,我们要了解什么是CRM。简单来…...

[每日一练]转换日期格式

#该题目来源于力扣: 1853. 转换日期格式 - 力扣(LeetCode) 题目要求: 表: Days------------------- | Column Name | Type | ------------------- | day | date | ------------------- day 是这个表的主键。给定一个Da…...

LSM Tree 底层设计理念

场景:设计一个海量读写的的kv数据库,优先保证写入速度,但是读取速度也不能很慢 因为海量数据存储,不能使用内存,得存到文件里。 Q:对已经落盘的文件,怎么根据key修改value A:读取文件…...

面向对象设计规则和各类设计模式

面向对象设计(Object-Oriented Design, OOD)是一种软件设计方法论,它使用对象、类、继承、封装、多态等概念来组织代码。面向对象设计的核心目标是提高软件的可维护性、可扩展性和复用性。在面向对象设计中,遵循一定的设计原则和模…...

Artec Leo3D扫描仪在重型机械设备定制中的应用【沪敖3D】

挑战:一家加拿大制造商需要有效的方法,为富于变化且难度较高的逆向工程,快速、安全、准确地完成重型机械几何采集。 解决方案:Artec Leo, Artec Studio, Geomagic for SOLIDWORKS 效果:Artec Leo三维扫描代替过去的手动…...

Linux下socket广播通讯的实现

概念大家都很清楚,不赘述。 广播必然用UDP这套东西。 setsockopt() 函数及其在广播中的应用: 在 C 网络编程中,setsockopt() 函数用于设置套接字选项,这些选项可以控制套接字的各种行为。对于广播通信,我们特别关心…...

Tiptap,: 富文本编辑器入门与案例分析

Tiptap 是一个现代的富文本编辑器,基于 ProseMirror 打造,旨在提供一个灵活且功能强大的文本编辑解决方案。它具有开箱即用的能力,同时也允许开发者根据业务需求进行高度定制化扩展。与传统的富文本编辑器相比,Tiptap 提供了更精细…...

数智读书笔记系列002 埃隆·马斯克传

书名:埃隆马斯克传 作者:【美】沃尔特艾萨克森 译者:孙思远;刘家琦 出版社:中信出版集团 出版时间:2023年9月 ISBN:9787521758399 这本书是关于特斯拉CEO埃隆马斯克的传记,作者…...

linux环境一句话后门

原文地址:linux环境一句话后门 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 注意:本文章只做网络安全技术交流使用,切莫用来做坏事。 也可以叫一句话木马,一个意思。 设置监听 回连端口可以…...

django——admin后台管理1

一、admin后台管理 访问url进入: http://127.0.0.1:8000/admin ​ 创建超级管理用户 终端输入以下命令: python manage.py createsuperuser (py36_pingping) E:\django学习\day03-django入门\demo>python manage.py createsuperuser Username: mo…...

QT图形/视图架构详解(一)

场景、视图与图形项 图形/视图架构主要由 3 个部分组成,即场景、视图和图形项,三者的关系如图所示: 场景、视图和图形项的关系 场景(QGraphicsScene 类) 场景不是界面组件,它是不可见的。场景是一个抽象的…...

h5 区分ios和安卓

h5 区分ios和安卓 const systemInfo uni.getSystemInfoSync(); if (systemInfo.platform "ios" || systemInfo.platform "android") {}h5 区分微信小程序与app用条件编译条件编译 js #ifdef MP-WEIXIN #endif...

爬虫基础知识点

最近看了看爬虫相关知识点,做了记录,具体代码放到了仓库,本文仅学习使用,如有违规请联系博主删除。 这个流程图是我使用在线AI工具infography生成的,这个网站可以根据url或者文本等数据自动生成流程图,挺…...

golang 实现简单redis服务3(实现多类型数据结构支持)

redis各种数据类型的工作原理stringlisthashset(集合)zset(有序集合)(思考1):为什么redis使用跳跃表而不是红黑树?(思考2): 都可以范围取值,为什么mysql使用b树不用跳跃表,为什么redis使用跳跃表不用b树? 之前的redis只实现了基本数据string类型的操作,那能不能实现多种数据类…...

【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.Verilog核心程序 4.开发板使用说明和如何移植不同的开发板 5.完整算法代码文件获得 1.算法仿真效果 本文是之前写的文章: 《基于FPGA的4ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR》 的…...

配置mysqld(读取选项内容,基本配置),数据目录(配置的必要性,目录下的内容,具体文件介绍,修改配置)

目录 配置mysqld 读取选项内容 介绍 启动脚本 基本配置 内容 端口号 数据目录的路径 配置的必要性 配置路径 mysql数据目录 具体文件 修改配置时 权限问题 配置mysqld 读取选项内容 介绍 会从[mysqld] / [server] 节点中读取选项内容 优先读取[server] 虽然服务…...

【roadMap】我转行软件测试的经历

软件测试这行咋样? 如果你简单了解过「软件测试工程师」这个岗位,就会知道它的基本特点: 待遇比开发低,比其他行业高入门丝滑,算是技术岗最简单的一类测试行业有细分领域:功能、性能、自动化… 每个行业…...

回归任务与分类任务应用及评价指标

能源系统中的回归任务与分类任务应用及评价指标 一、回归任务应用1.1 能源系统中的回归任务应用1.1.1 能源消耗预测1.1.2 负荷预测1.1.3 电池健康状态估计(SOH预测)1.1.4 太阳能发电量预测1.1.5 风能发电量预测 1.2 回归任务中的评价指标1.2.1 RMSE&…...

半导体制造全流程

半导体制造是一个极其复杂且精密的过程,主要涉及将硅片加工成功能强大的芯片。以下是半导体制造的全流程概述: 1. 硅材料制备 硅提纯: 使用冶金级硅,进一步提纯为高纯度硅(电子级硅),纯度可达 …...

Mac m2电脑上安装单机Hadoop(伪集群)

1. 引言 本教程旨在介绍在Mac 电脑上安装Hadoop 2. 前提条件 2.1 安装JDK Mac电脑上安装Hadoop,必须首先安装JDK,并配置环境变量(此处不做详细描述) 2.2 配置ssh环境 关闭防火墙 在Mac下配置ssh环境,防止后面启…...

React 第十六节 useCallback 使用详解注意事项

useCallback 概述 1、useCallback 是在React 中多次渲染缓存函数的 Hook,返回一个函数的 memoized的值; 2、如果多次传入的依赖项不变,那么多次定义的时候,返回的值是相同的,防止频繁触发更新; 3、多应用在 父组件为函…...

悬赏任务源码(悬赏发布web+APP+小程序)开发附源码

悬赏任务源码是指一个软件或网站的源代码,用于实现悬赏任务的功能。悬赏任务是指发布方提供一定的奖励,希望能够找到解决特定问题或完成特定任务的人。悬赏任务源码通常包括任务发布、任务接受、任务完成和奖励发放等功能的实现。搭建悬赏任务源码是一个…...

Collection接口

目录 一. Collection基本介绍 二. Collection中的方法及其使用 1. 添加元素 (1) 添加单个元素 (2) 添加另一集合中的所有元素 2. 删除元素 (1) 删除单个元素 (2) 删除某个集合中包含在其他集合中的元素 (3) 保留两个集合中的交集部分, 删除其他元素. 3. 遍历元素 (1) …...

电机驱动模块L9110S详解

电机驱动模块是一种用于控制和驱动电机的设备,它能够将控制信号转化为适合电机操作的电流和电压。通过电机驱动模块,可以实现对电机的速度、方向等参数进行精确控制。 今天我们要介绍的 L9110S 电机驱动适合大学生、工程师、个人DIY、电子爱好者们学习和…...

路由之间是怎么跳转的?有哪些方式?

1. React 路由跳转方式&#xff08;React Router&#xff09; 在 React 中&#xff0c;路由跳转通常使用 React Router 来管理。React Router 提供了不同的跳转方式。 <Link> 组件跳转 使用 <Link> 组件来进行路由跳转&#xff0c;它会渲染为一个 HTML <a> …...

AudioSegment 将音频分割为指定长度时间片段 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…...

双目摄像头标定方法

打开matlab 找到这个标定 将双目左右目拍的图像上传&#xff08;左右目最好不少于20张&#xff09; 等待即可 此时已经完成标定&#xff0c;左下角为反投影误差&#xff0c;右边为外参可视化 把这些误差大的删除即可。 点击导出 此时回到主页面&#xff0c;即可看到成功导出 Ca…...

题解 - 莱布尼茨三角形

题目描述 世界上著名的莱布尼茨三角形如图所示&#xff0c;请编程输出图中排在第n行从左边数第m个位置上的数。 输入 共一行&#xff0c;有二个整数N 和M(N<15)&#xff0c;两数间用空格隔开。 输出 共一行&#xff0c;有二个整数&#xff0c;两数间用“/”隔开&#xff…...

低代码开发:企业数智化转型中的关键角色与实践案例分析

引言 随着信息技术的飞速发展&#xff0c;企业数智化转型已成为提升竞争力和实现可持续发展的必经之路。在这一过程中&#xff0c;低代码开发平台作为一种新兴的开发模式&#xff0c;正逐渐成为企业数智化转型的关键角色。本文将探讨低代码开发在企业数智化转型中的作用&#x…...

【ubuntu24.04】PDFMathTranslate 本地PDF翻译GPU部署

https://huggingface.co/spaces/reycn/PDFMathTranslate-Docker排不上号官方都是要安装包,感觉可以本地试着源码部署一下, http://localhost:7860/官方是这个端口,但是我本地启动是:5000IDEA 里本地 backend启动效果 GUI 是监听7860的...

基于Spring Boot + Vue的摄影师分享交流社区的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…...

高空坠物识别

目录 一、回答二、其他参考 prompt 有没有识别高空坠物的github项目一、回答 根据您的请求&#xff0c;以下是一些在GitHub上可以找到的关于识别高空坠物的项目&#xff1a; 1、overthecity 这是一个监控高空抛物的云端服务项目&#xff0c;它利用Edison的计算能力对高空抛物…...

22. 正则表达式

一、概述 正则表达式&#xff08;regular expression&#xff09;又称 规则表达式&#xff0c;是一种文本模式&#xff08;pattern&#xff09;。正则表达式使用一个字符串来描述、匹配具有相同规格的字符串&#xff0c;通常被用来检索、替换那些符合某个模式&#xff08;规则&…...

阿里云数据库MongoDB版助力极致游戏高效开发

客户简介 成立于2010年的厦门极致互动网络技术股份有限公司&#xff08;以下简称“公司”或“极致游戏”&#xff09;&#xff0c;是一家集网络游戏产品研发与运营为一体的重点软件企业&#xff0c;公司专注于面向全球用户的网络游戏研发与运营。在整个产业链中&#xff0c;公…...