mysql中log

目录

MySQL 日志系统概述

日志类型

日志的作用和重要性

Mermaid图示

1. Undo Log 和 Redo Log 的协同工作图

2. Redo Log 确保持久性的流程图

Undo Log(回滚日志)

事务的原子性(Atomicity)保障

事务回滚机制

MVCC(多版本并发控制)实现

Mermaid图示

Undo Log 在事务回滚中的作用

​编辑Undo Log 在MVCC中的作用

Redo Log(重做日志)

事务的持久性(Durability)保障

WAL(Write-Ahead Logging)技术

Redo Log Buffer和刷盘时机

Redo Log的循环写入机制

Mermaid图示

Redo Log 持久性保障流程

​编辑WAL 技术流程

Binlog(归档日志)

记录数据库变更历史

数据备份和主从复制的作用

Binlog与Redo Log的区别

Mermaid图示

Binlog(归档日志)

记录数据库变更历史

数据备份和主从复制的作用

Binlog 与 Redo Log 的区别

Mermaid 图示

MySQL I/O模型及优化

I/O模型对性能的影响

优化磁盘I/O的方法

事务处理流程

一条SQL查询语句的生命周期

Update语句的执行过程

主从复制机制

主从复制的实现原理

主从复制的三种模式

Mermaid图示

Binlog的刷盘时机和过程

Mermaid图示

数据库的高可用性和灾难恢复

使用Redo Log和Binlog进行数据恢复

高可用性架构设计

参数配置对日志系统的影响

Mermaid图示

数据库的高可用性和灾难恢复

使用Redo Log和Binlog进行数据恢复

高可用性架构设计

Mermaid图示

参数配置对日志系统的影响

innodb_flush_log_at_trx_commit参数的作用

日志系统参数调优


MySQL 日志系统概述

日志类型
  1. Undo Log

    1. 记录事务前的数据状态,用于回滚和多版本并发控制。

  2. Redo Log

    1. 记录事务对数据页的修改,确保事务的持久性。

  3. Binlog

    1. 记录数据库变更操作,用于复制、备份和审计。

日志的作用和重要性
  • 确保事务的ACID属性。

  • 支持数据恢复、复制和备份。

  • 提供系统崩溃后的数据恢复能力。

Mermaid图示

1. Undo Log 和 Redo Log 的协同工作图

这个图示展示了Undo Log在事务开始时记录数据状态,以及在事务提交或回滚时的不同处理方式。

2. Redo Log 确保持久性的流程图

这个图示说明了Redo Log如何记录事务的修改,并在事务提交后将日志持久化到磁盘,以及在系统崩溃时如何使用Redo Log来恢复数据。

Undo Log(回滚日志)

事务的原子性(Atomicity)保障

Undo Log 确保了事务的原子性,即事务中的所有操作要么全部完成,要么全部不完成。如果事务在执行过程中遇到错误或用户执行了ROLLBACK操作,MySQL可以通过Undo Log中的记录将数据回滚到事务开始之前的状态。

事务回滚机制

当事务需要回滚时,MySQL会读取Undo Log中的记录,根据记录的内容将数据恢复到事务开始前的状态。这包括:

  • 对于INSERT操作,Undo Log记录了新插入行的详细信息,回滚时将删除这些行。

  • 对于DELETE操作,Undo Log记录了被删除行的详细信息,回滚时将重新插入这些行。

  • 对于UPDATE操作,Undo Log记录了被更新列的旧值,回滚时将这些列的值恢复为旧值。

MVCC(多版本并发控制)实现

Undo Log也是实现MVCC的关键部分。MVCC允许在不锁定资源的情况下进行并发访问,通过Undo Log保存的数据历史版本,不同的事务可以看到它们各自事务开始时的数据快照。这包括:

  • 当一个事务读取数据时,它可以通过Undo Log找到该数据在事务开始时的版本。

  • 当一个事务更新数据时,Undo Log保存了更新前的旧版本,以便其他事务仍然可以访问旧数据。

Mermaid图示

以下是Undo Log在事务回滚和MVCC中作用的Mermaid图示:

Undo Log 在事务回滚中的作用

Undo Log 在MVCC中的作用

Redo Log(重做日志)

事务的持久性(Durability)保障

Redo Log 是实现事务持久性的关键机制。它确保了即使在系统崩溃或电源故障的情况下,已提交的事务更改也不会丢失。通过记录事务对数据页的修改,系统可以在重启后重放这些日志,从而恢复到事务提交时的状态。

WAL(Write-Ahead Logging)技术

Write-Ahead Logging(WAL)是一种日志记录技术,要求在对数据页进行任何修改之前,必须先将修改记录到日志中。这意味着日志的写入操作必须在数据页的修改之前完成。WAL技术是实现Redo Log的基础,确保了数据的完整性和一致性。

Redo Log Buffer和刷盘时机
  • Redo Log Buffer 是InnoDB存储引擎中的内存结构,用于暂存事务的修改操作。

  • 刷盘时机 是指将Redo Log Buffer中的数据刷新到磁盘上的时机。这通常发生在以下几种情况:

    • 事务提交时。

    • Redo Log Buffer占用的空间达到一定阈值。

    • 系统后台线程定期刷新。

Redo Log的循环写入机制

Redo Log 使用固定大小的日志文件组,当一个日志文件写满后,会回绕到组中的下一个文件继续写入。这种循环写入机制允许Redo Log无限期地记录事务日志,只要有足够的磁盘空间。当系统需要释放旧的Redo Log记录时,会通过checkpoint机制来标记哪些日志已经过时,可以被覆盖。

Mermaid图示

以下是Redo Log在事务持久性保障和WAL技术中的Mermaid图示:

Redo Log 持久性保障流程

WAL 技术流程

这两个图示分别展示了Redo Log在事务持久性保障中的角色以及WAL技术确保数据修改前日志记录的流程。

Binlog(归档日志)

记录数据库变更历史

Binlog 记录了数据库所有表结构变更和数据修改的操作,但不记录查询和非修改性的命令(如SHOW)。这为数据库的变更历史提供了完整的记录。

数据备份和主从复制的作用
  • 数据备份:Binlog 可用于数据恢复,当数据库发生故障时,可以使用Binlog来回溯到故障前的状态。

  • 主从复制:Binlog 是实现MySQL主从复制的关键,主服务器上的所有变更都会记录在Binlog中,并复制到从服务器上,以保持数据的一致性。

Binlog与Redo Log的区别
  • 记录内容:Redo Log 是物理日志,记录了页级别的变更;Binlog 是逻辑日志,记录了SQL语句及其执行结果。

  • 作用域:Redo Log 主要用于崩溃恢复,确保事务的持久性;Binlog 用于复制和数据恢复。

  • 存储:Redo Log 存储在InnoDB存储引擎中,Binlog 存储在MySQL服务器层。

  • 写入时机:Redo Log 在事务提交时写入,Binlog 可以在事务提交前写入。

Mermaid图示

以下是Binlog在数据库变更历史记录、数据备份和主从复制中作用的Mermaid图示:

Binlog(归档日志)

记录数据库变更历史

Binlog 是 MySQL 的二进制日志,它记录了数据库中所有数据变更的操作,包括数据的增加、修改和删除。这为数据库的变更历史提供了详细的记录,有助于进行数据恢复和分析。

数据备份和主从复制的作用
  • 数据备份:Binlog 可以用于数据的增量备份,只记录数据变更的部分,而不是整个数据库的完整副本。

  • 主从复制:Binlog 是实现 MySQL 主从复制的核心,主服务器上的所有变更操作都会被记录在 Binlog 中,并被复制到从服务器上,以保持数据的一致性。

Binlog 与 Redo Log 的区别
  1. 记录内容

    1. Redo Log 是 InnoDB 存储引擎的物理日志,记录了数据页的变化,用于确保事务的持久性。

    2. Binlog 是 MySQL 服务器层面的逻辑日志,记录了所有数据变更的 SQL 语句,用于复制和恢复。

  2. 作用域

    1. Redo Log 主要用于崩溃恢复,确保事务提交后的数据不丢失。

    2. Binlog 用于复制(包括主从复制和组复制)和数据恢复。

  3. 存储位置

    1. Redo Log 存储在 InnoDB 的存储引擎空间。

    2. Binlog 存储在 MySQL 服务器的数据目录下。

  4. 写入时机

    1. Redo Log 在事务提交时写入,确保了数据的持久性。

    2. Binlog 可以设置为在事务提交前写入,增加了复制的并发性,但牺牲了一定的数据一致性保证。

  5. 循环使用

    1. Redo Log 使用循环写入,固定大小的日志文件组,写满后循环覆盖。

    2. Binlog 也使用循环写入,但通常配置为保留一定数量的日志文件,以支持复制和恢复。

Mermaid 图示

以下是 Binlog 与 Redo Log 区别的 Mermaid 图示:

这个图示展示了 Binlog 和 Redo Log 的主要区别和它们在 MySQL 中的不同应用。

MySQL I/O模型及优化

I/O模型对性能的影响

MySQL数据库的性能在很大程度上受I/O模型的影响。I/O模型决定了数据如何在数据库和存储介质之间传输,常见的I/O模型包括:

  1. 同步I/O(Synchronous I/O):在这种模型下,数据操作请求(如读取或写入)会立即被执行,并且请求进程会等待操作完成。这可能会导致高延迟,尤其是在高负载情况下。

  2. 异步I/O(Asynchronous I/O):与同步I/O不同,异步I/O允许请求进程在数据操作执行时继续执行其他任务。当I/O操作完成时,进程会被通知。这可以提高性能,因为它允许更高效的资源利用。

  3. 直接I/O(Direct I/O):在直接I/O中,数据直接在应用程序和存储介质之间传输,绕过操作系统的缓存。这可以减少数据复制的开销,但可能会增加磁盘碎片。

  4. 缓冲I/O(Buffered I/O):这是最常见的I/O模型,数据操作首先在内存中进行,然后批量刷新到磁盘。这可以减少磁盘I/O操作的次数,提高性能。

优化磁盘I/O的方法

为了提高MySQL数据库的性能,可以采取以下一些优化磁盘I/O的方法:

  1. 使用高性能存储:使用更快的存储设备,如SSD,可以显著减少I/O操作的延迟。

  2. 调整InnoDB缓冲池大小:InnoDB缓冲池可以缓存频繁访问的数据和索引,适当增加其大小可以减少磁盘I/O。

  3. 使用内存数据库表:对于读密集型的应用,可以考虑将某些表存储在内存中。

  4. 优化查询和索引:优化查询语句和索引可以减少数据访问的I/O操作次数。

  5. 使用RAID技术:通过RAID(独立磁盘阵列)技术,可以提高数据的读写性能和可靠性。

  6. 调整操作系统的I/O调度器:不同的I/O调度器可能对性能有不同的影响,选择合适的调度器可以提高性能。

  7. 使用固态硬盘缓存:使用固态硬盘作为缓存层,可以提高热点数据的访问速度。

  8. 异步I/O操作:在可能的情况下,使用异步I/O操作可以提高应用程序的响应性和吞吐量。

  9. 监控和分析I/O性能:定期监控I/O性能,分析瓶颈,并根据需要进行调整。

  10. 合理配置文件系统和磁盘:合理配置文件系统(如使用ext4、XFS等)和磁盘的参数,如块大小、文件分配策略等,可以提高I/O效率。

通过上述方法,可以有效地优化MySQL数据库的I/O性能,从而提高整体的数据库性能。

事务处理流程

事务是数据库操作的基本单位,它保证了一系列操作要么全部成功,要么全部失败。一个事务通常遵循以下步骤:

  1. 开始事务:通过BEGINSTART TRANSACTION语句开始一个新事务。

  2. 执行操作:执行一系列的数据库操作,如INSERTUPDATEDELETE等。

  3. 提交事务:如果所有操作都成功,通过COMMIT语句提交事务,使所有更改永久生效。

  4. 回滚事务:如果操作中出现错误,通过ROLLBACK语句撤销所有更改,返回到事务开始前的状态。

  5. 结束事务:提交或回滚后,事务结束。

一条SQL查询语句的生命周期

  1. 客户端请求:客户端发送SQL查询语句到数据库服务器。

  2. 解析:服务器解析SQL语句,检查语法正确性。

  3. 编译:将SQL语句编译成可执行的执行计划。

  4. 执行:根据执行计划,数据库引擎执行查询操作。

  5. 数据检索:从存储引擎检索数据。

  6. 返回结果:将查询结果发送回客户端。

  7. 日志记录:在适当的时候,操作会被记录到日志中,如Redo Log和Binlog。

Update语句的执行过程

  1. 请求Update:客户端发送UPDATE语句到服务器。

  2. 解析与编译:服务器解析UPDATE语句,生成执行计划。

  3. 权限检查:检查用户是否有权限执行该更新操作。

  4. 查找数据:在相关表中查找需要更新的行。

  5. 记录Undo Log:在InnoDB存储引擎中,记录Undo Log以支持事务回滚。

  6. 应用更改:对找到的数据行应用更新。

  7. 记录Redo Log:记录Redo Log以确保事务的持久性。

  8. 提交事务:如果更新成功,提交事务,更改生效。

  9. 刷新Binlog:将事务的Binlog刷新到磁盘,用于复制和恢复。

  10. 返回结果:向客户端返回操作结果,如受影响的行数。

事务的ACID属性(原子性、一致性、隔离性、持久性)在整个过程中得到保证,确保了数据的完整性和可靠性。

主从复制机制

主从复制是数据库领域中用于数据高可用性和负载均衡的一种技术。它允许将一个数据库服务器(主服务器)的数据复制到一个或多个服务器(从服务器)。

主从复制的实现原理
  1. 二进制日志(Binary Logging):主服务器上的所有修改操作都被记录在二进制日志(Binlog)中。

  2. I/O线程:从服务器上的I/O线程连接到主服务器,请求获取Binlog中的事件。

  3. 记录中继日志(Relay Log:I/O线程将接收到的Binlog事件写入从服务器的中继日志。

  4. SQL线程:从服务器上的SQL线程处理中继日志中的事件,并在从服务器上执行相同的修改操作,以保持数据的一致性。

  5. 数据一致性:通过这种方式,主服务器上的数据变更被复制到从服务器,确保了数据的一致性。

主从复制的三种模式
  1. 同步复制(Synchronous Replication)

    1. 在这种模式下,主服务器在提交事务前等待所有从服务器确认已接收并开始执行事务的Binlog事件。

    2. 优点是保证了数据的强一致性,但可能会牺牲性能。

  2. 异步复制(Asynchronous Replication)

    1. 主服务器在提交事务后立即返回,不需要等待从服务器的确认。

    2. 优点是提高了性能,但可能会在主服务器故障时导致数据丢失。

  3. 半同步复制(Semi-synchronous Replication)

    1. 这是MySQL 5.7及以后版本提供的一种复制方式,主服务器在提交事务前至少等待一个从服务器确认已接收Binlog事件。

    2. 优点是提供了比异步复制更强的数据一致性保证,同时保持了相对较高的性能。

Mermaid图示

以下是主从复制过程的Mermaid图示:

这个图示展示了主从复制的基本流程,从Binlog的生成到从服务器上的SQL线程执行,确保了数据的一致性。

Binlog的刷盘时机和过程

Binlog是MySQL中非常重要的日志,记录了所有的修改操作,用于数据恢复和复制。Binlog的刷盘时机和过程如下:

  1. Binlog Cache的作用

    1. Binlog Cache是MySQL服务器层用来暂存事务日志的内存区域。

    2. 每个线程都有自己的Binlog Cache,用于缓存即将写入Binlog文件的事务日志。

  2. 写入Binlog Cache

    1. 当事务执行修改操作时,相关的日志首先被写入到Binlog Cache。

  3. Binlog刷盘的触发条件

    1. 事务提交:最常见的触发条件是事务提交,此时必须将事务的日志写入Binlog文件以确保持久性。

    2. Binlog Cache达到一定大小:如果Binlog Cache的大小超过了binlog_cache_size系统变量设定的值,内容会被写入到Binlog文件。

    3. 服务器设置:某些设置如expire_logs_daysmax_binlog_size会触发旧Binlog文件的删除或改名,这时也会触发刷盘。

    4. I/O线程调度:MySQL的I/O线程会定期将Binlog Cache中的内容刷新到Binlog文件。

  4. 刷盘过程

    1. 在触发条件满足时,Binlog Cache中的内容会被写入到Binlog文件。

    2. 写入操作是顺序进行的,保持事务日志的顺序性和完整性。

    3. 写入完成后,Binlog Cache被清空,为新的事务日志腾出空间。

  5. 保证数据一致性

    1. 在事务提交时,只有当Binlog成功写入磁盘后,事务才会被视为提交成功,从而保证了数据的一致性。

Mermaid图示

以下是Binlog刷盘时机和过程的Mermaid图示:

这个图示展示了事务日志从Binlog Cache写入Binlog文件的过程,以及触发条件。

数据库的高可用性和灾难恢复

使用Redo Log和Binlog进行数据恢复
  • Redo Log:用于保证事务的持久性。在系统崩溃后,可以使用Redo Log中的日志记录来重做未提交的事务,从而恢复数据到最后一次成功提交的状态。

  • Binlog:记录了所有数据变更的历史,可以用于数据恢复和主从复制。在数据丢失的情况下,可以使用Binlog来回放所有的变更操作,恢复数据。

高可用性架构设计
  • 主从复制:通过设置一个主数据库和多个从数据库,可以在主数据库发生故障时切换到从数据库,保证服务的连续性。

  • 故障切换:自动化的故障检测和切换机制,确保在主数据库不可用时自动切换到备用数据库。

  • 负载均衡:使用负载均衡技术分散请求到多个数据库,提高系统的处理能力和可用性。

  • 数据备份:定期备份数据,包括全量备份和增量备份,以便在灾难发生时能够快速恢复数据。

参数配置对日志系统的影响
  • innodb_flush_log_at_trx_commit参数:控制事务提交时Redo Log的刷盘行为,对数据的持久性和系统的写入性能有直接影响。

    • 0:事务提交时不刷盘,提高性能,但在崩溃时可能丢失最后一次提交的事务数据。

    • 1:每次事务提交都刷盘,保证数据的持久性,但可能降低写入性能。

    • 2:事务提交时将日志写入到磁盘上的文件系统缓存,然后由操作系统决定何时刷新到磁盘,平衡性能和数据安全。

Mermaid图示

以下是使用Redo Log和Binlog进行数据恢复的Mermaid图示:

这个图示展示了在系统崩溃后,如何使用Redo Log和Binlog来恢复数据。

数据库的高可用性和灾难恢复

使用Redo Log和Binlog进行数据恢复
  1. Redo Log:

    1. 用于事务的持久性保障,确保在系统崩溃后,可以恢复未提交的事务更改。

    2. 在恢复过程中,Redo Log中的日志条目被重新执行,以确保所有更改被正确地应用到数据库中。

  2. Binlog:

    1. 记录了所有数据库的变更操作,包括数据的增加、修改和删除。

    2. 在数据丢失的情况下,可以使用Binlog从头开始回放所有操作,恢复到特定的时间点。

  3. 数据恢复过程:

    1. 首先使用Binlog回放所有变更,恢复到最后一次备份的状态。

    2. 然后应用Redo Log中的日志,恢复自最后一次备份以来的所有事务更改。

高可用性架构设计
  1. 主从复制:

    1. 通过设置一个主数据库和多个从数据库,实现数据的实时复制和备份。

  2. 故障切换:

    1. 实现自动化的故障检测和故障转移,确保主数据库故障时,从数据库可以迅速接管服务。

  3. 负载均衡:

    1. 使用负载均衡器分散请求,提高系统的吞吐量和响应能力。

  4. 多数据中心:

    1. 在不同的地理位置设置数据中心,以防止区域性故障导致整个系统不可用。

  5. 数据备份:

    1. 定期进行数据备份,包括全量备份和增量备份,确保在灾难发生时可以快速恢复。

  6. 监控和报警:

    1. 实施全面的监控系统,及时发现和响应系统异常。

  7. 灾难恢复计划:

    1. 制定详细的灾难恢复计划和流程,定期进行演练,确保在真实灾难发生时能够迅速有效地响应。

Mermaid图示

以下是数据库高可用性和灾难恢复的Mermaid图示:

这个图示展示了高可用性架构的关键组件和流程,包括主从复制、故障切换、负载均衡、数据备份和监控报警系统。

参数配置对日志系统的影响

数据库的参数配置对日志系统的性能和行为有显著影响。合理的参数配置可以在保证数据安全性的同时优化性能。

innodb_flush_log_at_trx_commit参数的作用

innodb_flush_log_at_trx_commit是InnoDB存储引擎的一个关键参数,控制着事务提交时Redo Log的刷盘行为:

  • 值0:事务提交时不进行刷盘操作,由InnoDB存储引擎的后台线程定期刷新到磁盘。这种方式可以提高写入性能,但在系统崩溃时可能会丢失最后一次提交的事务数据。

  • 值1:每次事务提交时,都会将Redo Log从Redo Log Buffer强制刷新到磁盘。这种方式确保了数据的持久性,但可能会降低写入性能。

  • 值2:事务提交时,将Redo Log刷新到文件系统的Page Cache,然后由操作系统决定何时将其刷新到磁盘。这种方式在大多数现代操作系统中提供了足够的数据安全性,同时保持了较高的性能。

日志系统参数调优
  1. 确定适当的刷盘策略

    1. 根据应用场景和数据安全性要求,选择合适的innodb_flush_log_at_trx_commit值。

  2. 调整Redo Log文件大小

    1. 通过innodb_log_file_size参数调整Redo Log文件的大小,平衡日志文件的数量和每个文件的大小。

  3. 设置Redo Log缓冲区大小

    1. 通过innodb_log_buffer_size参数设置Redo Log Buffer的大小,影响内存中日志缓存的能力。

  4. 优化Binlog配置

    1. 调整expire_logs_daysmax_binlog_size等参数,控制Binlog文件的生命周期和大小。

  5. 监控并调整I/O性能

    1. 监控磁盘I/O性能,根据需要调整I/O调度器和文件系统的配置。

  6. 考虑使用组提交

    1. 通过组提交技术,将多个事务的日志一起刷新到磁盘,减少I/O操作的次数。

  7. 调整InnoDB缓冲池大小

    1. 通过innodb_buffer_pool_size参数调整InnoDB缓冲池的大小,减少对物理磁盘的访问。

  8. 定期审查和测试配置

    1. 定期审查当前的配置,并在测试环境中进行测试,以确保配置满足性能和数据安全的要求。

  9. 考虑硬件特性

    1. 根据存储硬件的特性(如SSD vs. HDD)调整日志系统的配置,以最大化性能。

通过细致地调整这些参数,可以优化数据库的日志系统,以满足特定的性能要求和数据安全标准。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【二叉树进阶】--- 二叉搜索树转双向链表 最近公共祖先

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 数据结构 本篇博客我们继续了解一些二叉树的进阶算法。 🏠 二叉搜索 树转化为双向循环链表 📌 题目内容 将二叉搜索树转化为排序…

失败:Windows--WSL2--Ubuntuon--Docker

编写目的: 在Windows上安装Docker,用Docker安装Gitlab、Jenkins等软件。 文章记录一下Windows上安装Docker的过程。 参考文档: 旧版 WSL 的手动安装步骤 | Microsoft Learn 下面用"参考文档"代替 目录 第一步:启…

SAP与网易大数据系统集成案例

一、项目环境 江西某药业有限公司是一家以医药产业为主营、资本经营为平台的大型民营企业集团。公司成立迄今,企业经营一直呈现稳健、快速发展的态势集团总销售额超40亿元。 为了帮助企业更有效的进行分配和管理,包括人力、物资、时间和预算等资源&a…

UVa1660/LA3031 Cable TV Network

UVa1660/LA3031 Cable TV Network 题目链接题意分析AC 代码 题目链接 本题是2004年icpc欧洲区域赛东南欧赛区的题目 题意 给定一个n(n≤50)个点的无向图,求它的点连通度,即最少删除多少个点,使得图不连通。如下图所示…

C语言----约瑟夫环

约瑟夫环 实例说明: 本实例使用循环链表实现约瑟夫环。给定一组编号分别是4、7、5、9、3、2、6、1、8。报数初始值由用户输入,这里输入4,如图12.18所示,按照约瑟夫环原理打印输出队列。 实现过程: (1)在 VC6.0中创建…

GlobalMapper软件安装流程

目录 一、环境准备 二、安装步骤 三、软件激活 一、环境准备 系统:win7操作系统 安装包下载:链接:https://pan.baidu.com/s/1Vb4VVRFBRYawt3MT-5gYOw 提取码:sxdj 二、安装步骤 1、解压,右键global-mapper-23_1-x…

Redis的简单介绍

一、Redis简介 1.NOSQL NoSQL( Not Only SQL),意即“不仅仅是SQL”,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,纯动态网站已经显得力不从心,暴露了很多难以克服的问题&am…

java学习19VUE

VUE NPM npm的全称是Node Package Manager 中文名为Node.js包管理器,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。NPM可以方便地从一个全球的代码库中获取并安装Node.js模块,这些模块可以用于构建应用程序、…

【LeetCode Cookbook(C++ 描述)】一刷二叉树之层序遍历(BFS)

目录 LeetCode #102:Binary Tree Lever Order Traversal 二叉树的层序遍历递归解法迭代解法 LeetCode #107:Binary Tree Level Order Traversal II - 二叉树的层序遍历 II递归解法迭代解法 LeetCode #429:N-ary Tree Level Order Traversal -…

python结合csv和正则实现条件筛选数据统计分数

前景提要: 有一个项目的数值和员工统计的对不上,如果一页一页翻找自己手动算,一个就有16、7页, 功能实现 1、创建csv文件 需要将每一个模块的所有数据头提取出来,这个可以直接用爬虫或者手工复制出来,因…

The Sandbox 游戏制作教程第 4 章|使用装备制作游戏,触发独特互动

欢迎回到我们的系列,我们将记录 The Sandbox Game Maker 的 “On-Equip”(装备)功能的多种用途。 如果你刚加入 The Sandbox,On-Equip 功能是 “可收集组件”(Collectable Component)中的一个多功能工具&a…

无人机的电压和放电速率,你知道吗?

一、无人机电压 无人机电瓶多采用锂电池,其电压范围在3.7伏至44.4伏之间,具体取决于电池的单体电压和串联的电池节数。 单体电压:锂电池的单体电压通常为3.7V,但在满电状态下可能达到4.2V。 串联电池节数:无人机电瓶…

Java面试八股之消息队列通常由哪些角色组成

消息队列通常由哪些角色组成 消息队列系统通常涉及几个核心角色,这些角色协同工作以实现消息的传递和处理。主要的角色包括: 生产者(Producer): 生产者是消息的创建者,负责将消息发送到消息队列中。生产者…

基于RK3568 Android11 移除长按电源按键弹窗的对话框中的 [关机] 和 [紧急呼救] 选项(详细分析)

一般来说,与Android按键窗口事件相关的基本是与frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java 这个文件有关。   因此先打开与输入相关的日志,如下:   然后重新编译烧录后查看打印的日志可以看…

基于Python、Django开发Web计算器

1、创建项目 创建Django项目参照https://blog.csdn.net/qq_42148307/article/details/140798249,其中项目名为compute,并在该项目下创建一个名为app的应用,并且进行基本的配置。 2、导入Bootstrap前端框架 Bootstrap的使用参照https://blo…

uvm(7)factory

重载 针对任务或者函数,定义virtual;然后就可以重载 第二个是 约束的重载 然后 m_trans.crc_err_cons.constraint_mode(0); 这个是关闭此约束 m_trans.constraint_mode(0); 这是关闭所有约束 还可以集成原来的transation直接重写约束起到重载的作用 用factory重…

【数据结构】二叉树(一)

目录 1. 树型结构 概念 树的表示形式 ​编辑 2. 二叉树(重点) 2.1 概念 2.2 二叉树的性质 2.3 二叉树的存储 2.4 二叉树的遍历 前中后序遍历 层序遍历: 2.5二叉树的基本操作 本篇主要理解树和二叉树相关概念,二叉树遍…

0813,引用,函数重载,内存布局叭叭叭

是我4句话5个ERROR&#xff0c;阿巴阿巴 001_arrpointer.cc #include <iostream> using std::cout; using std::endl;void test(){int a[5]{1,2,3,4,5};int (*p)[5]&a;cout<<p<<endl;cout<<p1<<endl;int *pp(int*)(&a1);//第二个数组的…

vue 获取当前页面路由

vue2 &#xff1a; import { getCurrentInstance } from ‘vue’; //获取当前页路由 data() { return { currentRouter: ‘’,//默认路由 } } const { proxy } getCurrentInstance(); this.currentRouter proxy.$router.currentRoute.meta.title vue3 &#xff1a; import …