数据仓库发展历史与架构演进

从1990年代Bill Inmon提出数据仓库概念后经过四十多的发展,经历了早期的PC时代、互联网时代、移动互联网时代再到当前的云计算时代,但是数据仓库的构建目标基本没有变化,都是为了支持企业或者用户的决策分析,包括运营报表、企业营销、用户画像、BI分析等。

广义上看数据库仓库并不是一项技术或者产品而是数据处理过程,从不同的数据源进行数据汇合,然后经过数据的统一建模成适合于分析的数据模型,最终辅助企业的决策分析。这个过程涉及到ETL、数据建模及数据可视化等一系列实现,这也是与数据库的本质区别。

随着计算机科学技术发展与产业变革,数据仓库在应对从数据特征呈现多样化、海量化到业务特征复杂化、智能化及实时化等,再到基础设施(存储、网络及计算资源)能力的提升、云计算技术的发展等变化,数仓的整个体系也在持续演进中,这里从数据仓库的系统架构及内核引擎的实现角度去分析数据仓库的发展过程,基本上如下图所示:

从数仓的核心能力去分析各个阶段实现的变化,我将重点分析以下几个方面:

  • 存储引擎:主要是数据的组织方式,定义了数据如何存储及压缩、索引的创建和更新、锁机制、事务及缓存管理等。在数仓中数据是面向主题的将数据进行整理归纳和重组,这是提高数据分析性能的核心,在分析过程只需要处理部分维度的数据,并且大量的统计任务需要进行数据的扫描或者精确检索,因此存储引擎的合理设计是数仓架构发展的重要部分。
  • 计算引擎:分析型任务涉及到大量的计算,计算效率往往会成为数据库系统的瓶颈,计算模型(框架)、优化技术、和运行中间数据的处理等都是数仓演进的突破点。MPP计算、分布式流计算、分布式批计算等都有相应的使用场景,在具体的算子执行过程中向量计算、编译执行及硬件加速技术等都是近年有效的提升性能的方法。
  • 技术实现架构,数据库可以基于功能分为存储、计算及管理等层次,这些功能的运行机制影响着系统的灵活性、可运维性、成本及分析的性能等。云计算的出现为数仓架构的演进提供了新的方向,赋予数仓获得自服务、弹性等能力,同时目前企业将基础系统、平台部署到云端降低信息化建设成本及优化运行管理流程等成为趋势。

数据仓库的演进变革的因素有很多,例如快速的业务模式与群体规模的数据量带来的大数据处理技术、互联网的发展带来的数据源及数据类型的增多、人工智能的发展带来数智的融合、云计算交付模式的出现需要的细粒度的资源管理与隔离等,业务实时性的要求等都会带来数据仓库架构的变化。这里只分析不同阶段数据仓库的核心特性的变化,其他的内容可以逐步分析。

1.初代数仓(单体分析型数据库)

这个阶段是数据仓库概念提出后,数据库厂商传统数据库的基础上结合数仓方法论提供的数仓产品。在这个阶段数仓的数据来自于CRM、ERP等业务数据,数据量小多GB级别,数据类型基本上是结构化数据,而且产生的周期按天或者周为单位,因此对数据仓库的要求不高,基本上是单机(性能较高的商用主机,例如中小型机器)分析型数据库,以Oracle、DB2、SQL Server、SybaseIQ等为代表。

这些数据仓库产品从本质上是关系型数据库,使用ETL工具实现多种异构数据源的有效集成与处理,并按照主题的方式进行数据进行重新整合,即按照数仓的维度模型进行归一化构建。这些数据库的设计是为了决策分析而进行的,例如使用位图化索引、按列存储、数据压缩及与众不同的锁机制,这些特性都极大提高了查询引擎的性能。这个阶段的数据仓库主要集中在金融、电信、大型零食及制造等行业。

2.传统MPP数据仓库

随着业务的发展,单机数据仓库的数据存储和计算模式不能满足大量数据处理的需求,在这个背景下基于MPP架构的数据仓库成为主流的解决方案,这阶段的数仓产品以在2000年代后出现的Teradata、Greenplum、Vertica等为代表。MPP(Massively Parallel Processing),大规模并行处理架构,更适合于复杂的数据处理和综合分析,典型实现如下图所示:

这种架构主要的特征如下:

  • Shared Nothing,节点之间不共享存储、计算资源和磁盘,节点之间仅通过网络通信。
  • 数据按照特定的规则进行本地化存储,例如基于特定分布式键上按照Hash规则分布到全部节点上。
  • 完全对称的并行执行策略,每个节点都参与计算,并且节点上执行的任务逻辑完全一致。
  • 任务按照流水线的方式进行组织执行,任务之间数据的传递以流水线的方式来进行,数据的流转在内存中进行,避免了数据积压的时间开销。任务的流水线执行使得MPP数据库具有优异的性能。

这种架构可以实现横向扩展的方式,使用普通主机就可以构建较大规模的集群系统,通过并行化来实现快速的分析任务的快速执行,同时更具有成本优势。

在这个阶段的MPP架构在技术实现基于传统数据库实例进行扩展,例如Greenplum、ADB for PG等都是基于PostgreSQL内核进行开发,在集群中每个节点都是一个独立的数据库实例,具有独立的系统表、用户表等,数据是按照某种策略分布到不同的实例中。客户端在发起请求后由管理节点生成查询计划并进行并行化调度,当涉及到多个节点的数据交换时,例如HashJoin的执行,引入数据交换算子,如下图所示:

管理节点分布到每个节点的查询计划是相同的,在执行时如果需要每个节点扫描自己所在节点的数据,当需要进行数据交换时调用Motion算子发送到其他节点,例如Join计算中符合过滤条件的右表数据,最后在管理节点上通过GatherMotion进行查询结果的汇总。

MPP数仓它是整体向外提供服务,每台节点无法单独运行局部数据,数据在存储时通过一定的策略进行分布,存储位置是不透明的,因此在执行任务时由于无法断定数据的位置,导致任务会在所有节点上执行,同时在计算过程中涉及到锁、事务、内外存交互等问题,所以当数据达到一定规模后就会出现性能的瓶颈问题。当集群或者数据量达到一定程度后,节点的故障成本较高,查询任务在某个节点故障时需要重启整个任务。

另一个缺点是存算耦合的架构,节点进行扩缩容时需要进行数据的重新分布,整个操作的过程会由于耗费大量IO请求引起业务处理速度的下降,影响客户的正常查询需求,最后是无法动态适应业务的发展。对于不同的请求,例如导入类任务耗费大量IO、网络带宽,但是CPU的使用率较低。复杂的查询任务CPU的资源消耗非常大,因此资源规格的需求是不同的,但是MPP架构很难满足这些需求。因此这种架构的数仓集群的规模不能太大,适用于中等规模的企业数据处理场景,通常不超过数百级别,因此支持的数据体量很少超过PB级别。

3.大数据OLAP引擎

随着移动互联网、物联网的蓬勃发展带动了大数据的发展,数据处理种类的多样化、数据量不断变大、快速的数据流转等对系统有了新的要求,大数据框架从底层数据存储机制、计算模型(分布式批处理、内存及流计算等)到数据的集成等都发生了革命性的变化。其中Hadoop生态技术被广泛使用,数据仓库在大数据背景下建设的理论和目标是相同的。

根据大数据架构模式可以分为三个方向如下图所示:

  • 大数据数仓

传统的MPP数据仓库的出现是为了解决大数据量和性能的问题,但是随着大数据的发展,需要产生新的大数据处理技术和架构模式。在存储引擎上以HDFS为代表的分布式存储、在计算框架上出现了MR、Spark(DAG)和Flink等。

MapReduce计算框架

DAG计算框架

基于大数据构建等数仓产品很多,例如Hive、Kylin等,这些产品使用大数据的计算框架、底层直接读取文件系统中的数据,如下图所示:

这些数仓可以看到做事传统数仓各个引擎部分替换成大数据体系中的组件,在Hive中执行引擎替换成MapReduce及存储引擎替换成HDFS,为了增加实时性减少数据的落地执行引擎集成了Spark。

大数据数仓产品并不是某个单独运行的产品,而是一系列大数据组件遵循数据的处理流程的“范式”,例如离线数仓、流式数仓、实时数仓Lambda架构或者实时数仓Kappa架构在大数据组件的使用及数据的流转上是不同的,这里以Lambda为例,架构为例:

Kappa架构与Lamda架构相比更多关注于流处理部分,但是在真实中用户并不会完全遵循规范的架构而是进行混合使用,在近年还提出的IOTA的架构模式,基于AI生态下的全新的数据架构模式。

大数据数仓是一个松散的遵循某种规范的系统套件组合,涉及到数据的传输、计算(批处理、流处理)、存储及服务等组件,其优点在于可以支持PB以上级别的数据处理且具有较强的扩展性,但是缺点是性能及架构复杂。

  • 湖仓

数据湖概念在2010年被提出,其特征是以原始格式存储数据的存储库或者文件系统,无需对数据进行结构化处理,并且通常是将数据存储在开放的格式中,例如Parquet、ORC等。湖仓是将数据湖具有低成本的开放格式的存储能力和数据仓库的管理和优化能力结合在一起,典型的湖仓架构如下图所示:

从数据流转和计算来看与大数据数仓基本相同,核心的变化在于使用数据湖存储格式,例如Hudi、Iceberg、Delta Lake等进行数据的组织,解决了数据湖松散的文件结构问题,并在此基础上提供统一的元数据管理能力,实现各种数据库和数据仓库的元数据无缝打通和管理。

数据湖存储格式是湖仓运行的核心,其通过良好的抽象对接数据存储和元数据管理,格式如下图所示:

通过定义存储格式为数据湖添加了管理特性,如数据一致性、版本控制、增量处理及事务等,除外还通过表文件列式存储及压缩、表索引信息、谓词下推来加速SQL引擎的查询能力,简单来说数据湖存储格式提供了传统数据仓库存储引擎中的日志模块相同的功能。

  • 湖仓分体模式

从上面介绍的大数据架构的数仓能力来看为了支持大数据量处理、扩展性和容错性等能力,将不同的组件按照一定的架构“范式”进行叠加,存在架构极其复杂且维护成本很高,采用分布式处理框架查询性能比较低,而且事务支持较弱等问题,因此无法替代传统数仓。但是传统数仓存在集群规模小、并发能力不高、动态扩展性差等问题,因此业界出现了大数据数仓和传统数仓进行互补的新式架构的数仓。在大数据的存储能力基础上使用MPP的架构优势提高计算的实时型,典型数仓产品Impala、Presto/Trino、Hawq等产品,这里以Impala为例,其架构如下图所示:

Impala Daemon进程安装在所有节点上,通常与DN部署在一起,方便于数据的本地计算。管理节点对外提供服务,并且维护表的元数据、资源信息及各节点的健康状况。Coordinator会查询HDFS文件获取此次查询的数据所在的位置以及存储方式的信息。

查询请求提交到集群后由FE进行解析并生成查询计划,在这个过程中会将执行计划转换成分布式并行物理执行计划,如下图所示:

单机执行计划

分布式并行执行计划

分布式并行执行计划是在单机执行计划的基础上,结合数据分布式存储的特点,将其拆分为多个子任务,每个子任务都是可以并行执行,待执行后将结果进行全局的聚合。

具体来说在这种框架下数据存储在分布式架构的存储系统中,分散存储到多个节点上实现数据的分区容错性和扩展性,然后在上层利用MPP的并行计算能力来优化数据查询和计算等任务,减少运算延迟,提高处理效率。

4.新架构实时数仓

上面介绍的大数据背景下的数仓并不能称之为数仓产品,不管是Hive、Kylin、Impala、Presto还是湖仓,这些姑且可以称之为OLAP引擎,要提供数仓的能力还要与其他组件,例如分布式存储、元数据管理及数据传输等进行组合来作为整体来提供数仓服务。

但是大数据和数据仓库从概念和目标上是不同的,大数据体系是实现一个以原始格式进行数据存储和治理的基础设施,来满足不同的异构数据存储和计算需求。本质上需要灵活的标准来实现数据的集成、数据管理与对外提供数据服务等,因此从产品形态上看大数据体系下的数据仓库能力更像是一种架构指导,还可以在相同的基础能力上提供机器学习、数据挖掘、数据集市等各种能力。但是数据仓库从概念上看是一个面向主题、集成、相对稳定和反映历史变化的数据集合,在数据仓库中信息是在不同的业务系统中进行集成,并经过一系列加工、整理和汇总等过程,形成规范性的关于确定主题的一致的全局信息,可以对这些数据进行频繁的可重复的分析。

因此大数据背景下的数仓能力不能实现对数据仓库的替代,但是大数据的先进技术可以实现用来促进数仓的架构的演进,在这种趋势下出现的新型数据仓库产品有ClickHouse、Doris、StarRocks等产品,这些产品具有以下特征:

  • 现代化的MPP架构,实现了向量化执行引擎、编译执行、提高查询的实时性(支持高并发小查询)等;
  • 重新定义了数据存储引擎,可以支持大规模数据集,例如使用LMS的列式存储引擎、针对列创建ZoneMap索引来进行针对性过滤、MVCC事务隔离机制等;
  • 重新定义了数据分布与副本管理机制,可以支持大数据集的灵活管理。在小查询时只需要使用部分机器资源能够提高并发查询量;机器扩缩容时迁移部分数据分片可,不影响线上服务,负载均衡可以自动实现;
  • 新型的预聚合机制,能够做到数据的自动更新、查询的智能路由、实时数据的增量聚合计算等,例如Rollup机制,在数据导入时自动完成汇聚。

这里以Doris为例,其在整体上整合Google Mesa存储模型、Impala MPP查询引擎和ORC file存储格式(在格式的基础上进行优化)等先进技术。

与传统的MPP数仓每个实例都基于传统关系型数据库技术不同,现代化数仓根据AP的大量表扫描的特征重新定义了数据的存储引擎。与传统MPP数仓的不同,Doris使用了LSM(Log Structured Merge)树架构,这个也是目前大数据存储系统(HBase、LevelDB、RocksDB等)常用的技术,如下图所示:

核心思路是将最新的数据驻留在缓存中,等积累到一定量后再使用归并合并的方式将缓存中的数据合并到磁盘队尾中。数据写入时先在内存中组成Mem Table,其内的数据是经过排序的数据,当达成一定程度后将其添加到LSM Tree中,这些相邻的SSTable不保证有序,在后台会启动定时任务进行合并。为了加快数据的读取,大部分的LSM结构中会基于Key的索引和Bloom Filter来快速过滤查询Key,减少IO数据的访问。读取流程如下:

在数据建模方法Doris支持Aggregate、Unique和Duplicate等模型可以满足OLAP领域的各种应用模型,为了提高高并发的点查能力实现Unique存储模型和行缓存等技术;新型预聚合技术Rollup、Cube、智能物化视图技术实现预聚合加速,从而实现用户近实时查询。但是传统的数据仓库依赖与数据的Cube来进行数据的预处理,无法支持数据持续导入或者聚合的同时提供近实时的用户查询能力。

在数据导入方面在内部集成了多种数据导入方式实现不同数据源导入的过程中提供原子性保证。在集群扩缩上Doris与传统MPP数仓不同的地方在于借鉴了大数据技术中常用的分布式管理框架,可以自动管理数据副本的分布、恢复和均衡,在整个过程中不影响系统服务。

5.云数仓

传统数仓将计算与存储部署在同一个节点,集群的扩容复杂,需要进行数据的迁移,同时架构存在木桶效应,单节点故障会影响整体的性能,且资源管理不灵活,无法满足不同场景下资源隔离及动态调整的需求。云计算的出现为数仓架构的演进提供了新的方向,赋予数仓获得自服务、弹性等能力,同时目前企业将基础系统、平台部署到云端降低信息化建设成本及优化运行管理流程等成为趋势。

数仓在云端提供服务可以利用公有云强大的基础设施能力(弹性计算、存储、网络及安全能力),同时让用户更加轻松将数据进行集成,并降低使用、维护与架构成本。这就产生了云数仓(基于云原生的数据仓库),业界没有明确的定义,但是Snowflake是云数仓的里程碑产品,目前出现的云数仓产品很多都会借鉴该产品的设计思想,架构如下图所示:

云数仓、现代MPP架构都可以称为现代化数仓,但是这两种产品体系都是对传统数仓进行了不同角度的革新,现代MPP架构是从底层存储引擎角度(数据的组织与计算优化)而云数仓是从基础架构的角度进行了升级。云数仓的基本特征如下:

  • 计算与存储分离(Disaggregation),在云环境下网络传输能力已经基本上能追上磁盘的IO的能力,存算分离后可以实现存储的横向扩展,并且在计算低峰时进行缩容,进一步降低数据分析的成本,最后是可以根据数据的热度进行存储分级,保证性能的同时进一步降低存储成本;存储不再是服务本身的一部分,演变为独立的服务,扩容无需数据的重分布;
  • 资源扩展秒级弹性,计算层实现无状态可以随时扩缩容,并且随时热升级,为了实现无状态需要对元数据进行“分解”,计算层无状态后才能够随机增减节点、故障后快速切换且不需要复制/迁移数据,从而实现可靠性的提升及降低成本;弹性的扩缩可以基于定时或者负载(Workload Manager)等规则来控制,在资源不需要时可以进行关闭;
  • 数据共享(Multi Cluster, Shared Data),计算资源可以根据不同的业务进行划分后构成虚拟数仓,虚拟数仓共享底层的数据,可以通过MVCC机制来实现数据访问的一致性。

在公有云中云数仓以服务的模式来进行交互,降低数据仓库的管理复杂度,用户将运维、升级等工作交由云厂商来实现,并且以Web的方式来使用数据仓库服务。目前各种云数仓产品层出不穷,从公有云厂商推出的Google BigQuery、Redshift、Synapse、Snowflake、国内云厂商的阿里云ADB、华为云GaussDB、移动云海山数仓,到近期开源的DataBend、ByConity等,这些产品之间的功能基本相同,只是在技术细节的实现各有不同。

移动云云原生数据库海山数仓产品是中国移动自主研发的云原生分析型(OLAP)数据库。采用基于 Shared-Data与存储计算分离架构,具备zero-ETL能力,具备水平在线扩缩容,金融级高可用,提供全面向量化引擎与多种数据源联邦查询等重要特性。兼容 MySQL 协议和 MySQL 生态。支持海量数据在线查询,复杂查询快速响应,多维数据查询分析等。不仅有力辅助企业客户驾驭复杂的计算场景与海量数据需求,简化数据流转流程,使用户得以快速洞悉业务运营的真实面貌,而且还能有效帮助企业抓住数据时代的战略机遇,驱动业务模式的创新与升级。

6.总结

数据仓库从概念提出后随着用户使用需求的变化、新技术的出现等多种因素促使架构不断演进,在这个过程中不同的厂商针对各自的观点和需求,例如原始数据(数据湖)、实时性、多模数据及机器学习等,不断的在进行架构优化和新技术的引入,针对数仓的概念也在不断的重新定义,下图对这些概念进行了总结:

  

在图中数据库、数据仓库与数据湖保持明确的功能定位,产品体系的界限相对比较清晰,但是随着技术的发展,产品也在相互借鉴融合。数据仓库由于对数据实时性的需求演进到了实时数仓,在这个过程中数据的实时接入框架、查询性能的提升、交互式查询等能力让数仓的实现复杂化;为了面向满足不同数据类型的需求,数据仓库逐步进行数据的融合处理,形成了湖仓、多模数据库的概念。随时云原生技术的发展,目前各种类型的数据仓库在加速向云架构转型,力求打造新一代云数据仓库。目前在业界虽然数仓的产品数量及类型较多,但从技术实现的角度观察,它们正在朝着相似的核心技术和设计理念靠拢例如向量化执行、编译执行、计算Pipeline模型、计算存储分离、灵活弹缩等。

7.参考链接

1)数据仓库发展史:数据库发展史2--数据仓库_Data_Oracle_Inmon

2)从数仓架构到大数据架构的九种演进:https://mp.weixin.qq.com/s/5AjL6b9SleMERfRiWmycxg

3)从Snowflake看数据仓库未来演进方向:https://www.infoq.cn/article/Afr0uCxfAXsRBzLQQ24N

4)DB Engine 数据库排行及介绍 : https://db-engines.com/en/

5)墨天轮中国数据库流行度排行:https://www.modb.pro/dbRank

5)CliBench数据仓库评测:https://benchmark.clickhouse.com

7)各产品官网与开源社区:

https://github.com/ClickHouse/ClickHouse

https://github.com/apache/doris

https://github.com/greenplum-db/gpdb

https://clickhouse.com/

Apache Doris: Open-Source Real-Time Data Warehouse - Apache Doris

https://github.com/datafuselabs/databend

https://github.com/ByConity

  1. 作者介绍:

冯永设,中国移动云能力中心数据库产品部-OLAP数据库开发工程师。主要参与OLAP数据库产品架构设计/内核优化等工作。

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

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

相关文章

数据结构DAY5--二叉树的概念

树: 概念: 由n个节点组成的有限集,有一个根节点;其他节点只有一个前驱节点,但可以有多个后继节点。(一对多) 叶子节点(终端结点):只有前驱结点没有后继结点 非叶子节点&#xff0…

【新增利息宝】最新更新的自动抢单系统V6源码免授权无后门 利息宝/抢单/接单返利/区块链

【新增利息宝V6】免授权无后门自动抢单系统源码/利息宝/抢单/接单返利/区块链 更新日志: Ⅰ、新增利息宝功能,余额转入理财 Ⅱ、优化抢单体验,显示随机倒计时和提示内容 Ⅲ、新增首页和订单页面UI特效 Ⅳ、修复抢单页面回调不能返回原分…

【opencv】示例-ela.cpp JPEG图像的错误等级分析(ELA) 通过分析图像压缩后的差异来检测图像是否被篡改过...

ela_modified.jpg 原始ela_modified压缩后再解压得到compressed_img 差异图像Ela 这段代码的功能是实现JPEG图像的错误等级分析(ELA),通过分析图像压缩后的差异来检测图像是否被篡改过。程序会首先读取一张图片,然后对其应用质量…

算法打卡day31

今日任务: 1)435.无重叠区间 2)763.划分字母区间 3)56.合并区间 435.无重叠区间 题目链接:435. 无重叠区间 - 力扣(LeetCode) 给定一个区间的集合,找到需要移除区间的最小数量&…

自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南

文章目录 一、构建方法1、api/request.js2、api/requestHandler.js3、api/index.js 二、测试方法1、api/axios.js2、main.js3、app.vue4、vue.config.js5、index.html 三、打包1、配置package.json2、生成库包3、配置发布信息4、发布 四、使用1、安装2、使用 五、维护1、维护和…

AGI的核心对齐问题:能力泛化和急速左转

在解决人工智能对齐(alignment)的技术挑战时,一个核心问题是确保人工智能系统的行为与人类价值和期望保持一致。 然而,人工智能系统往往在获取更强大的能力时会比在对齐方面更容易实现泛化。换句话说,尽管我们可能能够…

Git 安装和配置

下载 Git 网址: https://git-scm.com/download 安装 Git 双击安装包, 开始安装. 修改安装路径, 选择非中文无空格路径: 开始安装: 安装成功: 配置 Git 安装完成后, 在任意文件夹内, 右键, 可以显示两个 Git 选项, 就说明安装成功了.

数据结构——线性表(链式存储结构)

语言:C语言软件:Visual Studio 2022笔记书籍:数据结构——用C语言描述如有错误,感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列,对n>0,除第一元素无直接…

如何用electron(vue)搜索电脑本地wifi

对于搜索本地 WiFi 网络,可以使用 Electron 结合 Node.js 来编写一个简单的应用程序。 以下是一个基本的示例,它使用 Node.js 的 wifi 模块来搜索并列出附近的 WiFi 网络: 首先,确保你已经安装了 Node.js 和 Electron。 然后&am…

【Qt】:对话框(一)

对话框 一.基本的对话框二.自定义对话框三.通过图形化界面自定义对话框四.关于对话框mode 对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者…

Learning Feature Sparse Principal Subspace 论文阅读

1 Abstract: 这篇论文提出了新的算法来解决特征稀疏约束的主成分分析问题(FSPCA),该问题同时执行特征选择和PCA。现有的FSPCA优化方法需要对数据分布做出假设,并且缺乏全局收敛性的保证。尽管一般的FSPCA问题是NP难问题&#xff…

华为海思数字芯片设计笔试第二套

1.声明 下面的题目作答都是自己认为正确的答案,并非官方答案,如果有不同的意见,可以评论区交流。 这些题目也是笔者从各个地方收集的,感觉有些题目答案并不正确,所以在个别题目会给出自己的见解,欢迎大家讨…

Adobe After Effects 2024 v24.3 macOS 视频合成及特效制作软件 兼容 M1/M2/M3

Adobe After Effects 是一款适用于视频合成及特效制作软件,是制作动态影像设计不可或缺的辅助工具,是视频后期合成处理的专业非线性编辑软件。 macOS 12.0及以上版本可用 应用介绍 Adobe After Effects简称 AE 是一款适用于视频合成及特效制作软件,是制作动态影像设计不可或缺…

防止邮箱发信泄露服务器IP教程

使用QQ邮箱,网易邮箱,189邮箱,新浪邮箱,139邮箱可能会泄露自己的服务器IP。 泄露原理:服务器通过请求登录SMTP邮箱服务器接口,对指定的收件人发送信息。 建议大家使用商业版的邮箱,比如阿里云邮箱发信等 防止邮件发信漏源主要关注的是确保邮件…

智能边缘自动化:HDMI接口钡铼ARM工业电脑实践案例

一款具备HDMI接口的高性能ARM工业计算机应运而生,为实现在工业4.0时代的关键数据实时处理与可视化管理提供了强有力的硬件支撑。这款计算机依托其独特的边缘计算能力,完美解决了工业环境中大规模数据传输至云端的高延迟问题,成功实现了OT&…

内网安全--AS-REP Roasting攻击

AS-REP Roasting是一种对用户账号进行离线爆破的攻击方式。但是该攻击方式利用比较局限,因为其需要用户账户设置“不要求Kerberos预身份验证”选项,而该选项是默认没有勾选上的。Kerberos预身份验证发送在Kerberos身份验证的第一阶段(AS_REQ&AS-REP)…

免费的GPT-3.5 API服务aurora

什么是 aurora ? aurora 是利用免登录 ChatGPT Web 提供的无限制免费 GPT-3.5-Turbo API 的服务,支持使用 3.5 的 access 调用。 【注意】:仅 IP 属地支持免登录使用 ChatGPT的才可以使用(也可以自定义 Baseurl 来绕过限制&#x…

逐步学习Go-sync.RWMutex(读写锁)-深入理解与实战

概述 在并发编程中,我们经常会遇到多个线程或协程访问共享资源的情况。为了保护这些资源不被同时修改,我们会用到"锁"的概念。 Go中提供了读写锁:sync.RWMutex。 sync.RWMutex是Go语言提供的一个基础同步原语,它是Rea…

3D Matching:实现halcon中的find_surface_model

halcon中的三维匹配大致分为两类,一类是基于形状的(Shape-Based),一类是基于表面的(Surface-Based)。基于形状的匹配可用于单个2D图像中定位复杂的3D物体,3D物体模型必须是CAD模型,且几何边缘清晰可见,使用的相机也要预…

com.intellij.diagnostic.PluginException 问题

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、 推荐阅读 一、导读 遇到…