postgresql源码学习(59)—— 磁盘管理器 SMGR
一、 定义及作用
PostgreSQL 的磁盘管理器(Storage Manager,简称 SMGR)是数据库系统中负责管理底层存储的核心模块。磁盘管理器并非直接操作磁盘上的文件,而是通过VFD(虚拟文件描述符,将在后续学习)实现。
-
抽象存储层,解耦存储逻辑:
SMGR 提供了一层抽象接口,屏蔽了不同存储类型(如表、索引、TOAST 表等)的底层细节,使上层模块(如执行器、缓冲池)无需关心具体的存储实现。 -
管理文件操作:
SMGR 负责文件的创建、删除、扩展、截断等操作,确保数据文件能够高效地存储和访问。 -
支持多种存储类型:
PostgreSQL 支持多种存储类型(如堆表、索引、TOAST 表等),SMGR 通过统一的接口管理这些存储类型。 -
与缓冲池交互:
SMGR 与缓冲池(Buffer Manager)紧密协作,确保数据页能够正确地加载到内存中。 -
提高可扩展性:
通过 SMGR 的抽象接口,PostgreSQL 可以更容易地支持新的存储类型或存储引擎(如列存储、外部表等)。
二、 核心数据结构
src/include/storage/smgr.h SMGR 的头文件,定义了存储管理器的接口和数据结构。
SMgrRelation:SMGR的核心数据结构,主要作用是:
- 管理文件句柄:缓存关系的文件句柄,避免频繁打开和关闭文件。
- 支持多分支(Fork):PostgreSQL 中的表或索引可能包含多个分支(如主数据分支、TOAST 分支等),SMgrRelationData 支持管理这些分支的文件。
- 缓存文件大小:记录每个分支的最后一个已知大小,用于优化文件扩展操作。
- 支持临时关系:通过 smgr_owner 指针区分临时关系和持久关系,临时关系在事务结束时自动释放
/** smgr.c 维护了一个 SMgrRelation 对象表,这些对象本质上是缓存的文件句柄。* SMgrRelation 通过 smgropen() 创建(如果尚未存在),并通过 smgrclose() 销毁。* 注意,这些操作并不涉及 I/O,它们只是创建或销毁哈希表条目。* (但 smgrclose() 可能会释放相关资源,例如操作系统级别的文件描述符。)** 一个 SMgrRelation 可能有一个“所有者”,这只是从其他地方指向它的指针;* 如果 SMgrRelation 被关闭,smgr.c 会清除此指针。* 我们使用此机制来避免从 relcache 到 smgr 的悬空指针,而无需让 smgr 显式感知 relcache。* 每个 SMgrRelation 只能有一个“所有者”指针,但这已经足够。** 没有“所有者”的 SMgrRelation 被认为是临时的,并在事务结束时被删除。*/typedef struct SMgrRelationData
{/* rnode 是哈希表查找键,因此必须放在第一位! */RelFileNodeBackend smgr_rnode; /* 表的物理标识符 *//* 指向所有者指针的指针,如果没有则为 NULL */struct SMgrRelationData **smgr_owner;/** 以下字段在缓存刷新事件时重置为 InvalidBlockNumber,* 并记录每个分支的最后一个已知大小。* 此信息目前仅在恢复期间可靠,因为分支扩展没有缓存失效机制。*/BlockNumber smgr_targblock; /* 当前插入目标块 */BlockNumber smgr_cached_nblocks[MAX_FORKNUM + 1]; /* 每个分支的最后一个已知大小 *//* 未来可能会在此处添加其他公共字段 *//** 以下字段是 smgr.c 及其子模块私有的。* 不要从其他地方修改它们。*/int smgr_which; /* 存储管理器选择器 *//** 用于 md.c;每个分支的打开段数量(md_num_open_segs)* 和段本身(md_seg_fds)。*/int md_num_open_segs[MAX_FORKNUM + 1];struct _MdfdVec *md_seg_fds[MAX_FORKNUM + 1];/* 如果没有所有者,则链接到所有无所有者 SMgrRelations 的链表中 */dlist_node node;
} SMgrRelationData;typedef SMgrRelationData *SMgrRelation;
三、 核心函数
1. smgrinit(void)
-
作用:初始化存储管理器模块。
-
说明:在 PostgreSQL 启动时调用,用于初始化 SMGR 的全局状态(如哈希表、锁等)。
2. smgropen(RelFileNode rnode, BackendId backend)
-
作用:打开一个关系的存储管理器(
SMgrRelation
)。 -
参数:
-
rnode
:关系的物理标识符(RelFileNode
)。 -
backend
:后端 ID,用于区分不同后端进程。
-
-
返回值:返回一个
SMgrRelation
对象,表示关系的存储管理器。
3. smgrexists(SMgrRelation reln, ForkNumber forknum)
-
作用:检查指定分叉(Fork)的文件是否存在。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号(如主数据分叉、TOAST 分叉等)。
-
-
返回值:如果文件存在,返回
true
;否则返回false
。
4. smgrsetowner(SMgrRelation *owner, SMgrRelation reln)
-
作用:设置关系的所有者。
-
参数:
-
owner
:指向所有者指针的指针。 -
reln
:关系的存储管理器。
-
-
说明:用于将
reln
的所有者设置为owner
,避免悬空指针问题。
5. smgrclearowner(SMgrRelation *owner, SMgrRelation reln)
-
作用:清除关系的所有者。
-
参数:
-
owner
:指向所有者指针的指针。 -
reln
:关系的存储管理器。
-
-
说明:用于清除
reln
的所有者,通常在关系关闭时调用。
6. smgrclose(SMgrRelation reln)
-
作用:关闭一个关系的存储管理器。
-
参数:
-
reln
:关系的存储管理器。
-
-
说明:释放与
reln
相关的资源(如文件描述符),并将其从哈希表中移除。
7. smgrcloseall(void)
-
作用:关闭所有关系的存储管理器。
-
说明:在事务结束时调用,用于清理所有临时关系的存储管理器。
8. smgrclosenode(RelFileNodeBackend rnode)
-
作用:关闭指定关系的存储管理器。
-
参数:
-
rnode
:关系的物理标识符。
-
-
说明:根据
rnode
查找并关闭对应的存储管理器。
9. smgrcreate(SMgrRelation reln, ForkNumber forknum, bool isRedo)
-
作用:创建一个新的分叉文件。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号。 -
isRedo
:是否在恢复期间调用。
-
-
说明:用于创建表或索引的分叉文件(如主数据文件、TOAST 文件等)。
10. smgrdosyncall(SMgrRelation *rels, int nrels)
-
作用:同步所有指定关系的文件到磁盘。
-
参数:
-
rels
:存储管理器数组。 -
nrels
:数组长度。
-
-
说明:确保所有修改过的文件数据被写入磁盘。
11. smgrdounlinkall(SMgrRelation *rels, int nrels, bool isRedo)
-
作用:删除所有指定关系的文件。
-
参数:
-
rels
:存储管理器数组。 -
nrels
:数组长度。 -
isRedo
:是否在恢复期间调用。
-
-
说明:用于删除表或索引的分叉文件。
12. smgrextend(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync)
-
作用:扩展指定分叉的文件,并写入数据。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号。 -
blocknum
:要写入的块号。 -
buffer
:要写入的数据。 -
skipFsync
:是否跳过同步到磁盘。
-
-
说明:用于扩展文件并写入数据块。
13. smgrprefetch(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum)
-
作用:预取指定分叉的数据块。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号。 -
blocknum
:要预取的块号。
-
-
返回值:如果预取成功,返回
true
;否则返回false
。
14. smgrread(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer)
-
作用:从指定分叉的文件中读取数据块。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号。 -
blocknum
:要读取的块号。 -
buffer
:存储读取数据的缓冲区。
-
-
说明:用于从文件中读取数据块到内存。
15. smgrwrite(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, char *buffer, bool skipFsync)
-
作用:将数据块写入指定分叉的文件。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号。 -
blocknum
:要写入的块号。 -
buffer
:要写入的数据。 -
skipFsync
:是否跳过同步到磁盘。
-
-
说明:用于将数据块写入文件。
16. smgrwriteback(SMgrRelation reln, ForkNumber forknum, BlockNumber blocknum, BlockNumber nblocks)
-
作用:将指定范围内的数据块写回磁盘。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号。 -
blocknum
:起始块号。 -
nblocks
:要写回的块数。
-
-
说明:用于批量写回数据块,优化 I/O 性能。
17. smgrnblocks(SMgrRelation reln, ForkNumber forknum)
-
作用:获取指定分叉的文件大小(块数)。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号。
-
-
返回值:文件的大小(块数)。
18. smgrnblocks_cached(SMgrRelation reln, ForkNumber forknum)
-
作用:获取指定分叉的文件大小(块数),使用缓存值。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号。
-
-
返回值:文件的大小(块数)。
-
说明:与
smgrnblocks
类似,但使用缓存值以提高性能。
19. smgrtruncate(SMgrRelation reln, ForkNumber *forknum, int nforks, BlockNumber *nblocks)
-
作用:截断指定分叉的文件到指定大小。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号数组。 -
nforks
:分叉数量。 -
nblocks
:每个分叉的目标大小(块数)。
-
-
说明:用于截断文件,释放多余的空间。
20. smgrimmedsync(SMgrRelation reln, ForkNumber forknum)
-
作用:立即同步指定分叉的文件到磁盘。
-
参数:
-
reln
:关系的存储管理器。 -
forknum
:分叉编号。
-
-
说明:确保文件的修改被立即写入磁盘。
21. AtEOXact_SMgr(void)
-
作用:在事务结束时清理存储管理器。
-
说明:用于释放临时关系的存储管理器,清理缓存等。
参考:《PostgreSQL 数据库内核分析》
相关文章:
postgresql源码学习(59)—— 磁盘管理器 SMGR
一、 定义及作用 PostgreSQL 的磁盘管理器(Storage Manager,简称 SMGR)是数据库系统中负责管理底层存储的核心模块。磁盘管理器并非直接操作磁盘上的文件,而是通过VFD(虚拟文件描述符,将在后续学习…...
亚冬会绽放“云端”,联通云如何点亮冰城“科技之光”?
科技云报到原创。 35年前,中国第一次承办亚运会,宣传曲《亚洲雄风》红遍大江南北,其中有一句“我们亚洲,云也手握手”。如今回看,这句话仿佛有了更深的寓意:一朵朵科技铸就的“云”,把人和人连…...
寻找最优的路测路线
寻找最优的路测路线 真题目录: 点击去查看 E 卷 200分题型 题目描述 评估一个网络的信号质量,其中一个做法是将网络划分为栅格,然后对每个栅格的信号质量计算。 路测的时候,希望选择一条信号最好的路线(彼此相连的栅格集合)进行演示。 现给出 R 行 C 列的整数数组 Cov…...
某虚拟页式存储管理系统中有一个程序占8个页面,运行时访问页面的顺序是1,2,3,4,5,3,4,1,6,7,8,7,8,5。假设刚开始内存没有预装入任何页面。
某虚拟页式存储管理系统中有一个程序占8个页面,运行时访问页面的顺序是1,2,3,4,5,3,4,1,6,7,8,7,8,5。假设刚开始内存没有预装入任何页面。 (1) 如果采用LRU调度算法,该程序在得到4块内存空间时,会产生多少次缺页中断?请给出详细…...
介绍下SpringBoot如何处理大数据量业务
Spring Boot 处理大数据量业务时,通常会面临性能、内存、数据库负载等挑战。为了高效处理大数据量,Spring Boot 提供了多种解决方案和优化策略。以下是一些常见的处理方式: 1. 分页查询 问题:一次性查询大量数据会导致内存溢出和…...
推荐系统召回算法
推荐系统召回算法 召回算法UserCFItemCFSwing矩阵分解 召回算法 基于协同过滤的召回算法主要是应用在推荐环节的早期阶段,大致可以分为基于用户、基于物品的。两者各有优劣,优点是具有较好的可解释性,缺点是对于稀疏的交互矩阵,效…...
(2025)深度分析DeepSeek-R1开源的6种蒸馏模型之间的逻辑处理和编写代码能力区别以及配置要求,并与ChatGPT进行对比(附本地部署教程)
(2025)通过Ollama光速部署本地DeepSeek-R1模型(支持Windows10/11)_deepseek猫娘咒语-CSDN博客文章浏览阅读1k次,点赞19次,收藏9次。通过Ollama光速部署本地DeepSeek-R1(支持Windows10/11)_deepseek猫娘咒语https://blog.csdn.net/m0_70478643/article/de…...
性格测评小程序03搭建用户管理
目录 1 创建数据源2 搭建后台3 开通权限4 搭建启用禁用功能最终效果总结 性格测评小程序我们期望是用户先进行注册,注册之后使用测评功能。这样方便留存用户的联系信息,日后还可以推送对应的相关活动促进应用的活跃。实现这个功能我们要先创建数据源&…...
Qt接入deepseekv3 API 提供openssl 1.1.1g安装包
1.获取api (有免费10元额度) DeepSeek 记得复制api,避免丢失频繁创建。 2.qt调用https请求 配置网络模块 QT core gui widgets network 直接上代码 拿到代码替换api,和修正qt组件输入和输出即可。 #ifndef DEEPSEEKCLIENT…...
zookeeper分布式锁
1.第一种方式通过创建相同节点,谁能创建成功谁获取到锁,解锁删除节点,没获取到的线程进行自旋操作,直到获取到锁,这种方式跟redis一样,比较耗费cup 2.创建临时序列化节点,判断自己是否是节点下…...
系统漏洞扫描服务:安全风险识别与防护指南
系统安全的关键在于漏洞扫描服务,此服务能迅速发现潜在的安全风险。借助专业的扫描工具和技术,它确保系统稳定运作。以下将简要介绍这一服务的主要特点。 扫描原理 系统漏洞扫描服务依赖两种主要手段:一是通过漏洞数据库进行匹配࿰…...
高速差分总线比较--RS422, LVDS,PECL
1. RS422A, 如RS422 & RS485总先, 0/5V的差分电平,匹配电阻120ohm. S2D, Transmitter D2S, Receiver LVDS 如SN65LVDS1,驱动器:DS90LV031(支持预加重),接收器&…...
Java堆外内存的高效利用与性能优化
在Java开发中,堆外内存(Direct Memory)是除Java堆以外的内存区域。它允许Java程序直接分配和管理非堆内存,这为高性能的数据处理提供了可能。 1、 什么是堆外内存? 堆外内存,也称为直接内存(D…...
AI Agent有哪些痛点问题
AI Agent有哪些痛点问题 目录 AI Agent有哪些痛点问题AI Agent领域有哪些知名的论文缺乏一个将智能多智能体技术和在真实环境中学习的两个适用流程结合起来的统一框架LLM的代理在量化和客观评估方面存在挑战自主代理在动态环境中学习、推理和驾驭不确定性存在挑战AI Agent领域有…...
250213-RHEL8.8-外接SSD固态硬盘
It seems that the exfat-utils package is still unavailable, even after enabling the RPM Fusion repository. This could happen if the repository metadata hasn’t been updated or if the package isn’t directly available in the RPM Fusion repository for RHEL 8…...
C语言中常见关键字(static,extern)
一、static的使用 主要是身体擦 在C语言中,static关键字可以用于修饰全局变量和局部变量,但其作用不同。以下是详细的说明和示例: 1. static修饰全局变量 当static用于修饰全局变量时,它会限制该变量的作用域,使其仅…...
游戏引擎学习第101天
回顾当前情况 昨天的进度基本上完成了所有内容,但我们还没有进行调试。虽然我们在运行时做的事情大致上是对的,但还是存在一些可能或者确定的bug。正如昨天最后提到的,既然现在时间晚了,就不太适合开始调试,所以今天我…...
将Docker容器打包成镜像提交
前言 Docker 是一个开源软件,也是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容…...
JVM——堆的回收:引用计数发和可达性分析法、五种对象引用
目录 引用计数法和可达性分析法 引用计数法: 可达性分析算法: 五种对象引用 软引用: 弱引用: 引用计数法和可达性分析法 引用计数法: 引用计数法会为每个对象维护一个引用计数器,当对象被引用时加1&…...
沪深300股指期权能对股指期货进行完全套保吗?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 沪深300股指期权能对股指期货进行完全套保吗? 沪深300股指期权是以沪深300指数为标的物的期权,而沪深300股指期货则是以该指数作为标的的期货合约。 理…...
tomcat html乱码
web tomcat html中文乱码 将html文件改成jsp <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%>添加 <meta charset"UTF-8">...
全星QMS软件的功能如何助力企业进行精细化的质量管理
全星QMS软件的功能如何助力企业进行精细化的质量管理 在当今竞争激烈的市场环境中,企业要想脱颖而出,精细化的质量管理是关键。全星QMS软件系统凭借其全面的功能和强大的技术支持,为企业提供了一站式的质量管理解决方案,助力企业…...
BPMN.js 与 DeepSeek 集成:打造个性化 Web 培训项目的秘诀
在数字化时代,Web培训项目的需求日益增长,特别是对于程序员群体,他们寻求高效、灵活的方式来提升自己的技能。本文将深入探讨如何评估BPMN.js与DeepSeek集成方案,以满足开发Web培训项目的需求。 BPMN.js 的优势 BPMN.js是一个专…...
鸢尾花分类
以下是一个通过Python编程语言实现“机器学习”小项目的详细教程案例,该项目使用经典的鸢尾花(Iris)数据集进行分类任务: 项目:鸢尾花分类 项目目标 通过机器学习模型,根据鸢尾花的花瓣和萼片的长度和宽度,预测其所属的种类。 实现步骤 导入必要的库 Python复制 import …...
SpringCloud系列教程:微服务的未来(二十三)SpringAMQP快速入门、Work Queues、Fanout交换机
前言 Spring AMQP是Spring框架中用于与消息中间件(如RabbitMQ)进行交互的一个项目,它简化了消息发送、接收以及消息处理的过程。通过Spring AMQP,开发者可以快速实现基于RabbitMQ的消息传递系统。本文将介绍Spring AMQP的快速入门…...
快速排序
目录 什么是快速排序: 图解: 递归法: 方法一(Hoare法): 代码实现: 思路分析: 方法二(挖坑法): 代码实现: 思路分析: 非递…...
【C++ 真题】P1824 进击的奶牛
P1824 进击的奶牛 题目描述 Farmer John 建造了一个有 N N N( 2 ≤ N ≤ 1 0 5 2 \leq N \leq 10 ^ 5 2≤N≤105) 个隔间的牛棚,这些隔间分布在一条直线上,坐标是 x 1 , x 2 , ⋯ , x N x _ 1, x _ 2, \cdots, x _ N x1,x2,⋯,xN&a…...
HCIA项目实践--RIP的拓展配置
9.4.7 RIP的拓展配置 (1)RIPV2的手工认证 RIPv2 的手工认证是增强网络安全性的手段。管理员手动配置密钥,路由器在收发 RIPv2 路由更新消息时,会对消息中的认证信息进行检查。发送方添加密钥,接收方用预设密钥验证。若…...
MyBatis映射文件 <resultMap> 元素详解与示例
引言 <resultMap> 是 MyBatis 中最核心的映射配置元素,用于解决数据库字段与 Java 对象属性之间的复杂映射问题,尤其是字段名不一致、嵌套对象关联、集合映射等场景。ResultMap 的设计思想是,对简单的语句做到零配置,对于复…...
leetcode刷题记录(一百零二)——45. 跳跃游戏 II
(一)问题描述 45. 跳跃游戏 II - 力扣(LeetCode)45. 跳跃游戏 II - 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] …...
2004-2016年各省煤炭基础储量数据
2004-2016年各省煤炭基础储量数据 1、时间:2004-2016年 2、指标:行政区划代码、地区、年份、煤炭基础储量(亿吨) 3、范围:31省 4、来源:国家统计局、统计年鉴 5、指标解释:煤炭基础储量是指在特定区域内ÿ…...
【含开题报告+文档+PPT+源码】基于spring boot的固定资产管理系统
开题报告 本研究论文提出了一种基于SpringBoot框架构建的全面且高效的固定资产管理系统,旨在优化企业内部的固定资产全生命周期管理流程。该系统集成了员工权限管理、业务流程处理及数据分析于一体,实现了员工便捷的登录注册功能,并通过安全…...
数据结构-链式二叉树
文章目录 一、链式二叉树1.1 链式二叉树的创建1.2 根、左子树、右子树1.3 二叉树的前中后序遍历1.3.1前(先)序遍历1.3.2中序遍历1.3.3后序遍历 1.4 二叉树的节点个数1.5 二叉树的叶子结点个数1.6 第K层节点个数1.7 二叉树的高度1.8 查找指定的值(val)1.9 二叉树的销毁 二、层序…...
C++中接口与继承的区别(自我学习用)
继承(Inheritance)和 接口(Interface)是面向对象编程(OOP)中的两种不同概念,虽然在 C 中没有像 Java 那样的 interface 关键字,但可以通过 纯虚函数 来实现接口的概念。让我们详细比…...
vue2拖拽式页面构建
在Vue 2中构建一个拖拽式页面,你可以使用第三方库如vuedraggable,它是基于Sortable.js的一个Vue组件,非常适合用于实现拖拽功能。 步骤 1: 安装vuedraggable 首先,你需要安装vuedraggable。在你的Vue项目中,运行以下命…...
ASUS/华硕天选3 FA507R FA707R 原厂Win11 21H2家庭版系统 工厂文件 带ASUS Recovery恢复
华硕工厂文件恢复系统 ,安装结束后带隐藏分区,带一键恢复,以及机器所有的驱动和软件。 支持型号:FA507RC, FA507RE, FA507RM, FA507RW, FA707RC, FA707RE, FA707RM, FA707RW, FA507RH, FA707RH, FA507RR, FA707RR 系统版本&…...
部署onlyoffice后,php版的callback及小魔改(logo和关于)
作为这篇博文的补充CentOS9 安装Docker+Dpanel+onlyoffice(https、更改字体、字号、去除限制)的避坑笔记,现在继续… 本次主要内容有:php中callback的调用、自签证书调用callback遇到SSL certificate problem: unable to get local issuer certificate问题、修改onlyoffic…...
轻松打造专属音乐库:Alger Music本地部署与远程访问全流程解析
文章目录 前言1. 安装Docker2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 嗨,大家好!今天我要给大家安利一款超级棒的第三方网抑云音乐播放器。这款神器不仅颜值超高、功能强大,还能让你彻底告别那些烦人的…...
redis集群的分片技术
Redis 集群模式通过 数据分片(Sharding) 技术将数据分布到多个节点上,从而实现横向扩展和高性能。以下是 Redis 集群分片技术的详细介绍: 1. 数据分片的基本原理 Redis 集群将整个数据集划分为 16384 个哈希槽(Hash S…...
OA审批 / 流程管理 :流程设计/审批人设置/选择节点的审批人 | Java获取树形用户列表
文章目录 引言I 树形用户列表VO通用树状节点类型通用树状节点对象II 获取树形用户列表准备部门信息和用户信息III 其他相关表结构组织机构引言 流程设计/审批人设置/选择节点的审批人 树形显示用户列表(安装组织机构层级显示) 接口返回的树形用户的数据结构I 树形用户列表VO …...
【Pandas】pandas Series case_when
Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐,使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值 pandas.Series.…...
.NET 9.0 的 Blazor Web App 项目,自定义日志 TLog V2 使用备忘
一、TLog V1 使用静态数据库上下文,优点是速度快,缺点是内存占用大,参见 .NET 9.0 的 Blazor Web App 项目、Bootstrap Blazor 组件库、自定义日志 TLog 使用备忘_navigationmanager.tobaserelativepath-CSDN博客 二、 TLog V2 改为 依赖注入…...
数据仓库与数据挖掘记录 二
1.数据仓库的产生 从 20 世纪 80 年代初起直到 90 年代初,联机事务处理一直是关系数据库应用的主流。然而,应用需求在不断地变化,当联机事务处理系统应用到一定阶段时,企业家们便发现单靠拥有联机事务处理系统已经不足以获得市场竞争的优势,他们需要对其自身业务的运作以及整个…...
SolidWorks速成教程P3-1【零件 | 第一节】——特征成型介绍拉伸凸台/基体与设计树
零件是由特征构成的,所以零件学习也叫做特征学习。 特征命令,我们可以认为是将二维草图变成三维实体的过程,学习完成后我们就能画出很多东西了,比如画一台手机的外形,学完后我们一起画一个手机支架,来熟练…...
vscode插件Remote - SSH使用教程
Remote - SSH 是一款非常实用的 Visual Studio Code (VSCode) 扩展插件,它允许开发者通过SSH连接到远程服务器,并像在本地一样进行代码编辑和调试。这意味着你可以直接在VS Code中打开位于远程机器上的文件夹,并利用本地安装的VS Code功能,如语法高亮、智能感知、Git集成等…...
sqli_labs_master Less-8 时间盲注,boolen盲注 获取数据库中的表、列
获取当前数据库名 import requestsdef inject_database(url):namemax_length20 # 假设数据库名称最大长度为20# ASCII范围:数字、字母、下划线(_)low{a: 97, z: 122, A: 65, Z: 90, 0: 48, 9: 57, _: 95}high{97: a, 122: z, 65: A, 90: Z,…...
Android Studio:RxJava事件流Observable
一、什么是“事件流”? 简单来说,事件流 就是数据从一个地方(发布者)传递到另一个地方(订阅者)的过程,像是一个“流水线”。发布者发布事件(数据),订阅者则在…...
Influxdb学习 - TSM存储
InfluxDb为什么这么快 InfluxDB 之所以在时序数据场景下表现出色,主要得益于其专为时序数据优化的架构设计和多层次的性能优化策略 专为时序设计:TSM 引擎、列式存储、时间分区等特性直接针对时序数据痛点。写入优化:内存缓存 + 批量刷盘 + 高压缩率,最大化吞吐。查询加速…...
监控系统磁盘 I/O 性能的命令
iostat -x -k 1 是一个用于监控系统磁盘 I/O 性能的命令,下面详细解释该命令以及其输出各项的含义。 命令参数解释 iostat:这是一个用于报告中央处理器(CPU)统计信息和磁盘输入 / 输出统计信息的工具。 -x:显示扩展的…...
NumPy中生成和堆叠数组、生成切片的特殊对象:np.r_ np.c_ np.s_
在NumPy中有三个特殊的对象,非常好用: np.r_:按行连接两个数组,也就是将两个数组垂直堆叠。np.c_:按列连接两个数组,也就是将两个数组水平堆叠。np.s_:生成用于切片的slice对象。 下面详细介绍…...