SQLite使用的临时文件(二)

返回:SQLite—系列文章目录   

上一篇:SQLite数据库文件损坏的可能几种情况

下一篇:未发表 

​ 1. 引言

SQLite的显着特点之一它是一个数据库由一个磁盘文件组成。 这简化了 SQLite 的使用,因为移动或备份 数据库就像复制单个文件一样简单。它还使 SQLite适合用作应用程序文件格式。 但是,当一个完整的数据库保存在单个磁盘文件中时, SQLite确实在处理数据库的过程。

本文介绍SQLite的各种临时文件创建和使用。它描述了何时创建文件,何时它们被删除,它们的用途,为什么它们很重要, 以及如何在创建临时文件的系统上避免它们陷阱。

不考虑SQLite使用临时文件的方式 SQLite与应用程序签订的合约的一部分。这 本文档中的信息是对如何操作的正确描述 SQLite在编写本文档时或最后编写时运行更新。但是不能保证SQLite的未来版本 将以相同的方式使用临时文件。新型临时可能会使用文件,并且一些当前的临时文件使用可能会停止在SQLite 的未来版本中。

2. 九种临时文件

SQLite目前使用九种不同类型的临时文件:

  1. 回滚日志
  2. 超级期刊
  3. 预写日志 (WAL) 文件
  4. 共享内存文件
  5. 报表日记帐
  6. TEMP 数据库
  7. 视图和子查询的具体化
  8. 瞬态指数
  9. VACUUM 使用的瞬态数据库

有关每个这些临时文件类型的附加信息 在续集中。

2.1. 回滚日志

回滚日志是用于实现的临时文件 SQLite中的原子提交和回滚功能。(有关其工作原理的详细讨论,请参阅 标题为 Atomic Commit In SQLite 的单独文档。 回滚日志始终位于同一目录中作为数据库文件,并且与数据库同名文件,但附加了 8 个字符的“-journal”除外。 回滚日志通常在事务发生时创建首先启动,通常在事务时被删除 提交或回滚。 回滚日志文件对于实现 SQLite的原子提交和回滚功能。没有 回滚日志,SQLite 将无法回滚 事务不完整,以及是否发生崩溃或断电在事务过程中,整个数据库可能会在没有回滚日志的情况下损坏。

回滚日志通常在事务的开始和结束。但也有例外到这个规则。

如果在交易过程中发生崩溃或断电, 然后,回滚日志文件将保留在磁盘上。下次 另一个应用程序尝试打开数据库文件,它注意到 被遗弃的回滚日志的存在(我们称之为“热 journal“,并使用 日志将数据库还原到启动前的状态 未完成的交易。这就是SQLite的实现方式 原子提交。

如果应用程序使用 选项:

PRAGMA locking_mode=EXCLUSIVE;

SQLite 在第一个 独占锁定模式会话中的事务。但是在 事务结束时,它不会删除回滚 杂志。回滚日志可能被截断,或者其标头可能被截断 可能归零(取决于您使用的 SQLite 版本) 但不会删除回滚日志。回滚日志是 在退出独占访问模式之前不会删除。

回滚日志的创建和删除也会被journal_mode编译指示更改。 默认日记模式为 DELETE,这是默认行为 在每个事务结束时删除回滚日志文件, 如上所述。PERSIST 日志模式放弃删除 日志文件,而是覆盖回滚日志头 使用零,以防止其他进程回滚 日志,因此具有与删除日志文件相同的效果 无需实际从磁盘中删除文件的费用。在其他 words,日志模式 PERSIST 表现出与所见相同的行为 在 EXCLUSIVE 锁定模式下。这 OFF 日志模式会导致 SQLite 完全省略回滚日志。 换言之,如果日志模式为 设置为 OFF。 OFF 日志模式禁用原子 SQLite的提交和回滚功能。ROLLBACK 命令 设置了 OFF 日志模式时不可用。如果发生碰撞或电源 损失发生在使用 OFF 日志的事务中间 模式下,无法恢复,数据库文件可能会 去腐败。 MEMORY 日志模式导致回滚日志存储在内存而不是磁盘。ROLLBACK 命令在以下情况下仍然有效日志模式是 MEMORY,但因为磁盘上不存在 恢复、崩溃或断电 在使用 MEMORY 日志模式可能会导致数据库损坏。

2.2. 预写日志(WAL)文件

使用预写日志或 WAL 文件代替回滚日志 当 SQLite 在 WAL 模式下运行时。与回滚日志一样, WAL 文件的目的是实现原子提交和回滚。 WAL 文件始终位于同一目录中 作为数据库文件,并且与数据库同名 文件,但附加了 4 个字符“-wal”的文件除外。 WAL 文件是在首次连接到 数据库被打开,通常在最后 与数据库的连接将关闭。但是,如果最后一个连接 没有干净地关机,WAL文件将保留在文件系统中 并将在下次数据库时自动清理 打开。

2.3. 共享内存文件

在 WAL 模式下运行时,所有 SQLite 数据库连接都关联 使用相同的数据库文件需要共享一些用作 WAL 文件的索引。在大多数实现中,此共享内存是 通过在为此目的创建的文件上调用 mmap() 来实现: 共享内存文件。共享内存文件(如果存在)位于 与数据库文件位于同一目录中,并且与 数据库文件,但附加了 4 个字符“-shm”的除外。 共享内存文件仅在 WAL 模式下运行时存在。

共享内存文件不包含持久性内容。唯一的目的 的共享内存文件是提供共享内存块以供使用 通过多个进程在 WAL 模式下访问同一数据库。 如果 VFS 能够提供访问共享的替代方法 内存,则可以使用替代方法而不是 共享内存文件。例如,如果 PRAGMA locking_mode设置为 EXCLUSIVE(表示只有一个进程能够访问数据库 文件),则共享内存将从堆而不是从堆中分配 共享内存文件,而共享内存文件永远不会 创建。

共享内存文件与其关联的 WAL 文件具有相同的生存期。 共享内存文件是在创建 WAL 文件时创建的,并且是 删除 WAL 文件时删除。在 WAL 文件恢复期间, 共享内存文件是根据 正在恢复的 WAL 文件。

2.4. 超级日志文件

超级日志文件用作原子提交的一部分 当单个事务对多个事务进行更改时的处理 已使用 ATTACH 语句添加到单个数据库连接的数据库。超级日志文件始终是 与主数据库文件位于同一目录中 (主数据库文件是标识的数据库 在创建数据库连接的原始 sqlite3_open()、sqlite3_open16() 或 sqlite3_open_v2() 调用中) 带有随机后缀。超级日志文件包含 所有附加的辅助数据库的名称 在交易过程中已更改。多数据库 删除超级日志文件时提交事务。 请参阅标题为“在 SQLite 中进行原子提交”的文档。 其他细节。

如果没有超级日志,事务将提交到多数据库上 事务对于每个数据库都是原子的,但它 不会在所有数据库中都是原子的。换言之,如果 提交在中间因崩溃或断电而中断,然后 对其中一个数据库的更改可能会完成,而更改 可能会回滚到另一个数据库。超级期刊导致所有 将所有数据库中的更改进行回滚或一起提交。

超级日志文件仅用于以下 COMMIT 操作 涉及多个数据库文件,其中至少两个数据库 满足以下所有要求:

  1. 数据库由事务修改
  2. PRAGMA 同步设置未关闭
  3. PRAGMA journal_mode不是 OFF、MEMORY 或 WAL

这意味着 SQLite 事务不是原子的 跨多个数据库文件断电时,数据库 文件已关闭同步或使用日记时 OFF、MEMORY 或 WAL 模式。用于同步 OFF 和 journal_modes OFF 和 MEMORY,如果出现以下情况,数据库通常会损坏 事务提交因断电而中断。对于 WAL 模式,单个数据库文件以原子方式更新 在断电的情况下,但在多文件事务的情况下, 某些文件可能会回滚,而其他文件可能会在之后向前滚动 电源已恢复。

2.5. 报表日志文件

语句日志文件用于回滚 大型事务中的单个语句。例如,假设 UPDATE 语句将尝试修改数据库中的 100 行。 但是在修改前 50 行后,UPDATE 命中 约束冲突,应阻止整个语句。 语句日志用于撤消前 50 行更改 以便将数据库还原到开始时的状态 的声明。

仅为 UPDATE 或 INSERT 语句创建语句日记帐 这可能会更改数据库的多行,并且可能会命中 约束或触发器中的 RAISE 异常,因此需要 撤消部分结果。 如果 UPDATE 或 INSERT 不包含在 BEGIN 中...COMMIT 和 if 那么,同一数据库连接上没有其他活动语句 自 Ordinary 以来,没有创建任何报表日记 可以改用回滚日志。 如果替代冲突解决算法是 使用。例如:

UPDATE OR FAIL ...
UPDATE OR IGNORE ...
UPDATE OR REPLACE ...
UPDATE OR ROLLBACK ...
INSERT OR FAIL ...
INSERT OR IGNORE ...
INSERT OR REPLACE ...
INSERT OR ROLLBACK ...
REPLACE INTO ....

语句日记被赋予一个随机名称,不一定 在与主数据库相同的目录中,并且是自动的 在交易结束时删除。的大小 报表日记帐与实施的更改大小成正比 通过导致语句日志的 UPDATE 或 INSERT 语句 要创建。

2.6. TEMP数据库

使用“CREATE TEMP TABLE”语法创建的表仅 对数据库连接可见,其中“CREATE TEMP TABLE” 语句最初是计算的。这些 TEMP 表一起 与任何关联的索引、触发器和视图一起 存储在单独的临时数据库文件中,该文件创建为 一旦看到第一个“CREATE TEMP TABLE”语句。 这个单独的临时数据库文件还具有关联的 回滚日志。 删除用于存储 TEMP 表的临时数据库文件 当数据库连接关闭时自动 使用 sqlite3_close()。

TEMP 数据库文件与辅助数据库非常相似 使用 ATTACH 语句添加的文件,尽管有一些 特殊属性。 当数据库连接关闭时,始终会自动删除 TEMP 数据库。 TEMP 数据库始终使用 synchronous=OFF 和 journal_mode=PERSIST PRAGMA 设置。 而且,TEMP 数据库不能与 DETACH 一起使用,也不能 另一个进程 ATTACH TEMP 数据库。

与 TEMP 数据库关联的临时文件及其 仅当应用程序使用 “CREATE TEMP TABLE”语句。

2.7. 视图和子查询的具体化

包含子查询的查询有时必须计算 子查询分开,并将结果存储在临时 表,然后使用临时表的内容进行评估 外部查询。 我们称之为“物化”子查询。 SQLite 中的查询优化器试图避免实现, 但有时它并不容易避免。 通过具体化创建的临时表将分别存储 在他们自己单独的临时文件中,这是自动的 在查询结束时删除。 这些临时表的大小取决于 当然,数据在子查询的具体化中。

IN 运算符右侧的子查询必须经常 被物化。例如:

SELECT * FROM ex1 WHERE ex1.a IN (SELECT b FROM ex2);

在上面的查询中,将评估子查询“SELECT b FROM ex2” 其结果存储在一个临时表(实际上是一个临时表)中 index),允许确定值 ex2.b 使用简单的二进制搜索存在。构建此表后, 运行外部查询,并针对每个预期结果行进行检查 用于查看 ex1.a 是否包含在临时表中。 仅当 check 为 true 时,才会输出该行。

为了避免创建临时表,可能会重写查询 如下:

SELECT * FROM ex1 WHERE EXISTS(SELECT 1 FROM ex2 WHERE ex2.b=ex1.a);

最新版本的 SQLite(版本 3.5.4,2007-12-14)及更高版本) 将自动执行此重写 如果列 ex2.b 上存在索引。

如果 IN 运算符的右侧可以是值列表 如下所示:

SELECT * FROM ex1 WHERE a IN (1,2,3);

IN 右侧的列表值被视为 必须具体化的子查询。换言之, 上一个语句的行为好像是:

SELECT * FROM ex1 WHERE a IN (SELECT 1 UNION ALL
                              SELECT 2 UNION ALL
                              SELECT 3);

临时索引始终用于保存 IN 运算符的右侧,当该右侧 是值的列表。

子查询在出现时可能还需要具体化 在 SELECT 语句的 FROM 子句中。例如:

SELECT * FROM ex1 JOIN (SELECT b FROM ex2) AS t ON t.b=ex1.a;

根据查询,SQLite 可能需要实现 “(SELECT b FROM ex2)” 子查询到临时表中,然后 执行 ex1 和临时表之间的联接。这 查询优化器试图通过“扁平化”来避免这种情况 查询。在前面的示例中,查询可以扁平化, SQLite 会自动将查询转换为

SELECT ex1.*, ex2.b FROM ex1 JOIN ex2 ON ex2.b=ex1.a;

更复杂的查询可能会也可能不会使用查询 展平以避免临时表。无论是否 查询是否可以扁平化取决于以下因素:是否 或者子查询或外部查询是否包含聚合函数, ORDER BY 或 GROUP BY 子句、LIMIT 子句等。 查询何时可以和不能扁平化的规则是 非常复杂,超出了本文档的范围。

2.8. 瞬态指数

SQLite可以利用瞬态索引来 实现 SQL 语言功能,例如:

  • ORDER BY 或 GROUP BY 子句
  • 聚合查询中的 DISTINCT 关键字
  • 由 UNION、EXCEPT 或 INTERSECT 联接的复合 SELECT 语句

每个瞬态索引都存储在其自己的临时文件中。 暂时性索引的临时文件将自动删除 在使用它的语句的末尾。

SQLite努力使用预先存在的ORDER BY子句来实现 指数。如果已经存在适当的索引,SQLite 将行走 索引,而不是基础表,以提取 请求的信息,从而导致行出现在 所需的顺序。但是如果SQLite找不到合适的索引 它将评估查询并将每一行存储在瞬态索引中 其数据是行数据,其键是 ORDER BY 项。 评估查询后,SQLite 返回并遍历 从头到尾的瞬态索引,以便输出 按所需顺序排列的行。

SQLite 通过对 GROUP BY条款建议的顺序。每个输出行是 与前一个相比,看看它是否启动了一个新的“组”。 按 GROUP BY 术语排序的方式完全相同 作为按 ORDER BY 条款排序。使用预先存在的索引 如果可能,但如果没有合适的索引可用,则暂时性 索引已创建。

聚合查询上的 DISTINCT 关键字由 在临时文件中创建暂时性索引并存储 该索引中的每个结果行。计算新结果行时 进行检查以查看它们是否已存在于瞬态中 索引,如果这样做,则丢弃新的结果行。

复合查询的 UNION 运算符是通过创建 临时文件中的暂时性索引并存储结果 暂时索引中的左子查询和右子查询,丢弃 重复。在评估了两个子查询后, 瞬态索引从头到尾遍历以生成最终输出。

复合查询的 EXCEPT 运算符是通过创建 临时文件中的暂时性索引,用于存储 在此瞬态索引中左键查询,然后删除结果 从瞬态索引的右子查询,最后步行 索引从头到尾得到最终输出。

复合查询的 INTERSECT 运算符由 创建两个单独的瞬态索引,每个索引都位于单独的 临时文件。计算左侧和右侧子查询 每个都变成一个单独的瞬态索引。然后是两个指数 一起行走,并出现在两个索引中的条目 是输出。

请注意,复合查询的 UNION ALL 运算符不 单独使用瞬态索引(当然是正确的 UNION ALL 的左子查询可能使用瞬态索引 取决于它们的组成方式。

2.9. VACUUM使用的瞬态数据库

VACUUM 命令的工作原理是创建一个临时文件 然后将整个数据库重建为该临时数据库 文件。然后,将临时文件的内容复制回去 放入原始数据库文件中,临时文件是 删除。

由 VACUUM 命令创建的临时文件仅存在 在命令本身的持续时间内。临时的大小 文件不会比原始数据库大。

3. 编译时参数和编译SQLITE_TEMP_STORE

与事务控制关联的临时文件,即 回滚日志、超级日志、预写日志 (WAL) 文件、 和共享内存文件,始终写入磁盘。 但其他类型的临时文件可能存储在内存中 只有并且从未写入磁盘。 无论是否是回滚以外的临时文件, super 和语句日志写入磁盘或仅存储在内存中 取决于 SQLITE_TEMP_STORE编译时参数,temp_store Pragma, 以及临时文件的大小。

SQLITE_TEMP_STORE 编译时参数 #define 是一个值为 介于 0 和 3 之间的整数(含 0 和 3)。SQLITE_TEMP_STORE编译时参数的含义如下:

  1. 无论设置如何,临时文件始终存储在磁盘上 temp_store pragma。
  2. 默认情况下,临时文件存储在磁盘上,但这可以是 被 temp_store 编译指示覆盖。
  3. 默认情况下,临时文件存储在内存中,但这可以是 被 temp_store 编译指示覆盖。
  4. 无论设置如何,临时文件始终存储在内存中 temp_store pragma。

SQLITE_TEMP_STORE compile-time 参数的默认值为 1, 这意味着将临时文件存储在磁盘上,但提供选项 使用temp_store编译指示覆盖行为。

编译指示temp_store 一个整数值,该值也会影响存储位置的决策 临时文件。temp_store pragma 的值具有 含义如下:

  1. 根据确定,对临时文件使用磁盘或内存存储 通过 SQLITE_TEMP_STORE 编译时参数。
  2. 如果 SQLITE_TEMP_STORE compile-time 参数指定 临时文件,然后覆盖该决定并改用磁盘存储。 否则,请遵循 SQLITE_TEMP_STORE 编译时的建议 参数。
  3. 如果 SQLITE_TEMP_STORE compile-time 参数指定了 临时文件,然后覆盖该决定并改用内存存储。 否则,请遵循 SQLITE_TEMP_STORE 编译时的建议 参数。

temp_store 编译指示的默认设置为 0, 这意味着遵循SQLITE_TEMP_STORE编译时的建议 参数。

重申一下,SQLITE_TEMP_STORE compile-time 参数和仅temp_store编译指示 影响回滚日志以外的临时文件 和超级期刊。回滚日志和 超级日志始终写入磁盘,无论 SQLITE_TEMP_STORE 编译时参数和temp_store编译指示。

4. 其他临时文件优化

SQLite使用最近读取和写入的数据库的页面缓存 页面。此页面缓存不仅用于主数据库 文件,但也适用于暂时性索引和存储在临时 文件。如果 SQLite 需要使用临时索引或表,并且 SQLITE_TEMP_STORE 编译时参数和temp_store编译指示是 设置为在磁盘上存储临时表和索引,信息 最初仍存储在页面缓存的内存中。这 临时文件未打开,信息不真实 写入磁盘,直到页面缓存已满。

这意味着对于许多常见情况,临时表 索引很小(小到可以放入页面缓存) 不会创建临时文件,也不会发生磁盘 I/O。只 当临时数据变得太大而无法放入 RAM 时 信息溢出到磁盘。

每个临时表和索引都有其自己的页面缓存 可以存储确定的最大数据库页数 通过 SQLITE_DEFAULT_TEMP_CACHE_SIZE 编译时参数。 (默认值为 500 页。 页面缓存中的最大数据库页数为 每个临时表和索引都相同。该值不能 在运行时或按表或按索引进行更改。 每个临时文件都有自己的私有页面缓存,其 拥有SQLITE_DEFAULT_TEMP_CACHE_SIZE页数限制。

5. 临时文件存储位置

在其中创建临时文件的目录或文件夹是 由特定于操作系统的 VFS 确定。

在类 unix 系统上,按以下顺序搜索目录:

  1. PRAGMA temp_store_directory 或 sqlite3_temp_directory 全局变量设置的目录
  2. SQLITE_TMPDIR环境变量
  3. TMPDIR 环境变量
  4. /var/tmp
  5. /usr/tmp
  6. /tmp
  7. 当前工作目录 (“.”)

上述第一个被发现存在并具有写入和 使用 execute bits set。最后的“.”回退对某些人来说很重要 在 chroot 监狱中使用 SQLite 的应用程序没有 可用的标准临时文件位置。

在 Windows 系统上,按以下顺序搜索文件夹:

  1. PRAGMA temp_store_directory 或 sqlite3_temp_directory 全局变量设置的文件夹
  2. GetTempPath() 系统接口返回的文件夹。

SQLite本身并不关注环境变量 在这种情况下,尽管 GetTempPath() 系统调用可能是这样做的。 CYGWIN构建的搜索算法是不同的。选中 源代码了解详情。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/487968.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux用户管理1

linux系统可以多用户同时登录,在各自权限下做各自的事情 useradd添加普通用户,之后使用suusername切换用户 所有用户中,root用户权限最大,对应uid,gid均为0,uid为用户编号,gid为用户所在组编号…

力扣算题【第二期】

文章目录 1.反转链表1.1 算法题目1.2 算法思路1.3 代码实现 2.回文链表2.1 算法题目2.2 算法思路2.3 代码实现 1.反转链表 1.1 算法题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 1.2 算法思路 1.设置工作指针p,来遍历链表。 2.采…

基于java+SpringBoot+Vue的就业信息管理系统设计与实现

基于javaSpringBootVue的就业信息管理系统设计与实现 开发语言:Java数据库:MySQL技术:SpringBootMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 本就业信息管理系统以springboot作为框架,b/s模式以及MySql作为后台运行的数据库…

FPGA高端项目:解码索尼IMX327 MIPI相机转HDMI输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存HDMI输出工程源码架构 6、工程源码…

视频码率与分辨率的参考表

视频码率与分辨率的参考表 通常情况下: 1080*720的分辨率,用5000K左右; 720*576的分辨率,用3500K左右; 640*480的分辨率,用1500K左右。

微服务高级篇(四):多级缓存:Nginx本地缓存 --- Redis缓存 --- 进程缓存

文章目录 一、多级缓存概念二、准备工作【导入案例,并搭建Nginx反向代理】2.1 导入商品案例2.1.1 安装MySQL2.1.2 导入SQL2.1.3 导入Demo工程2.1.4 启动2.1.5 导入商品查询页面 三、JVM进程缓存【第三级缓存】3.1 本地进程缓存与分布式缓存的区别3.2 本地进程缓存&a…

huawei 华为 交换机 配置 LACP 模式的链路聚合示例 (交换机之间直连)

组网需求 如 图 3-22 所示, SwitchA 和 SwitchB 通过以太链路分别都连接 VLAN10 和 VLAN20 的网络,且SwitchA 和 SwitchB 之间有较大的数据流量。用户希望 SwitchA 和 SwitchB 之间能够提供较大的链路带宽来使相同VLAN 间互相通信。在两台 Switch 设备上…

从政府工作报告中的IT热词统计探计算机行业发展(三)智能网联新能源汽车:2次

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划,不仅反映了国家整体的发展态势,也为各行各业提供了发展的指引和参考。随着信息技术的快速发展,计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

Flask python 开发篇:模型(model)的使用

这里我直接分享方法,因为我还有点没搞太明白,所以暂不叙述过多,后面再来补充 我在对应的版块内(也就是跟蓝图同级别),新增了models.py文件,内容如下: from project import testmyselfdb from sqlalchemy.…

docker部署gitlab 报错的问题!!!

1、什么是gitlab? Gitlab是一个用于仓库管理系统的开源项目,使用git作为代码管理工具,并在此基础上搭建起来的web服务。Gitlab有乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它由Ruby写成。后来,一些部分用Go语…

数据库系统概论(超详解!!!) 第四节 关系数据库标准语言SQL(Ⅲ)

1.连接查询 连接查询&#xff1a;同时涉及多个表的查询 连接条件或连接谓词&#xff1a;用来连接两个表的条件 一般格式&#xff1a; [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> [<表名1>.]<列名1> BETWEEN [&l…

测试环境搭建整套大数据系统(十二:挂载磁盘到hadoop环境)

一&#xff1a;链接硬盘 将硬盘连接到计算机的 SATA 接口或 USB 接口&#xff0c;并确保硬盘通电并处于可用状态。 二&#xff1a;查看硬盘信息 sudo fdisk -l三&#xff1a;创建分区 gdisk /dev/vbd重新扫描磁盘 partprobe /dev/vdb格式化磁盘 mkfs.ext4 /dev/vdb2查看磁…

ICMP协议

ICMP&#xff08;Internet Control Message Protocol&#xff0c;互联网控制消息协议&#xff09;是TCP/IP协议族的一个重要组成部分&#xff0c;位于网络层&#xff0c;主要用于在IP主机、路由器之间传递控制消息&#xff0c;报告网络错误或提供有关异常情况的通知。ICMP报文格…

flask_restful结合蓝图使用

在蓝图中&#xff0c;如果使用 Flask_RESTful &#xff0c; 创建 Api 对象的时候&#xff0c;传入蓝图对象即可&#xff0c;不再是传入 app 对象 /user/__init__.py from flask.blueprints import Blueprintuser_bp Blueprint(user,__name__)from user import views /user…

Spring Boot整合Camunda打造高效工作流程

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

【分布式】——分布式事务

分布式事务 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/tree-learning-notes ⭐⭐⭐⭐⭐⭐ Spring专栏&#x1f449;https://blog.csdn.net/weixin_53580595/category_12279588.html SpringMVC专…

STM32之HAL开发——Keil调试工具介绍

Debug介绍 在Keil工具中有许多常用的小工具&#xff0c;下面将会依次为大家介绍每个工具的用途。 命令行窗口 在窗口内可以输入一些指令&#xff0c;来进行断点设置以及删除&#xff0c;一般不常用 反汇编窗口 可以查看当前C代码的汇编指令 标志窗口 寄存器窗口 可以用来查看C…

基于nodejs+vue智能菜谱推荐系统python-flask-django-php

本文拟采用nodejs技术和express 搭建系统框架&#xff0c;后台使用MySQL数据库进行信息管理&#xff0c;设计开发的智能菜谱推荐系统。通过调研和分析&#xff0c;系统拥有管理员和用户两个角色&#xff0c;主要具备登录注册、个人信息修改、对用户管理、类型管理、菜谱信息管理…

JMeter元件作用域和执行顺序

JMeter元件作用域和执行顺序 元件的基本介绍基本元件总结 作用域的基本介绍作用域的原则元件执行顺序Jmeter第一个案例&#xff1a; Jmeter三个重要组件&#xff08;重点&#xff09;线程组特点线程组分类线程组的属性案例分析 HTTP请求案例一&#xff08;使用HTTP请求路径来传…

学习鸿蒙基础(7)

一、Watch状态变量更改通知 Watch应用于对状态变量的监听。如果开发者需要关注某个状态变量的值是否改变&#xff0c;可以使用Watch为状态变量设置回调函数。 1、装饰器参数&#xff1a;必填。常量字符串&#xff0c;字符串需要有引号。是(string)> void自定义成员函数的方法…