让你彻底学会HBase

让你彻底学会HBase

Apache HBase(Hadoop DataBase)是一个开源的、高可靠性、高性能、面向列(这里指列族,非列式存储)、可伸缩、实时读写的分布式数据库。利用 Hadoop HDFS 作为其文件存储系统,利用 ZooKeeper 作为其分布式协同服务。主要用来存储非结构化和半结构化的松散数据(列式存储 NoSQL 数据库)。

注意:HBase 是列族数据库(Column-Family Database),不是列式数据库(Column-Oriented Database)。
总结:HBase 是运行在 HDFS 之上的面向列(列族)的数据库管理系统。

特点

易扩展

容量大

面向列

多版本

稀疏性

高可靠

高性能

HBase 和 RDBMS 的区别

在这里插入图片描述

数据类型

在 HBase 表中,一条数据拥有一个全局唯一的主键(RowKey)和任意数量的列(Column Qualifier),每个列的数据存储支持多个版本(Version),一列或多列组成一个列族(Column Family),同一个列族中列的数据在物理上都存储在同一个 HFile 中。这样基于列存储的数据结构有利于数据缓存和查询。

在 HBase 中定位一条数据需要通过:RowKeyColumn FamilyColumn QualifierVersion

在这里插入图片描述

HBase 表中的数据是疏松地存储的,因此用户可以动态地为数据定义各种不同的列。

HBase 中的数据按主键排序(字典序),同时HBase 会将表按主键划分为多个 HRegion 存储在不同的 HRegionServer 上,以完成数据的分布式存储和读取。

NameSpace

命名空间类似于关系型数据库中的数据库的概念,他其实是表的逻辑分组。

default:没有明确指定命名空间的表将自动落入此命名空间
hbase:系统命名空间,用于包含 HBase 的内部表和元数据表

Table

Table 和关系型数据库中的表一个意思,由行和列组成。

RowKey

RowKey 的概念与关系型数据库中的主键相似,是一行数据的唯一标识。RowKey 可以是任意字符串(最大长度是64KB,实际应用中长度一般为 10-100 Bytes),RowKey 以字节数组保存。存储数据时,数据会按照 RowKey 的字典序排序存储,所以设计 RowKey 时,要充分利用排序存储这个特性,将经常一起读取的行存放到一起。
访问 HBase 数据的方式有三种:

  1. 基于 RowKey 的单行查询;
  2. 基于 RowKey 的范围查询;
  3. 全表扫描查询。
RowKey 如何设计,设计不好会产⽣什么后果

唯⼀原则
单主键
组合主键(注意顺序)
⻓度原则
不要超过 16 个字节
对⻬ RowKey ⻓度
Rowkey是⼀个⼆进制码流,Rowkey的⻓度被很多开发者建议说设计在10~100个字节,不过建议是越短越好,不要超过16个字节。
不要设计太⻓的原因如下:
1)数据的持久化⽂件HFile中是按照Key Value 存储的,如果Rowkey过⻓⽐如100个字节,1000万列数据,光Rowkey就要占⽤100*1000 万=10亿个字节,将近1G数据,这会极⼤影响 HFile的存储效率;
2)MemStore将缓存部分数据到内存,如果 Rowkey字段过⻓内存的有效利⽤率会降低,系统将⽆法缓存更多的数据,这会降低检索效率。因此Rowkey的字节⻓度越短越好;
3)⽬前操作系统是都是64位系统,内存8字节对⻬。控制在16个字节,8字节的整数倍利⽤操作系统的最佳特性。
散列原则:
反转
加盐
Hash

设计不好会出现热点问题:
HBase 中的⾏默认按⾏键的字典序进⾏排序,这种设计优化了扫描(Scan),允许将相关的⾏或彼此靠近的⾏⼀起读取。但是,设计不佳的⾏键是 Hot-Spotting 的常⻅来源。
热点发⽣在⼤量 Client 直接访问集群的⼀个或极少数个节点,⼤量访问会使热点 HRegion 所在的单个机器超出⾃身承受能⼒,性能下降甚⾄ HRegion 不可⽤。这也会对同⼀台区域服务器(HRegionServer)托管的其他区域(HRegion)产⽣不利影响(主机资源全部被这个热点HRegion 占⽤,已⽆法服务其他 HRegion 的请求)。

Column Family

Column Family 即列族,HBase 基于列划分数据的物理存储,同一个列族中列的数据在物理上都存储在同一个 HFile 中。一个列族可以包含任意多列,一般同一类的列会放在一个列族中,每个列族都有一组存储属性:
是否应该缓存在内存中;
数据如何被压缩或行键如何编码等。
HBase 在创建表的时候就必须指定列族。HBase 的列族不是越多越好,官方推荐一个表的列族数量最好小于或者等于三,过多的列族不利于 HBase 数据的管理和索引。

为什么不建议 HBase 设计过多列族
  1. 内存开销: 列族过多,内存开销会逐渐积累,导致RegionServer的内存占⽤增加,影响集群的稳定性
  2. 磁盘开销: 过多的列族会导致更多的磁盘寻址和IO操作,从⽽增加了磁盘开销
  3. 查询性能下降: 查询跨越多个列族,性能会受影响
  4. 写⼊性能下降:写⼊操作需要锁定列族,列族过多会导致性能下降

Column Qualifier

列族的限定词,理解为列的唯一标识。但是列标识是可以改变的,因此每一行可能有不同的列标识。使用的时候必须 列族:列 ,列可以根据需求动态添加或者删除,同一个表中不同行的数据列都可以不同。

Timestamp

Timestamp 是实现 HBase 多版本的关键。在 HBase 中,使用不同的 Timestamp 来标识相同 RowKey 对应的不同版本的数据。相同RowKey 的数据按照 Timestamp 倒序排列,默认查询的是最新的版本,当然用户也可以指定 Timestamp 的值来读取指定版本的数据。
HBase 通过 RowKey 和 Column Family,Column Qualifier 来确定一个存贮单元,然后再通过时间戳来进行索引。时间戳的类型是 64 位整型,时间戳默认是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
为了避免数据存在过多版本而造成管理(包括存贮和索引)负担,HBase 提供了两种数据版本回收方案:

  1. 保存数据的最后 n 个版本
  2. 保存最近一段时间内的版本(比如最近七天)

Cell

Cell 由 Row,Column Family,Column Qualifier,Version 组成。Cell 中的数据是没有类型的,全部使用字节码形式存贮,因为 HDFS 上的数据都是字节数组。

架构模型

HBase 可以将数据存储在本地文件系统,也可以存储在 HDFS 文件系统。在生产环境中,HBase 一般运行在 HDFS 上,以 HDFS 作为基础的存储设施。用户通过 HBase Client 提供的 Shell 或 Java API 来访问 HBase 数据库,以完成数据的写入和读取。HBase 集群主要由 HMaster、HRegionServer 和 ZooKeeper 组成。

在这里插入图片描述

ZooKeeper

HBase 通过 ZooKeeper 来完成选举 HMaster、监控 HRegionServer、维护元数据集群配置等工作。

选举 HMaster

监控 HRegionServer(节点探活)

维护元数据和集群配置

​ 存储所有 HRegion 的寻址入口(META 元数据表),存储所有的的元数据信息;
​ 存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family。

Client

HBase Client 为用户提供了访问 HBase 的接口,可以通过元数据表(客户端负责发送请求到数据库)来定位到目标数据的HRegionServer。

  1. HBase Shell
  2. Java API

HMaster

HMaster 是 HBase 集群的主节点,负责整个集群的管理工作,HMaster 可以实现高可用(Active 和 Backup),通过 ZooKeeper 来维护主备节点的切换。

管理分配:管理和分配 HRegion,负责启动的时候分配 HRegion 到具体的 HRegionServer,又或者在分割 HRegion 时关于新 HRegion 的分配。管理用户对 Table 结构的 DDL(创建,删除,修改)操作。

  1. 表的元数据信息存储在 ZooKeeper
  2. 表的数据存储在 HRegionServer 上(实际存储在 HDFS 上)

负载均衡:一方面负责将用户的数据均衡地分布在各个 HRegionServer 上,防止 HRegionServer 数据倾斜过载。另一方面负责将用户的请求均衡地分布在各个 HRegionServer 上,防止 HRegionServer 请求过热;
维护数据:发现失效的 HRegion,并将失效的 HRegion 分配到正常的 HRegionServer 上。当某个 HRegionServer 下线时迁移其内部的HRegion 到其他 HRegionServer 上。
权限控制

HRegionServer

HRegionServer 直接对接用户的读写请求,是真正干活的节点,属于 HBase 具体数据的管理者。

  1. 实时和 HMaster 保持心跳,汇报当前节点的信息;
  2. 当接收到 HMaster 的命令创建表时,会分配一个 HRegion 对应一张表;
  3. 负责切分在运行过程中变得过大的 HRegion;
  4. 当 HRegionServer 意外关闭的时候,当前节点的 HRegion 会被其他 HRegionServer 管理;
  5. 维护 HMaster 分配给它的 HRegion,处理对这些 HRegion 的 IO 请求;

当某个 HRegionServer 宕机后,ZooKeeper 会通知 HMaster 进行失效备援。下线的 HRegionServer 所负责的 HRegion 暂时停止对外提供服务,HMaster 会将该 HRegionServer 所负责的 HRegion 转移到其他 HRegionServer 上,并且会对下线的 HRegionServer 进行日志重放,将MemStore 中还未持久化到磁盘中的数据进行恢复。

HRegion

在这里插入图片描述

一个 HRegionServer 包含了多个 HRegion。HBase 将表中的数据基于 RowKey 的不同范围划分到不同 HRegion 上,每个 HRegion 都负责一定范围的数据存储和访问。

HRegion 是 HBase 中分布式存储和负载均衡的最小单元,不同的 HRegion 可以分布在不同的 HRegionServer 上。

HRegion 到阀值(10G)的时候,就会等分成两个 HRegion,切分后其中一个HRegion 会被转移到其他的 HRegionServer 上,实现负载均衡。可以根据自己的业务进行预分区。

在这里插入图片描述

Split

当一个 Table 刚被创建的时候,HBase 默认的分配一个 HRegion 给 Table。可以用 pre-splitting 在创建 Table 时提前生成多个 HRegion。

HBase 在每次数据合并之后都会针对相应 HRegion 生成一个 requestSplit 请求,requestSplit 首先会执行 checkSplit,检测 FileSize 是否达到阈值,如果超过阈值,就进行切分。

在 0.94 版本之前 ConstantSizeRegionSplitPolicy 是默认和唯一的 Split 策略。当某个 Store(对应一个 Column Family)的大小大于配置值hbase.hregion.max.filesize 的时候(默认 10G)HRegion 就会自动分裂。

而 0.94 版本之后 IncreasingToUpperBoundRegionSplitPolicy 是默认的 Split 策略。这个策略中,最小的分裂大小和 Table 的某个HRegionServer 的 HRegion 个数有关,当 StoreFile 的大小大于以下公式得出的值的时候就会 Split。

# R 为同一个 Table 中在同一个 HRegionServer 中的 HRegion 的个数
Min(R^2 * "hbase.hregion.memstore.flush.size", "hbase.hregion.max.filesize")

Store

一个 HRegion 由多个 Store 组成,每个 Store 都对应一个 Column Family,Store 包含 1 个 MemStore 和 0 或多个 StoreFile 组成。

MemStore:作为 HBase 的内存数据存储,数据的写操作会先写到 MemStore 中,当 MemStore 中的数据增长到指定阈值(默认 128M)后,HRegionServer 会启动 FlushCache 进程将 MemStore 中的数据写入 StoreFile 持久化存储,每次写入后都形成一个单独的 StoreFile。当客户端检索数据时,先在 MemStore 中查找,如果 MemStore 中不存在,则会在 StoreFile 中继续查找。
StoreFile:MemStore 中的数据写到文件后就是 StoreFile,StoreFile 底层是以 HFile 格式保存的。HBase 以 StoreFile 的大小来判断是否需要切分 HRegion。当一个 HRegion 中所有 StoreFile 的大小和数量都增长到超过指定阈值时,HMaster 会把当前 HRegion 分割为两个,切分后其中一个 HRegion 会被转移到其他的HRegionServer 上,实现负载均衡。
HFile:HFile 和 StoreFile 是同一个文件,只不过站在 HDFS 的角度称这个文件为 HFile,站在 HBase 的角度就称这个文件为 StoreFile。是HBase 在 HDFS 中存储数据的格式,它包含多层的索引,这样在 HBase 检索数据的时候就不用完全的加载整个文件。

HFile

StoreFile(HFile) 是 HBase 最终存储数据的介质.

Block:每个 HFile 由 N 个 Block 组成。
KeyValue:每个 Block 又是由多个 KeyValue 数据组成,KeyValue 对象是数据存储的核心,KeyValue 包装了一个字节数组,同时将偏移量offsets 和 lengths 放入数组中,这个数组指定从哪里开始解析数据内容。

KeyValue 对象不跨 Block 存储,假如这里有一个 KeyValue 的大小为 8M,即使 Block-Size=64KB,当读取该 KeyValue 的时候也是以一个连贯的 Block 进行读取。

在这里插入图片描述

无论是 Data Block Index 还是 Bloom Filter,都采用了分层索引的设计。

HLog

一个 HRegionServer 只有一个 HLog 文件。负责记录数据的操作日志,当 HBase 出现故障时可以进行日志重放、故障恢复。例如磁盘掉电导致 MemStore 中的数据没有持久化存储到 StoreFile,这时就可以通过 HLog 日志重放来恢复数据。

HLogKey 中记录了写入数据的归属信息,除了 Table 和 HRegion 名称外,同时还包括 Sequence Number 和 Timestamp:
Timestamp:写入时间。
Sequence Number:起始值为 0,或者是最近一次存入文件系统中的 Sequence Number。

读写流程

三层索引

HBase 0.96 以前

HBase 0.96 以前内部维护了两张特殊的表: -ROOT- 表和 .META. 表,用来查找各种表的 HRegion 位置。这两张特殊的表也像 HBase 中的其他表一样会切分成多个 HRegion。 -ROOT- 表比 .META. 更特殊一些,永远不会切分超过一个 HRegion,这样保证了只需要三次跳转,就能定位到任意 HRegion。
-ROOT- :记录 .META. 表的 HRegion 信息。
.META. :记录用户的表的 HRegion 信息。

而 -ROOT- 表的 HRegion 位置信息存放在 ZooKeeper 中,通过 ZooKeeper 可以找到 -ROOT- 的 HRegion 托管的 HRegionServer。再通过 -ROOT- 表找到 .META. 表的 HRegion 位置。 .META. 表中存放着用户的表的 HRegion 切分信息。
整个流程为: Client → ZooKeeper → -ROOT- → .META. → 用户的表的 HRegion

在这里插入图片描述

HBase 0.96 以后

ROOT- 表被移除,直接将 .META. 表 HRegion 位置信息存放在 ZooKeeper 中,并将 .META. 表更名为 hbase:meta 。

此时整个流程为: Client → ZooKeeper → hbase:meta → 用户的表的 HRegion

在这里插入图片描述

读取数据流程

在这里插入图片描述

  1. Client 访问 ZooKeeper,获取 hbase:meta 所在 HRegionServer 的节点信息;
  2. Client 访问 hbase:meta 所在的 HRegionServer,获取 hbase:meta 记录的元数据后先加载到内存中,然后再从内存中查询出 RowKey 所在的 HRegion (HRegion 所在的 HRegionServer);
  3. Client 对 RowKey 所在的 HRegion 对应的 HRegionServer 发起读取数据请求;
  4. HRegionServer 构建 RegionScanner(需要查询的 RowKey 分布在多少个 HRegion 中就需要构建多少个 RegionScanner),用于对该HRegion 的数据检索;
  5. RegionScanner 构建 StoreScanner(HRegion 中有多少个 Store 就需要构建多少个 StoreScanner,Store 的数量取决于 Table 的ColumnFamily 的数量),用于对该列族的数据检索;
  6. 所有的 StoreScanner 合并构建最小堆(已排序的完全二叉树)StoreHeap:PriorityQueue;
  7. StoreScanner 构建一个 MemStoreScanner 和一个或多个 StoreFileScanner(数量取决于 StoreFile 数量);
  8. 过滤掉能够确定所要查询的 RowKey 一定不在的 StoreFileScanner 或 MemStoreScanner(布隆过滤器);
  9. 经过筛选后留下的 Scanner 开始做读取数据的准备,将对应的 StoreFile 定位到满足的 RowKey 的起始位置;
  10. 将所有的 StoreFileScanner 和 MemStoreScanner 合并构建最小堆 KeyValueHeap:PriorityQueue,排序的规则按照 KeyValue 从小到大排序;
  11. 从 KeyValueHeap:PriorityQueue 中经过一系列筛选后一行行的得到需要查询的 KeyValue。
写入数据流程
  1. Client 访问 ZooKeeper,获取 hbase:meta 所在 HRegionServer 的节点信息;
  2. Client 访问 hbase:meta 所在的 HRegionServer,获取 hbase:meta 记录的元数据后先加载到内存中,然后再从内存中查询出 RowKey 所在的 HRegion (HRegion 所在的 HRegionServer);
  3. Client 对 RowKey 所在的 HRegion 对应的 HRegionServer 发起写入数据请求;
  4. 建立连接后,首先将 DML 要做的操作写入到日志 HLog;
  5. 然后将数据的修改更新到 MemStore 中,本次操作结束。一个 HRegion 由多个 Store 组成,一个 Store 对应一个列族,Store 包括位于内存中的 Memstore 和位于磁盘的 StoreFile,写操作先写入 MemStore;
  6. 当 MemStore 数据达到阈值后(默认 128M),创建一个新的 MemStore;
  7. 旧的 MemStore 将刷写为一个独立的 StoreFile(HRegionServer 会启动 FlushCache 进程写入 StoreFile)并存放到 HDFS,最后删除 HLog 中的历史数据。

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

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

相关文章

复杂类型,查询--学习笔记

1&#xff0c;复杂类型 解决问题&#xff1a;一些不容易获取到的数据&#xff0c;例如数组类型&#xff0c;集合类型等&#xff0c;获取他们的数据 -- 1.创建表 create table tb_array_person(name string,city_array array<string> )row format delimited fields term…

java 实现串口通讯

1、引入依赖 <dependency><groupId>org.scream3r</groupId><artifactId>jssc</artifactId><version>2.8.0</version> </dependency>2、配置启动串口 Component public class ContextHolder implements ApplicationContextAw…

Jave 定时任务:使用Timer类执行定时任务为何会发生任务阻塞?如何解决?

IDE&#xff1a;IntelliJ IDEA 2022.2.3 x64 操作系统&#xff1a;win10 x64 位 家庭版 JDK: 1.8 文章目录 一、Timer类是什么&#xff1f;二、Timer类主要由哪些部分组成&#xff1f;1.TaskQueue2. TimerThread 三、示例代码分析四、自定义TimerTask为什么会发生任务相互阻塞的…

Actor对象的引用 怎么设置他的材质?或设置是否启用重力?

这个蓝图我是想当重叠触发,将另一个Target Actor(一个球体)设置他的z增加50,但是为什么在触发的时候会抽搐?而且我想要设置他的材质等等这些属性都不行

SQL INSERT INTO 语句详解:插入新记录、多行插入和自增字段

SQL INSERT INTO 语句用于在表中插入新记录。 INSERT INTO 语法 可以以两种方式编写INSERT INTO语句&#xff1a; 指定要插入的列名和值&#xff1a; INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);如果要为表的所有列添加值&#xff0c;则无需在SQL…

【Linux】-进程间通信-匿名管道通信(以及模拟一个进程池)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

16.live555mediaserver-保活机制

live555工程代码路径 live555工程在我的gitee下&#xff08;doc下有思维导图、drawio图&#xff09;&#xff1a; live555 https://gitee.com/lure_ai/live555/tree/master 章节目录链接 0.前言——章节目录链接与为何要写这个&#xff1f; https://blog.csdn.net/yhb1206/art…

解析Spring Boot中的CommandLineRunner和ApplicationRunner:用法、区别和适用场景详解

在Spring Boot应用程序中&#xff0c;CommandLineRunner和ApplicationRunner是两个重要的接口&#xff0c;它们允许我们在应用程序启动后执行一些初始化任务。本文将介绍CommandLineRunner和ApplicationRunner的区别&#xff0c;并提供代码示例和使用场景&#xff0c;让我们更好…

PWM实验

PWM相关概念 PWM:脉冲宽度调制定时器 脉冲&#xff1a;方波信号&#xff0c;高低电平变化产生方波 周期&#xff1a;高低电平变化所需要时间 频率&#xff1a;1s钟可以产生方波个数 占空比&#xff1a;在一个方波内&#xff0c;高电平占用的百分比 宽度调制&#xff1a;占…

飞鼠异地组网工具实战之访问k8s集群内部服务

飞鼠异地组网工具实战之访问k8s集群内部服务 一、飞鼠异地组网工具介绍1.1 飞鼠工具简介1.2 飞鼠工具官网 二、本次实践介绍2.1 本次实践场景描述2.2 本次实践前提2.3 本次实践环境规划 三、检查本地k8s集群环境3.1 检查k8s各节点状态3.2 检查k8s版本3.3 检查k8s系统pod状态 四…

RVC从入门到......

RVC变声器官方教程&#xff1a;10分钟克隆你的声音&#xff01;一键训练&#xff0c;低配显卡用户福音&#xff01;_哔哩哔哩_bilibili配音&#xff1a;AI逍遥散人&#xff08;已授权&#xff09;关注UP主并私信"RVC"&#xff08;三个字母&#xff09;自动获取一键训…

PL/SQL编程

一、Oracle常用函数 concat&#xff1a;用于连接两个字符串。 CONCAT(Oraok, .com) -- Result: Oraok.com ceil&#xff1a;小数点向上取整。 secect ceil(7.3) from dual --Result: 8 dual表是oracle系统为计算设计的一张临时表 select sysdate as 系统日期 from dual…

基于寄生捕食算法优化概率神经网络PNN的分类预测 - 附代码

基于寄生捕食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于寄生捕食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于寄生捕食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

我的创作纪念日——365天

机缘 最开始我写博客没有什么特别的原因&#xff0c;主要是因为以下几点&#xff1a; 练习自己的语言组织能力 记录自己学习生活中学到的知识 主要还是想找一个好的保存 Markdown 笔记的平台。 最终我选择了 CSDN&#xff0c;一来是因为 CSDN 对 Markdown 语法的支持较为全面…

NSSCTF第13页(2)

[HNCTF 2022 Week1]Challenge__rce 提示?hint 访问看到了源码 <?php error_reporting(0); if (isset($_GET[hint])) { highlight_file(__FILE__); } if (isset($_POST[rce])) { $rce $_POST[rce]; if (strlen($rce) < 120) { if (is_string($rce…

图片降噪软件 Topaz DeNoise AI mac中文版功能

Topaz DeNoise AI for Mac是一款专业的Mac图片降噪软件。如果你有噪点的相片&#xff0c;可以通过AI智能的方式来处理掉噪点&#xff0c;让照片的噪点降到最 低。有了Topaz DeNoise AI mac版处理图片更方便&#xff0c;更简单。 Topaz DeNoise AI mac软件功能 无任何预约即可在…

基于阿基米德优化算法优化概率神经网络PNN的分类预测 - 附代码

基于阿基米德优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于阿基米德优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于阿基米德优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xf…

IntelliJ IDEA 2023 v2023.2.5

IntelliJ IDEA 2023是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为开发人员提供了许多特色功能&#xff0c;以下是其特色介绍&#xff1a; 新增语言支持&#xff1a;IntelliJ IDEA 2023新增对多种编程语言的支持&#xff0c;包括Kotlin、TypeScript、…

Windows网络「SSL错误问题」及解决方案

文章目录 问题方案 问题 当我们使用了神秘力量加持网络后&#xff0c;可能会和国内的镜像源网站的之间发生冲突&#xff0c;典型的有 Python 从网络中安装包&#xff0c;如执行 pip install pingouin 时&#xff0c;受网络影响导致无法完成安装的情况&#xff1a; pip config…

【飞控调试】DJIF450机架+Pixhawk6c mini+v1.13.3固件+好盈Platinium 40A电调无人机调试

1 背景 由于使用了一种新的航电设备组合&#xff0c;在调试无人机起飞的时候遇到了之前没有遇到的问题。之前用的飞控&#xff08;Pixhawk 6c&#xff09;和电调&#xff08;Hobbywing X-Rotor 40A&#xff09;&#xff0c;在QGC里按默认参数配置来基本就能平稳飞行&#xff0…