【MySQL】InnoDB存储页的独立表空间
目录
- 1、背景
- 2、独立表空间
- 【1】表空间大小
- 【2】区
- 【3】组
- 【4】段
- 【5】区的类型
- 【6】XDES Entry区结构
- 【7】XDES Entry链表
- 【8】XDES Entry链表基节点
- 【9】INODE Entry段结构
- 【10】FIL_PAGE_TYPE_FSP_HDR页类型
- 【11】FIL_PAGE_IBUF_BITMAP页类型
- 【12】FIL_PAGE_INODE页类型
- 【13】FIL_PAGE_TYPE_XDES页类型
- 【14】索引关联INODE Entry段结构
- 3、总结
1、背景
我们往一张表里插入的行数据是存储在页上的,一张页的大小为16KB,数据量大的时候一张页不可能存储完一张表里的所有数据,所以需要多张页来进行存储,这多张页所在的存储空间就叫表空间,表空间分为系统表空间和独立表空间,接下来就讲一下独立表空间上是如何存储页的。
2、独立表空间
【1】表空间大小
之前讲过页的组成,我们再来看一下页的通用部分File Header(38字节大小)的组成:
名称 | 字节大小 | 含义 |
---|---|---|
FIL_PAGE_SPACE_OR_CHKSUM | 4 | 页的校验和 |
FIL_PAGE_OFFSET | 4 | 页号 |
FIL_PAGE_PREV | 4 | 上一页 |
FIL_PAGE_NEXT | 4 | 下一页 |
FIL_PAGE_LSN | 8 | 页最后被修改时对应的日志序列位置 |
FIL_PAGE_TYPE | 2 | 页类型 |
FIL_PAGE_FILE_FLUSH_LSN | 8 | 仅在系统表空间的一个页中定义,代表文件执行被刷新到了对应的LSN值 |
FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID | 4 | 页属于哪个表空间 |
File Header里的页号由4字节组成,也就是32位,所以一个表空间最多能存储232个页,每个页按照16KB的大小来算,一个表空间最多可以存储64TB的大小的数据
【2】区
表空间里每连续64个页组成一个区,一个页按16KB大小来算,一个区的大小就为64*16KB=1MB,如下图表示:
【3】组
表空间上连续256个区就为一个组,区0到区255就为第一个组,区256到区511就为第二个组,剩下的以此内推,需要注意的是,第一个组的前三个页的类型是固定,其它组的前两个页类型是固定的,在讲这些页之前我们先看一下页的类型有几种:
类型 | 含义 |
---|---|
FIL_PAGE_UNDO_LOG | Undo日志页 |
FIL_PAGE_INODE | 段信息节点 |
FIL_PAGE_IBUF_FREE_LIST | Insert Buffer空闲列表 |
FIL_PAGE_IBUF_BITMAP | Insert Buffer位图 |
FIL_PAGE_TYPE_SYS | 系统页 |
FIL_PAGE_TYPE_TRX_SYS | 事务系统数据 |
FIL_PAGE_TYPE_FSP_HDR | 表空间头部信息 |
FIL_PAGE_TYPE_XDES | 扩展描述页 |
FIL_PAGE_TYPE_BLOB | BLOB页 |
再看组的表结构图,如下图:
【4】段
一个索引有叶子节点和非叶子节点,存放叶子节点所在区的集合就叫叶子段,存放非叶子节点所在区的集合就叫非叶子段,一个索引有两个段。
【5】区的类型
段就是索引中叶子节点和非叶子节点所在区的集合,一个索引两个段,一个区64个页,数据量小的时候用一个区来作为存储单位十分浪费空间,所以就有了碎片区的概念,在数据量小的时候段就以碎片区中的页为单位来分配空间,数据量大的时候就以区为单位来分配存储空间,碎片区不属于任何段,并且碎片区里的页可以存储多个索引的数据,区的类型有如下几种:
区类型 | 含义 |
---|---|
FREE | 属于表空间,区中的页都没被使用 |
FREE_FRAG | 属于表空间,有可用页的碎片区 |
FULL_FRAG | 无可用页的碎片区 |
FSEG | 属于某个段的区 |
【6】XDES Entry区结构
InnoDB中每一个区都对应一个XDES Entry结构,其组成图如下:
XDES Entry结构字段含义如下:
XDES Entry | 字节大小 | 含义 |
---|---|---|
Segment ID | 8 | 段的唯一编号,只有FSEG类型的区此字段才有用 |
List Node | 12 | 指向上一个和下一个XDES Entry结构 |
State | 4 | FREE、FREE_FRAG、FULL_FRAG、FSEG四种区类型 |
Page State Bitmap | 16 | 16字节对应的128比特位,其中每2个比特位对应一个区64个页中的一个页,2个比特位中第一个比特位代表该页是否被使用 |
List Node结构字段含义如下:
List Node | 字节大小 | 含义 |
---|---|---|
Prev Node Page Number | 4 | 上一个XDES Entry结构所在的页 |
Prev Node Offset | 2 | 上一个XDES Entry结构页内偏移量 |
Next Node Page Number | 4 | 下一个XDES Entry结构所在的页 |
Next Node Offset | 2 | 下一个XDES Entry结构页内偏移量 |
【7】XDES Entry链表
在数据量比较小的时候,段是以碎片区中的页为单位来分配存储空间的,插入数据方式如下:
1、查找表空间中状态为FREE_FRAG的区,找到了就取出零碎的页把数据插进去,
2、没找到就申请一个状态为FREE的区,将状态变为FREE_FRAG,再取出零碎的页将数据插入进去,
3、之后再插入数据当没有零碎的页可用时状态就变为FULL_FRAG。
快速查找这3个类型的区通过3个链表来查找,这3个链表是属于表空间独有的,3个链表如下:
链表 | 含义 |
---|---|
FREE链表 | FREE状态的区对应的XDES Entry结构通过List Node组成的链表 |
FREE_FRAG链表 | FREE_FRAG状态的区对应的XDES Entry结构通过List Node组成的链表 |
FULL_FRAG链表 | FULL_FRAG状态的区对应的XDES Entry结构通过List Node组成的链表 |
当一个段中的数据超过32个零碎的页之后,就以区为单位来分配存储空间了,此时每个段都涉及3个链表,注意每个段都有3个链表,3个链表如下:
链表 | 含义 |
---|---|
FREE链表 | 同一个段中所有页都是空闲的区对应的XDES Entry结构组成一个链表 |
NOT_FULL链表 | 同一个段中有空闲页的区对应的XDES Entry结构组成一个链表 |
FULL链表 | 同一个段中没有有空闲页的区对应的XDES Entry结构组成一个链表 |
【8】XDES Entry链表基节点
为了快速找到XDES Entry链表的头和尾,InnoDB中设计了链表基节点结构List Base Node,其结构图如下:
【9】INODE Entry段结构
段也有一个对应的结构INODE Entry,其结构如图:
INODE Entry结构字段含义如下:
INODE Entry | 字节大小 | 含义 |
---|---|---|
Segment Id | 8 | 段的唯一id |
NOT_FULL_N_USED | 4 | NOT_FULL链表中已经使用了的页数 |
List Base Node For FREE List | 16 | 对应段中的FREE链表 |
List Base Node For NOT_FULL List | 16 | 对应段中的NOT_FULL链表 |
List Base Node For FULLList | 16 | 对应段中的FULL链表 |
Magic Number | 4 | INODE Entry是否被初始化 |
Fragment Array Entry | 4 | 零碎页页号,总共32个 |
【10】FIL_PAGE_TYPE_FSP_HDR页类型
表空间第一个组中第一个页的类型为FIL_PAGE_TYPE_FSP_HDR,结构如下:
FIL_PAGE_TYPE_FSP_HDR字段解释:
字段 | 字节大小 | 含义 |
---|---|---|
File Header | 38 | 页的通用信息 |
FIle Space Header | 112 | 表空间的一些整体属性 |
XDES Entry | 10240 | 256个区信息 |
Empty Space | 5986 | 未使用的空间 |
File Trailer | 8 | 校验页是否完整 |
File Space Header结构字段解释:
字段 | 字节大小 | 含义 |
---|---|---|
Space ID | 4 | 表空间ID |
Not Used | 4 | 未使用 |
Size | 4 | 表空间占有的页数 |
FREE Limit | 4 | 未被初始化的最小页号,大于等于此页号对应的区的XDES Entry结构都没被加入FREE链表 |
Space Flags | 4 | 存储占用空间比较小的属性 |
FRAG_N_USED | 4 | FREE_FRAG链表中已使用的页数量 |
List Base Node for FREE List | 16 | FREE链表基节点 |
List Base Node for FREE_FRAG List | 16 | FREE_FRAG链表的基节点 |
List Base Node for FULL_FRAG List | 16 | FULL_FREG链表的基节点 |
Next Unused Segment ID | 8 | 表空间中下一个未使用的段ID |
List Base Node for SEG_INODES_FULL List | 16 | SEG_INODES_FULL链表的基节点 |
List Base Node for SEG_INODES_FREE List | 16 | SEG_INODES_FREE链表的基节点 |
【11】FIL_PAGE_IBUF_BITMAP页类型
表空间所有组的第二个页的类型为FIL_PAGE_IBUF_BITMAP,用于InnoDB存储引擎中事务日志缓冲区,与插入缓冲有关,后面再讲。
【12】FIL_PAGE_INODE页类型
第一组第三个页类型就为FIL_PAGE_INODE,用于存储段结构INODE Entry,其页结果如图:
FIL_PAGE_INODE页类型字段解释如下:
字段名 | 字节大小 | 含义 |
---|---|---|
File Header | 38 | 页的通用信息 |
List Node for INODE Page List | 12 | 存储上一个INODE页和下一个INODE页 |
INODE Entry | 16128 | 段信息,可以存储85个 |
Empty Space | 6 | 未使用的空间 |
File Trailer | 8 | 校验页是否完整 |
可以看到一个FIL_PAGE_INODE类型的页最多存储85个INODE Entry段结构,如果超过85个,就需要申请其它FIL_PAGE_INODE类型的页来进行存储了,所有FIL_PAGE_INODE类型的页会组成两个链表,这两个链表存储在FIL_PAGE_TYPE_FSP_HDR类型页的File Space Header结构里,链表如下:
链表 | 含义 |
---|---|
SEG_INODES_FULL链表 | FIL_PAGE_INODE类型的页中没有空闲空间来存储INODE Entry段结构 |
SEG_INODES_FREE链表 | FIL_PAGE_INODE类型的页中有空闲空间来存储INODE Entry段结构 |
存储一个INODE Entry结构的过程如下:
1、从SEG_INODES_FULL链表中取出一个页去存储INODE Entry段结构,
2、如果页上的INODE Entry段机构存储满了就放入SEG_INODES_FREE链表,
3、如果SEG_INODES_FULL链表为空,就从表空间所属的FREE_FRAG链表中取出一个零碎页,修改其类型为FIL_PAGE_INODE,再放入SEG_INODES_FULL链表中。
【13】FIL_PAGE_TYPE_XDES页类型
表空间第一个组之外的其它组的第一个页类型为FIL_PAGE_TYPE_XDES,和FIL_PAGE_TYPE_FSP_HDR页类型差不多,相比少了一些其它属性,其结构图如下:
【14】索引关联INODE Entry段结构
一个索引有两个段,它们之间是这样关联起来的,数据页组成的页类型中有两个字段如下:
字段 | 字节大小 | 含义 |
---|---|---|
PAGE_BTR_SEG_LEAF | 10 | B+树叶子段的头部信息,只在B+树的根页定义 |
PAGE_BTR_SEG_TOP | 10 | B+树非叶子段的头部信息,只在B+树的根页定义 |
这两个字段各对应一个Segment Header结构如下:
Segment Header字段 | 字节大小 | 含义 |
---|---|---|
SpaceID ofthe INODE Entry | 4 | INODE Entry结构所在的表空间ID |
Page Number of the INODE Entry | 4 | INODE Entry结构所在页号 |
Byte Offset of the INODE Ent | 2 | INODE Entry结构在页中偏移量 |
通过Segment Header就能很方便找到索引对应的INODE Entry段结构,并且只需要在B+树的根节点中定义这两字段。
3、总结
本文主要讲解独立表空间的组成部分,涉及到页、区、组还有各种结构等,后续可以再讲解系统表空间的组成,和独立表空间类似。
相关文章:
【MySQL】InnoDB存储页的独立表空间
目录 1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【7】XDES Entry链表【8】XDES Entry链表基节点【9】INODE Entry段结构【10】FIL_PAGE_TYPE_FSP_HDR页类型【11】FIL_PAGE_IBUF_BITMAP页类型【12】FIL_PAGE_INODE页类型【13…...
RabbitMQ的死信队列的产生与处理
死信队列(Dead Letter Queue, DLQ) 1. 死信(Dead Letter)是怎么产生的? 在 RabbitMQ 中,消息会变成 死信(Dead Letter)的常见情况有以下几种: 消息被拒绝(R…...
二分算法篇:二分答案法的巧妙应用
二分算法篇:二分答案法的巧妙应用 那么看到二分这两个字想必我们一定非常熟悉,那么在大学期间的c语言的教学中会专门讲解二分查找,那么我们来简单回顾一下二分查找算法,我们知道二分查找是在一个有序的序列中寻找一个数在这个序列…...
实现:多活的基础中间件
APIRouter : 路由分发服务 API Router 是一个 HTTP 反向代理和负载均衡器,部署在公有云中作为 HTTP API 流量的入口,它能识别 出流量的归属 shard ,并根据 shard 将流量转发到对应的 ezone 。 API Router 支持多种路由键&am…...
【分布式理论9】分布式协同:分布式系统进程互斥与互斥算法
文章目录 一、互斥问题及分布式系统的特性二、分布式互斥算法1. 集中互斥算法调用流程优缺点 2. 基于许可的互斥算法(Lamport 算法)调用流程优缺点 3. 令牌环互斥算法调用流程优缺点 三、三种算法对比 在分布式系统中,多个应用服务可能会同时…...
百问网imx6ullpro调试记录(linux+qt)
调试记录 文章目录 调试记录进展1.开发板相关1.1百问网乌班图密码 1.2 换设备开发环境搭建串口调试网络互通nfs文件系统挂载 1.3网络问题1.4系统启动1.5进程操作 2.QT2.1tslib1.获取源码2.安装依赖文件3.编译 2.2qt移植1.获取qt源码2.配置编译器3.编译 2.3拷贝到开发板1.拷贝2.…...
微信小程序如何使用decimal计算金额
第三方库地址:GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算,偶尔发现这个库也不错,计算简单,目前发现比较准确 上代码 导入js import Decimal from ../../uti…...
win32汇编环境,对线程的创建与操作示例二
;运行效果 ;win32汇编环境,对线程的创建与操作示例二 ;本文主要是实现用CreateThread创建线程时,如何把参数传入进去 ;以下举3个例子说明,如何把数值、字符串和自定义结构传入线程之中 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>…...
React(三)
动态控制显示和css import { useState } from "react"; import "./index.css"; const list [{ id: 1, username: "aaName", content: "一条评论", ctime: "10-18 08:15" },{ id: 2, username: "bbName", conten…...
GitHub Pages + Jekyll 博客搭建指南(静态网站搭建)
目录 🚀 静态网站及其生成工具指南🌍 什么是静态网站?📌 静态网站的优势⚖️ 静态网站 VS 动态网站 🚀 常见的静态网站生成器对比🛠️ 使用 GitHub Pages Jekyll 搭建个人博客📌 1. 创建 GitHu…...
用Go实现 SSE 实时推送消息(消息通知)——思悟项目技术4
目录 简介 工作原理 例子 使用场景 简介 SSE(Server - Sent Events)是一种允许服务器向客户端实时推送更新的 Web 技术。是一种基于 HTTP 协议的单向通信机制,服务器可以在客户端建立连接后,持续不断地向客户端发送事件流。客…...
通过客户端Chatbox或OpenwebUI访问识别不到本地ollama中的模型等问题的解决
Chatbox和Open WebUI 等无法获取到 Ollama里的模型,主要是由以下原因导致: Ollama 服务未正确暴露给 Docker 容器或客户端模型未正确下载或名称不匹配网络配置或权限问题 排查以上问题的思路首先排查ollama服务是否启动,然后再看端口号 使…...
TfidfVectorizer
TF-IDF / Term Frequency - Inverse Document Frequency 作用:是自然语言处理NLP中常用的文本特征提取工具,用于将文本数据转换为数据向量。 核心思想:是通过统计词频和逆文档频率来量化词语在文本中的重要性。 T F − I D F ( t , d ) T F…...
如何评估云原生GenAI应用开发中的安全风险(下)
以上就是如何评估云原生GenAI应用开发中的安全风险系列中的上篇内容,在本篇中我们介绍了在云原生AI应用开发中不同层级的风险,并了解了如何定义AI系统的风险。在本系列下篇中我们会继续探索我们为我们的云原生AI应用评估风险的背景和意义,并且…...
Flink-序列化
一、概述 几乎每个Flink作业都必须在其运算符之间交换数据,由于这些记录不仅可以发送到同一JVM中的另一个实例,还可以发送到单独的进程,因此需要先将记录序列化为字节。类似地,Flink的堆外状态后端基于本地嵌入式RocksDB实例&…...
1064 - You have an error in your SQL syntax;
在创建数据库表建立外键是遇到了如下报错 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near position(position_id) ) at line 8 数据库表sql如下: --职位表 CR…...
团结引擎 Shader Graph:解锁图形创作新高度
Shader Graph 始终致力于为开发者提供直观且高效的着色器构建工具,持续推动图形渲染创作的创新与便捷。在团结引擎1.4.0中,Shader Graph 迎来了重大更新,新增多项强大功能并优化操作体验,助力开发者更轻松地实现高质量的渲染效果与…...
Spring Boot 配置 Mybatis 读写分离
JPA 的读写分离配置不能应用在 Mybatis 上, 所以 Mybatis 要单独处理 为了不影响原有代码, 使用了增加拦截器的方式, 在拦截器里根据 SQL 的 CRUD 来路由到不同的数据源 需要单独增加Mybatis的配置 Configuration public class MyBatisConfig {Beanpublic SqlSessionFactory…...
Redis 数据类型 List 列表
列表类型是⽤来存储多个有序的字符串,如下图所⽰,a、b、c、d、e 五个元素从左到右组成了⼀个有序的列表,列表中的每个字符串称为元素(element),⼀个列表最多可以存储 2^32 - 1个元素。在 Redis 中ÿ…...
Hello Robot 推出Stretch 3移动操作机器人,赋能研究与商业应用
Hello Robot公司近日发布了其新一代开源移动操作机器人Stretch 3,这是一款高度灵活的机器人平台,专为机器人研究、教育实验和商业自动化设计。Stretch 3 结合了先进的移动机器人技术、灵巧操作能力和开源软件生态系统,为用户提供了一个功能强…...
有滚动条的时候,设置盒子的位置
<div class"AIBox mt-24" id"AIBox"><div v-for"(v, i) in AIs" :key"i" :class"v.role assistant ? mb-24 : "><div :class"v.role user ? fc-ac42f3 fw-600 font-16 : ">{{ v.content }}…...
律所录音证据归集工具:基于PyQt6与多线程的自动化音频管理解决方案
在律所日常工作中,音频证据的整理与归集是一个高频且复杂的任务。面对大量的案件录音文件,如何实现快速且准确的分类与存档,成为了律所提高效率、降低出错率的关键。本文将通过技术角度解析一款名为律所录音证据归集工具的项目,详…...
LogicFlow自定义节点:矩形、HTML(vue3)
效果: LogicFlow 内部是基于MVVM模式进行开发的,分别使用preact和mobx来处理 view 和 model,所以当我们自定义节点的时候,需要为这个节点定义view和model。 参考官方文档:节点 | LogicFlow 1、自定义矩形节点 custo…...
软件工程教育的革命:AI辅助学习与实践
软件工程教育正面临着巨大的挑战。传统的教学模式往往以理论讲解为主,实践机会不足,导致学生难以将理论知识转化为实际技能。此外,繁琐的代码编写和项目搭建过程也常常耗费学生大量时间和精力,影响学习效率。为了解决这些问题&…...
Office hour 1
涉及Python环境配置、深度学习框架安装、常用数据处理和分析库、以及Python IDE的选择等内容。 1. Anaconda 安装与配置 • Anaconda Individual Edition:Anaconda 是一个开源平台,旨在简化数据科学的工作流程,提供了 Python 和超过 150 个科…...
【魔法阵——广义Dijkstra,DP】
题目 代码 #include <bits/stdc.h> using namespace std; const int N 1010; const int inf 0x3f3f3f3f; int g[N][N], d[N][N]; bool st[N][N]; int n, k, m; struct Node {int v, c, i;bool operator < (const Node &y) const{return v > y.v;} }; priori…...
使用epoll与sqlite3进行注册登录
将 epoll 服务器 客户端拿来用 客户端:写一个界面,里面有注册登录 服务器:处理注册和登录逻辑,注册的话将注册的账号密码写入数据库,登录的话查询数据库中是否存在账号,并验证密码是否正确 额外功能&…...
vue3-01-初识vue3相对于vue2的提升与比较,使用vue-cli创建项目,使用vite构建工具创建项目
1.相对于vue2的提升 2.创建vue3项目-使用vue-cli创建 2.1 cmd查看版本号 vue-V 2.2进入创建项目 切换D盘 D: 指定自定义创建的项目 cd 文件名 创建项目 vue create 项目名称 成功创建项目 运行项目 3.使用vite(构建工具)创建前端项目 3.1创建项目 3.1.1 npm init vite-ap…...
持久性HTTPVS.非持久性HTTP
1. HTTP协议基础 HTTP(HyperText Transfer Protocol)是Web通信的核心协议,定义了客户端(浏览器)与服务器之间传输数据的规则。 在HTTP/1.0及之前的版本中,默认使用非持久性连接,而HTTP/1.1及更…...
Node.js怎么调用到打包的python文件呢
在 Node.js 中调用打包后的 Python 可执行文件(如 PyInstaller 生成的 .exe 或二进制文件),可以通过以下步骤实现: 一、Python 打包准备 假设已有打包好的 Python 文件 your_script.exe(以 Windows 为例)&…...
C++,STL容器,map/multimap:映射/多重映射深入解析
文章目录 一、容器概览核心特性对比二、底层实现原理三、核心操作详解1. 容器初始化2. 元素插入操作3. 元素访问与查找4. 元素删除操作四、实战应用场景1. 高频数据统计2. 事件调度系统五、性能优化策略1. 键类型选择2. 内存管理优化六、注意事项与陷阱1. 迭代器失效问题2. 自定…...
【IDEA】2017版本的使用
目录 一、常识 二、安装 1. 下载IDEA2017.exe 2. 安装教程 三、基本配置 1. 自动更新关掉 2. 整合JDK环境 3. 隐藏.idea文件夹和.iml等文件 四、创建Java工程 1. 新建项目 2. 创建包结构,创建类,编写main主函数,在控制台输出内容。…...
理解Unity中的ExecuteInEditMode与ExecuteAlways
深入理解Unity中的[ExecuteInEditMode]与[ExecuteAlways] 一、引言 在开发Unity项目时,有时我们需要在编辑器模式下执行某些脚本逻辑,以实现即时反馈或特定的编辑功能。Unity提供了两种方式来满足这种需求:[ExecuteInEditMode]和[ExecuteAlways]。本文将详细介绍这两种特性…...
MybatisPlus常用增删改查
记录下MybatisPlus的简单的增删改查 接口概述 Service和Mapper区别 Mapper简化了单表的sql操作步骤(CRUD),而Serivce则是对Mapper的功能增强。 Service虽然加入了数据库的操作,但还是以业务功能为主,而更加复杂的SQL…...
【Java】多线程和高并发编程(三):锁(下)深入ReentrantReadWriteLock
文章目录 4、深入ReentrantReadWriteLock4.1 为什么要出现读写锁4.2 读写锁的实现原理4.3 写锁分析4.3.1 写锁加锁流程概述4.3.2 写锁加锁源码分析4.3.3 写锁释放锁流程概述&释放锁源码 4.4 读锁分析4.4.1 读锁加锁流程概述4.4.1.1 基础读锁流程4.4.1.2 读锁重入流程4.4.1.…...
JDK8 stream API用法汇总
目录 1.集合处理数据的弊端 2. Steam流式思想概述 3. Stream流的获取方式 3.1 根据Collection获取 3.1 通过Stream的of方法 4.Stream常用方法介绍 4.1 forEach 4.2 count 4.3 filter 4.4 limit 4.5 skip 4.6 map 4.7 sorted 4.8 distinct 4.9 match 4.10 find …...
帕累托改革(Pareto improvement)
帕累托改革(Pareto improvement)是经济学中的一个概念,指的是一种资源配置的改进方式,其中至少有一个人的处境变得更好,同时没有任何人的处境变得更差。这个概念来源于意大利经济学家维尔弗雷多帕累托,他发…...
Unity做2D小游戏2------创建地形和背景
我是跟着这个up主做的:【unity/2d/超基础】教你做一款2d横版游戏 打开Unity Hub后,点击项目--新项目,进入下面的界面,可以根据想要做的项目选择对应的模型,我现在要做2D小游戏,所以选择第一个2D核心模板。…...
欧拉筛详解(代码,证明过程以及时间复杂度分析)
1.欧拉筛的作用 欧拉筛:可以在线性的时间复杂度内,从1~n之间的素数的集合,并且在操作过程中可以记录素数数组,为以后判断是否是素数而加快效率 和大部分的筛法一样,通过将质数的倍数标记为合数来不断筛选质数的一种方…...
索引为什么是B+树结构,MySQL有哪些引擎,有什么区别?
目录 为什么索引使用 B+ 树结构? 1. 适合磁盘存储 2. 高效的查询性能 3. 适合大数据量 4. 与 B 树的区别 MySQL 的存储引擎及区别 1. InnoDB 2. MyISAM 3. Memory 4. Archive 5. CSV 6. Blackhole 存储引擎的选择建议 总结 为什么索引使用 B+ 树结构? B+ 树是…...
MongoDB进阶篇-索引
文章目录 1. 索引概述 2. 索引的类型 2.1 单字段索引 2.2 复合索引 2.3 其他索引 2.3.1 地理空间索引(Geospatial Index) 2.3.2 文本索引(Text Indexes) 2.3.3 哈希索引(Hashed Indexes) 3. 索引相关操作 3.1 查看索引 3.2 创建索引 3.3.1 创建单字段索引 3.3.2 创建复合…...
Unity WebGL包体压缩
最近在开发webgl,踩了很多坑,先来说下包体的问题。 开发完之后发现unity将文件都合并到一个文件了,一共有接近100m。 这对网页端的体验来说是可怕的,因为玩家必须要加载完所有的文件才能进入,这样体验特别差。 于是想…...
内容中台赋能人工智能技术提升业务创新能力
内容概要 在当今快速变化的市场环境中,企业需要不断寻求创新以保持竞争力。内容中台作为一种新型的内容管理架构,能够极大地提升企业在内容创建、管理和分发方面的效率。通过与人工智能技术的深度融合,企业能够将海量的数据和信息转化为有价…...
数据结构:队列
1.概念: 和栈相反,队列是一种先进先出的线性表它只允许在标的一段进行插入,而在另一端进行删除元素。这和我们日常生活中的排队是一致的,即最早入队的元素最早离开。队列中允许插入的一端叫做队尾,允许删除的一端的叫…...
第四期书生大模型实战营-第4关-L2G4000
简述多模态大模型的工作原理 多模态大模型是一种能够同时理解和生成多种类型数据(如文本、图像、音频、视频等)的人工智能模型。其核心工作原理可概括为以下几个关键步骤: 1. 多模态数据编码 模态对齐:将不同形式的数据…...
17vue3实战-----使用配置文件生成简易页面
17vue3实战-----使用配置文件生成简易页面 1.写在前面2.背景3.实现3.1界面效果3.2新建config配置文件3.3封装组件3.4使用组件 1.写在前面 后台管理系统的开发很简单。无论是用户模块、部门模块、角色模块还是其它模块,界面和业务逻辑都相对比较简单,我会省略这些模…...
ZZNUOJ(C/C++)基础练习1091——1100(详解版)⭐
目录 1091 : 童年生活二三事(多实例测试) C C 1092 : 素数表(函数专题) C C 1093 : 验证哥德巴赫猜想(函数专题) C C 1094 : 统计元音(函数专题) C C 1095 : 时间间隔(多…...
浏览器的缓存方式几种
浏览器的缓存方式主要分为以下几种: 1. 强制缓存(强缓存 / Memory Cache & Disk Cache) 通过 Expires 或 Cache-Control 头部控制。在缓存有效期内,浏览器直接使用缓存,不发起请求。 关键HTTP头: Ex…...
【前端】【面试】【经典一道题】vue中组件传值的几种方式
父子组件传值 1. 父传子:props 这是最常见的父组件向子组件传递数据的方式。父组件在使用子组件时,通过在子组件标签上绑定属性来传递数据,子组件通过 props 选项接收这些数据。 <!-- 父组件 --> <template><div><Ch…...
SwiftUI 中 .overlay 两种写法的区别及拓展
SwiftUI 中 .overlay 两种写法的区别及拓展 一、.overlay 简介功能语法 二、写法 1:.overlay(Circle().stroke(Color.blue, lineWidth: 2))代码示例解释优点适用场景 三、写法 2:.overlay { Circle().stroke(.white, lineWidth: 4) }代码示例解释优点适用…...