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

InnoDB存储引擎对MVCC的实现

多版本并发控制 (Multi-Version Concurrency Control)


MVCC(Multi-Version Concurrency Control),即多版本并发控制,是一种并发控制方法,主要用于数据库管理系统中实现对数据库的并发访问。以下是MVCC的详细解释:

基本概念

MVCC通过为数据库中的每行数据维护多个版本,使得读操作不需要阻塞写操作,写操作也不需要阻塞读操作,从而提高了数据库的并发性能。在MVCC机制下,当一个事务读取数据时,它看到的是在其开始之前已提交的数据版本,从而保证了数据的一致性。

核心机制

‌版本创建‌:

当事务对数据进行修改时,不会直接在原数据上进行覆盖,而是创建一个新的数据版本。每个版本都有与之相关的创建事务的标识和时间戳。

‌读操作‌:

读事务在执行读取操作时,会根据自身的事务隔离级别,选择一个合适的数据版本进行读取。
在“读已提交”隔离级别下,读取的是已经提交的最新版本。
在“可重复读”隔离级别下,一个事务在第一次读取数据后,后续的读取都会基于第一次读取时确定的数据版本,从而保证了在一个事务内多次读取的一致性。

‌并发控制‌:

多个事务可以同时读取不同版本的数据,而不会相互阻塞,这大大提高了并发度。

‌冲突检测‌:

当写事务尝试提交时,系统会检查新创建的版本与其他并发事务是否存在冲突。如果没有冲突,则提交成功;如果有冲突,则根据隔离级别和预设的规则进行处理,可能导致写事务回滚。

‌Undo Log 支持‌:

通过Undo Log(回滚日志)来保存数据的旧版本,以便在需要回滚或提供特定版本的数据时使用。
 实现原理

在MySQL的InnoDB存储引擎中,MVCC的实现主要依赖三个部分:数据库隐式字段、undo log、Read View。

‌隐式字段‌:

InnoDB为每行数据添加了三个隐式字段:DB_ROW_ID(行ID)、DB_TRX_ID(创建事务ID)、DB_ROLL_PTR(回滚指针)。

‌undo log‌:

用于记录数据修改前的版本,以便在需要时回滚到之前的版本。

‌Read View‌:

读事务在执行读取操作时生成的一个读视图,用于确定哪些版本的数据对当前事务可见。
隔离级别

MVCC主要支持READ COMMITTED和REPEATABLE READ这两种隔离级别。在SERIALIZABLE隔离级别下,由于需要加锁来保证事务的串行化,因此不使用MVCC机制。

总结


MVCC通过维护数据的多个版本,并根据事务的隔离级别为读事务提供合适的数据版本,从而在保证并发执行的同时,确保了事务的一致性。它是提高数据库并发性能的重要技术之一。

请注意,以上内容主要基于MySQL的InnoDB存储引擎。不同的数据库系统或存储引擎在实现MVCC时可能会有所不同。在实际应用中,建议参考具体数据库系统的官方文档。

一致性非锁定读和锁定读 


在数据库事务管理中,尤其是在InnoDB存储引擎中,MySQL 提供了多种事务隔离级别来控制不同事务之间的并发访问。一致性非锁定读和一致性锁定读是两种常见的读操作,它们涉及如何保证事务隔离和数据一致性。以下是对这两种读操作的详细说明:

一致性非锁定读(Consistent Non-Locking Read)

一致性非锁定读是一种不加锁的读取操作,执行时不对数据加锁。这种操作通常用于事务的读取,允许多个事务并发读取同一数据而不会阻塞其他事务。为了确保数据的一致性,数据库会通过多版本并发控制(MVCC, Multi-Version Concurrency Control)来保证每个事务看到的是一致的视图。不对数据加锁,允许并发读取,使用MVCC来提供一致性保证,即通过读取事务开始时的快照数据,使得读取的结果一致且不受其他事务影响。

‌特点‌:

不对读取的数据加锁。
使用MVCC来提供一致性保证。
允许多个事务并发读取同一数据,不会阻塞其他事务。
常见于读已提交(Read Committed)和可重复读(Repeatable Read)隔离级别中。

‌示例‌:
START TRANSACTION;
SELECT * FROM accounts WHERE balance > 1000;


在可重复读隔离级别下,以上查询操作是一致性非锁定读,它通过MVCC确保事务在执行期间的一致性,并且在没有加锁的情况下能够读取数据。

一致性锁定读(Consistent Locking Read)

一致性锁定读是一种加锁的读取操作,通过在读取数据时加锁来确保数据的一致性。这种类型的读操作通常会阻塞其他事务对同一数据的修改或读取,直到当前事务完成。它适用于需要保证数据一致性且涉及数据修改的场景。

‌特点‌:

对读取的数据加锁,保证数据在读取期间不被其他事务修改。
可以防止脏读、不可重复读和幻读的发生。
可以在行级锁上加锁,从而锁定某行数据直到事务提交或回滚。
常见于可重复读(Repeatable Read)和串行化(Serializable)隔离级别中。

‌示例‌:
START TRANSACTION;
SELECT * FROM accounts WHERE balance > 1000 FOR UPDATE;


在可重复读隔离级别下,以上查询操作是一致性锁定读,通过FOR UPDATE子句,数据库会在读取时加排他锁,防止其他事务修改这条记录。

总结
一致性非锁定读适用于数据查询,不会阻塞其他事务的操作,适合高并发的环境。
一致性锁定读适用于需要修改数据或者对数据的一致性要求比较高的场景,如进行更新、删除等操作之前的读取。

通过理解这两种操作的区别,可以在不同的并发场景中选择合适的读取方式,达到最佳的性能与数据一致性保证。

请注意,以上内容仅供参考,具体实现和效果可能因MySQL版本和配置的不同而有所差异。在实际应用中,建议根据具体需求和场景选择合适的事务隔离级别和读操作方式。

InnoDB 对 MVCC 的实现 


InnoDB是MySQL最常用的存储引擎之一,它支持事务处理、行级锁定和外键约束等高级功能。InnoDB通过多版本并发控制(MVCC)来提高数据库的并发性能,并处理读写冲突。MVCC的实现主要依赖于以下几个组件:

‌隐藏字段‌:

InnoDB在每行数据中存储了一些隐藏字段,这些字段对于MVCC的实现至关重要。这些字段包括:
‌DB_TRX_ID‌:表示最近修改该记录的事务ID。
‌DB_ROLL_PTR‌:指向这条记录的上一个版本(存储在回滚段rollback segment中)。
‌DB_ROW_ID‌:隐含的自增ID,如果数据表没有主键,InnoDB会自动以DB_ROW_ID产生一个聚簇索引。
‌DELETE_BIT‌:记录被更新或删除的标志位。

‌Undo日志‌:

当数据被修改时,原始数据会被存储在Undo日志中。这允许系统在需要时构造出数据的早期版本。Undo日志记录了数据修改前的状态,用于事务回滚和多版本并发控制。

‌ReadView(读视图)‌:

ReadView用于判断事务可见性。当事务开始时,InnoDB会为该事务创建一个“读视图”,记录并维护系统当前活跃事务的ID。ReadView包含以下信息:
‌creator_trx_id‌:事务开始时的事务ID。
‌trx_ids‌:事务开始时所有活跃事务的ID列表。
‌up_limit_id‌:活跃事务中最小的事务ID。
‌low_limit_id‌:事务开始时系统中最大的事务ID+1。
ReadView用于判断某个版本的数据对当前事务是否可见。

‌版本链‌:

每个数据行都有一个版本链,记录了该行的所有历史版本。每个版本都包含一个事务ID和可能的前一个版本的指针。当事务读取数据时,InnoDB会根据读视图和版本链来选择合适的版本。

‌事务ID和可见性规则‌:

每个事务在开始时都会被分配一个唯一的事务ID,用于确定数据版本的可见性。事务在读取数据时,会根据事务快照选择合适的数据版本。读操作不会阻塞其他读操作或写操作,减少了锁的竞争,提高了并发性能。

‌执行流程‌:

当数据被修改时,原始数据会被复制到Undo日志中,并更新当前记录的DB_TRX_ID和DB_ROLL_PTR。当事务读取数据时,InnoDB会根据ReadView和版本链来判断哪个版本的数据对当前事务是可见的。

通过上述机制,InnoDB的MVCC能够在保证事务隔离性的同时,提高数据库的并发访问性能。MVCC允许不同事务看到不同时间点的数据快照,从而减少了锁的竞争,提高了并发性能。

请注意,MVCC的实现和细节可能会因数据库版本和配置的不同而有所差异。上述描述基于当前搜索结果中提供的信息,并可能随着技术的发展而有所更新。

RC 和 RR 隔离级别下 MVCC 的差异


RC(读已提交)和RR(可重复读)隔离级别下,MVCC(多版本并发控制)的差异主要体现在以下几个方面:

‌ReadView的生成时机‌:

在RC隔离级别下,每次执行select语句时都会生成一个新的ReadView。这意味着在同一个事务中,多次查询可能会看到不同的数据版本,因为每次查询时都会根据当前活跃的事务列表来创建ReadView。因此,RC隔离级别下可能存在不可重复读的问题。
在RR隔离级别下,ReadView只在事务开始时生成一次,并在整个事务期间保持不变。这意味着在同一个事务中,多次查询会看到相同的数据版本,从而保证了事务的可重复读性。

‌数据可见性判断‌:

在RC隔离级别下,每次查询时都会根据当前生成的ReadView来判断数据的可见性。如果某个数据版本的事务ID在ReadView的活跃事务列表中,则这个数据版本对当前事务是不可见的;否则,它是可见的。
在RR隔离级别下,查询时会使用事务开始时生成的ReadView来判断数据的可见性。这个判断逻辑与RC隔离级别类似,但由于ReadView在整个事务期间保持不变,所以保证了事务中多次查询的数据一致性。

‌幻读问题的处理‌:

需要注意的是,MVCC本身并不直接解决幻读问题。在RR隔离级别下,幻读问题通常是通过其他机制(如next-key lock)来解决的,而不是通过MVCC本身。
在RC隔离级别下,由于每次查询都会生成新的ReadView,因此可能无法有效防止幻读问题。

‌并发性能‌:

RC隔离级别由于每次查询都会生成新的ReadView,因此可能具有更高的并发性能,因为它减少了长时间持有锁的需求。
RR隔离级别由于在整个事务期间使用相同的ReadView,可能需要更严格的锁机制来防止幻读等问题,从而可能影响并发性能。

RC和RR隔离级别下MVCC的主要差异在于ReadView的生成时机和数据可见性的判断逻辑。这些差异导致了两种隔离级别在数据一致性、并发性能等方面的不同表现。在实际应用中,需要根据具体业务需求来选择合适的隔离级别。

相关文章:

InnoDB存储引擎对MVCC的实现

多版本并发控制 (Multi-Version Concurrency Control) MVCC(Multi-Version Concurrency Control),即多版本并发控制,是一种并发控制方法,主要用于数据库管理系统中实现对数据库的并发访问。以下是MVCC的详细解释&#…...

3D线上艺术展:艺术与技术的完美融合

随着数字技术的飞速发展,未来的艺术展览正逐步迈向线上线下融合的新阶段。其中,3D线上展览以其独特的魅力,成为线下展览的延伸与拓展,为艺术爱好者们开辟了全新的观赏途径。 对于艺术家和策展人而言,3D线上展览不仅打…...

EasyExcel(读取操作和填充操作)

文章目录 1.准备Read.xlsx(具有两个sheet)2.读取第一个sheet中的数据1.模板2.方法3.结果 3.读取所有sheet中的数据1.模板2.方法3.结果 EasyExcel填充1.简单填充1.准备 Fill01.xlsx2.无模版3.方法4.结果 2.列表填充1.准备 Fill02.xlsx2.模板3.方法4.结果 …...

【CSS in Depth 2 精译_095】16.3:深入理解 CSS 动画(animation)的性能

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…...

目前最流行的 Rust Web 框架有哪些?

目前最流行的 Rust Web 框架有哪些? 1. Actix Web:高性能之王,老牌框架 特点: 高性能:基于 Actor 模型,是目前 Rust 生态中最成熟、性能最强的 Web 框架之一。功能强大:支持 HTTP/1.x、HTTP/2、WebSocket 等,内置中间件和多种插件。社区支持广泛:拥有大量使用者,资料…...

连锁餐饮行业数据可视化分析方案

引言 随着连锁餐饮行业的迅速发展,市场竞争日益激烈。企业需要更加精准地把握运营状况、消费者需求和市场趋势,以制定科学合理的决策,提升竞争力和盈利能力。可视化数据分析可以帮助连锁餐饮企业整合多源数据,通过直观、动态的可…...

如何通过采购管理系统提升供应链协同效率?

供应链是企业运营的命脉,任何环节的延迟或失误都会对企业造成严重影响。在采购环节中,如何保证与供应商的协同效率,避免因信息不对称而导致的决策失误,是企业面临的一大挑战。采购管理系统作为数字化供应链管理的重要工具&#xf…...

1、Jmeter、jdk下载与安装

1、访问官网,点击下载Jmeter http://jmeter.apache.org/ 2、在等待期间,下载对应的Java https://www.oracle.com/cn/java/technologies/downloads/#jdk23-windows 3、全部下载好,先安装JDK ![在这里插入图片描述](https://i-blog.csdnimg…...

Scala图书管理系统

package org.app package daoimport org.app.models.BookModelimport scala.collection.mutable.ListBuffer//图书,数据操作层 class BookDAO {//加载图书,从文件中读入def loadBooks(): ListBuffer[BookModel] {val books new ListBuffer[BookModel](…...

Java 类加载机制

什么是类 类是现实世界的实体在计算中的映射、它将数据以及对这些数据的操作封装在一起。 类加载的定义 类加载是 JVM 运行时的一个动作、支持将 class 动态加载到 JVM 中 类加载是一种懒加载模式、按需加载。 类加载到五个过程 加载验证准备解释初始化 提一点&#xff0…...

Lombok是银弹?还是陷阱?

Lombok 是一个 Java 库,它通过注解简化和减少了 Java 中的样板代码(boilerplate code),例如 getter/setter 方法、构造函数、equals 和 hashCode 方法等。 对于是否将 Lombok 视为“银弹”或“陷阱”,这实际上取决于你…...

大数据技术-Hadoop(四)Yarn的介绍与使用

目录 一、Yarn 基本结构 1、Yarn基本结构 2、Yarn的工作机制 二、Yarn常用的命令 三、调度器 1、Capacity Scheduler(容量调度器) 1.1、特点 1.2、配置 1.2.1、yarn-site.xml 1.2.2、capacity-scheduler.xml 1.3、重启yarn、刷新队列 测试 向hi…...

CentOS修改docker镜像存储位置并进行数据迁移

在 CentOS 上修改 Docker 镜像存储位置并进行数据迁移是一个常见的需求。以下是一个详细的步骤指南,帮助你完成这个任务。 1. 停止 Docker 服务 首先,确保 Docker 服务已经停止,以避免在迁移过程中出现数据损坏。 sudo systemctl stop doc…...

xterm + vue3 + websocket 终端界面

xterm.js 下载插件 // xterm npm install --save xterm// xterm-addon-fit 使终端适应包含元素 npm install --save xterm-addon-fit// xterm-addon-attach 通过websocket附加到运行中的服务器进程 npm install --save xterm-addon-attach <template><div :…...

解锁 CSS:网页美化与布局的艺术

目录 一、CSS 是什么 二、CSS 的作用 三、CSS 的应用方式&#xff08;引用方式&#xff09; 四、选择器&#xff1a;如何挑选要 “打扮” 的元素 五、CSS 属性&#xff1a;丰富多样的 “服装款式” 字体属性&#xff1a; 文本属性&#xff1a;只能控制文字的相关样式。 …...

AWS K8s 部署架构

Amazon Web Services&#xff08;AWS&#xff09;提供了一种简化的Kubernetes&#xff08;K8s&#xff09;部署架构&#xff0c;使得在云环境中管理和扩展容器化应用变得更加容易。这个架构的核心是AWS EKS&#xff08;Elastic Kubernetes Service&#xff09;&#xff0c;它是…...

【鸿蒙NEXT】鸿蒙里面类似iOS的Keychain——关键资产(@ohos.security.asset)实现设备唯一标识

前言 在iOS开发中Keychain 是一个非常安全的存储系统&#xff0c;用于保存敏感信息&#xff0c;如密码、证书、密钥等。与 NSUserDefaults 或文件系统不同&#xff0c;Keychain 提供了更高的安全性&#xff0c;因为它对数据进行了加密&#xff0c;并且只有经过授权的应用程序才…...

电子电器架构 --- HUD的工作原理

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...

C# 窗体应用程序嵌套web网页,基于谷歌浏览器内核(含源码)

有一个winform项目&#xff0c;需要借助一个web项目来显示&#xff0c;并且对web做一些操作,web页目是需要用谷歌内核&#xff0c;基于谷歌 Chromium项目的开源Web Browser控件来开发写了一个demo。 安装步骤 第一步&#xff1a;右键项目&#xff0c;点击 管理NuGet程序包 , 输…...

FFmpeg 中 examples 使用教程

FFmpeg 中 examples FFmpeg 的 examples 目录包含了一系列示例程序,旨在展示如何使用 FFmpeg 的不同库和 API。这些示例涵盖了多种功能,包括音视频编解码、格式转换、过滤、网络传输等。以下是一些常见的示例程序及其功能介绍: 音频和视频解码: 示例程序展示了如何打开音视…...

自动化办公-合并多个excel

在日常的办公自动化工作中&#xff0c;尤其是处理大量数据时&#xff0c;合并多个 Excel 表格是一个常见且繁琐的任务。幸运的是&#xff0c;借助 Python 语言中的强大库&#xff0c;我们可以轻松地自动化这个过程。本文将带你了解如何使用 Python 来合并多个 Excel 表格&#…...

Docker搭建MySQL

Docker搭建MySQL 准备工作 先准备配置目录和持久化目录&#xff0c;举个栗子&#xff1a;mkdir -p /opt/module/mysql/{conf,data,log}准备配置文件*.cnf,放到/opt/module/mysql/conf目录下。当然不准备也没事&#xff0c;容器中有个默认配置&#xff1a;/etc/mysql/conf.d/m…...

亚马逊国际站商品爬虫:Python实战指南

在数字化时代&#xff0c;数据的价值不言而喻。对于电商领域而言&#xff0c;获取竞争对手的商品信息、价格、评价等数据&#xff0c;对于市场分析和策略制定至关重要。本文将带你了解如何使用Python编写爬虫&#xff0c;以亚马逊国际站为例&#xff0c;按照关键字搜索并获取商…...

pwntools用法

pwntools 是一个Python库&#xff0c; 用于编写二进制漏洞利用&#xff08;exploitation&#xff09;脚本 功能&#xff1a; 远程连接和本地连接&#xff1a; 支持通过TCP/UDP连接远程服务或与本地进程进行交互。Shellcode和ROP链构造&#xff1a; 提供了便捷的工具来生成和利…...

企业云盘怎么选?2024年免费版9款整理

文章介绍了以下9大企业云盘&#xff1a;1.亿方云&#xff1b;2.Worktile&#xff1b;3.百度网盘&#xff1b;4.腾讯云盘&#xff1b;5.阿里云盘&#xff1b;6.金山云盘&#xff1b;7.Dropbox&#xff1b;8.Box。 在企业日常管理中&#xff0c;文件存储和共享一直是个不小的难题…...

Linux之ARM(MX6U)裸机篇----5.仿stm32的LED驱动实验

一&#xff0c;启动文件 .global _start .global _bss_start /* 类似宏定义把__bss_start定义为_bss_start */ _bss_start:.word __bss_start.global _bss_end _bss_end:.word __bss_end_start:#设置处理器进入SVC模式mrs r0, cpsr /* 读取cpsr到r0 */bic r0, r0, …...

Qt从入门到入土(七)-实现炫酷的登录注册界面(下)

前言 Qt从入门到入土&#xff08;六&#xff09;-实现炫酷的登录注册界面&#xff08;上&#xff09;主要讲了如何使用QSS样式表进行登录注册的界面设计&#xff0c;本篇文章将介绍如何对登录注册界面进行整体控件的布局&#xff0c;界面的切换以及实现登录、记住密码等功能。…...

如何进行年度工作回顾?

发生了什么事&#xff1f; 什么事情进展顺利 &#xff1f; 什么事情进展不顺利&#xff1f; 如何适应未来&#xff1f; 年度回顾的定义&#xff1a;这是一种战略工具&#xff0c;能帮助人们清晰看到过去一年对业务、职业或个人生活的影响&#xff0c;可用于明确关键事件、找出问…...

spring默认线程池SimpleAsyncTaskExecutor特点为什么要尽量避免使用

在 Spring Boot 中&#xff0c;默认的线程池配置由 TaskExecutionAutoConfiguration 类提供&#xff0c;使用的是 SimpleAsyncTaskExecutor。 SimpleAsyncTaskExecutor特点 每次调用创建新线程&#xff1a; SimpleAsyncTaskExecutor 每次执行任务时都会创建一个新线程&#xf…...

每天40分玩转Django:Django表单集

Django表单集 一、知识要点概览表 类别知识点掌握程度要求基础概念FormSet、ModelFormSet深入理解内联表单集InlineFormSet、BaseInlineFormSet熟练应用表单集验证clean方法、验证规则熟练应用自定义配置extra、max_num、can_delete理解应用动态管理JavaScript动态添加/删除表…...

构建混合技术栈的统一监控与日志平台

文章目录 摘要引言构建统一监控与日志平台的核心思路痛点分析解决方案 平台架构设计架构概览 环境准备Java 服务的 Prometheus 指标导出Prometheus 指标采集模块Node.js 日志收集模块3. Logstash 配置4. Grafana 与 Kibana 配置 QA 环节总结未来展望参考资料 摘要 在多技术栈开…...

KOI技术-事件驱动编程(Sping后端)

1 “你日渐平庸&#xff0c;甘于平庸&#xff0c;将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的&#xff0c;那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人&#xff0c;和他们斗了那么久&#xff0c;最终却要变得和他们一样&#xff0c;…...

ubuntu 20.04 国内源安装docker

先更新软件包&#xff0c;安装备要apt软件 # 更新软件包索引 sudo apt-get update# 安装需要的软件包以使apt能够通过HTTPS使用仓库 sudo apt-get install ca-certificates curl gnupg lsb-release使用阿里云源 # 添加阿里云官方GPG密钥 curl -fsSL http://mirrors.aliyun.co…...

微信小程序 app.json 配置文件解析与应用

目录 一、什么是 app.json&#xff1f; 二、app.json 文件的基本结构 三、详细解析 app.json 配置项 1. pages&#xff1a;小程序页面路径配置 2. window&#xff1a;窗口样式配置 3. tabBar&#xff1a;底部标签栏配置 4. networkTimeout&#xff1a;网络请求超时配置 …...

C高级:思维导图Day2

目录 总览1 总览2 总览1 压缩与解压缩 打包与解包 软连接与硬链接 ubuntu下关机与重启指令 总览2 结束...

蓝桥杯(Java)(ing)

Java前置知识 输入流&#xff1a; &#xff08;在Java面向对象编程-CSDN博客里面有提过相关知识------IO流&#xff09; // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…...

[Pro Git#2] 分支管理 | branch fix_bug , feature | 处理合并冲突

目录 一、Issue模板文件 二、Pull Requests模板文件 分支管理 1. 理解分支 2. 创建与管理分支 1. 切换分支与提交历史 2. 合并分支 3. 删除分支 4. 解决合并冲突 6. 查看分支合并情况 快速创建并切换分支 分支管理策略 分支合并模式 分支管理原则 日常开发环境 …...

Java——集合框架

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1 集合框架概述1.1 内存层面需要针对多个数据进行存储。此时&#xff0c;可以考虑的容器有&#xff1a;1.2 数组存储多个数据方面的特点和弊端1.3 Java集合框架体系…...

Mac 环境 VVenC 编译与编码命令行工具使用教程

VVenC VVenC 是一个开源的高效视频编码器&#xff0c;专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准&#xff0c;主要目的是提供比 HEVC 更高的压缩效率&#xff0c;同时保持或提高视频质量。H.266/VVC…...

WebRTC:实现浏览器与移动应用的实时通信

1.技术简介 &#xff08;Web Real-Time&#xff09;是一种开放式实时通信技术&#xff0c;旨在使浏览器和移动应用程序通过简单的API即可实现实时音频、视频和数据传输&#xff0c;而无需安装插件或额外软件。它支持网络应用中的点对点通信&#xff0c;例如视频聊天、语音通话…...

curl+openssl 踩坑笔记

curl编译&#xff1a;点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …...

【NebulaGraph】变化的多跳查询

【NebulaGraph】变化的多跳查询 1. 需求2. 解决方案2.1 确定查询结构2.2 构建查询语句 3. 追加需求&#xff1a;如果增加每一跳都要指定查询某SPACE下的Tag&#xff0c;或者不查询某个Tag怎么办 1. 需求 存在多跳请求&#xff0c;其中每一跳是从上一跳查询结果为基础的。但是 …...

【C++】九九乘法表编程题详解与多角度对比分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目概述题目描述 &#x1f4af;老师的实现方法代码解析优点不足 &#x1f4af;我的实现方法代码解析优点不足 &#x1f4af;实现方法对比&#x1f4af;优化与扩展代码优化…...

node.js卸载并重新安装(超详细图文步骤)

卸载node.js 重新安装nodejs 一、卸载 1、首先进入控制面板卸载程序 2、卸载后 到文件夹中进行进一步的删除 删除上述的几个文件夹 每个人可能不一样&#xff0c;总之是找到自己的nodejs安装路径&#xff0c;下面是我的 ①删除C:UsersAdminAppDataRoaming路径下的npm相关文件…...

redis的集群模式与ELK基础

一、redis的集群模式 1.主从复制 &#xff08;1&#xff09;概述 主从模式&#xff1a;这是redis高可用的基础&#xff0c;哨兵和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的&#xff0c;主负责写入&#xff0c;然后把写入的数据同步到从服务器&#xff…...

一份关于 Ubuntu 系统下代理配置的故障排查笔记

Ubuntu 网络代理配置与故障排查指南 在使用 Ubuntu 系统时&#xff0c;配置网络代理可以帮助提升网络访问速度或突破网络限制。然而&#xff0c;代理配置过程中可能会遇到各种问题。本文将详细介绍如何在 Ubuntu 下配置网络代理&#xff0c;并提供故障排查的步骤和解决方案。 …...

如何用jmeter工具进行性能测试

前言 今天我们来说说jmeter如何进行性能测试&#xff0c;我们都知道jmeter工具除了可以进行接口功能测试外&#xff0c;还可以进行性能测试。当项目趋于稳定&#xff0c;根据性能需求就可以着手准备性能测试了&#xff0c;今天就说一说jmeter如何进行性能测试&#xff0c;jmet…...

五、Vue 循环语句

文章目录 简介一、基础数组迭代二、对象属性迭代三、整数循环 简介 在 Vue.js 的世界里&#xff0c;当我们需要处理重复性的结构并依据数据动态渲染时&#xff0c;v-for 指令就成了不可或缺的工具&#xff0c;它赋予开发者简洁且强大的能力&#xff0c;轻松应对各种列表渲染场景…...

HMSC联合物种分布模型

联合物种分布模型&#xff08;Joint Species Distribution Modelling&#xff0c;JSDM&#xff09;在生态学领域&#xff0c;特别是群落生态学中发展最为迅速&#xff0c;Hmsc是物种群落分层模型的缩写(Hierarchical Modelling of Species Communities)&#xff0c;它是一种基于…...

【CPU】risc-v指令集和其他指令集的差别(个人草稿)

第三&#xff0c;在 RISC-V 中对于所有指令&#xff0c;要读写的寄存器的标识符总是在同一位置&#xff0c;意味着在解码指令之前&#xff0c;就可以先开始访问寄存器。在许多其他的 ISA 中&#xff0c;某些指令字段在部分指令中被重用作为源目的地&#xff0c;在其他指令中又被…...