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

Apache Doris 2.0.0 版本正式发布:盲测性能 10 倍提升,更统一多样的极速分析体验

亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于 2023 年 8 月 11 日正式发布,有超过 275 位贡献者为 Apache Doris 提交了超过 4100 个优化与修复。

在 2.0.0 版本中,Apache Doris 在标准 Benchmark 数据集上盲测查询性能得到超过 10 倍的提升、在日志分析和数据湖联邦分析场景能力得到全面加强、数据更新效率和写入效率都更加高效稳定、支持了更加完善的多租户和资源隔离机制、在资源弹性与存算分离方向踏上了新的台阶、增加了一系列面向企业用户的易用性特性。在经过近半年的开发、测试与稳定性调优后,这一版本已经正式稳定可用,欢迎大家下载使用。

GitHub下载:

https://github.com/apache/doris/releases/tag/2.0.0-rc04

官网下载页:

https://doris.apache.org/download

Release Note:

https://github.com/apache/doris/issues/22647

盲测性能 10 倍以上提升

在 Apache Doris 2.0.0 版本中,我们引入了全新查询优化器和自适应的并行执行模型,结合存储层、执行层以及执行算子上的一系列性能优化手段,实现了盲测性能 10 倍以上的提升。以 SSB-Flat 和 TPC-H 标准测试数据集为例,在相同的集群和机器配置下,新版本宽表场景盲测较之前版本性能提升 10 倍、多表关联场景盲测提升了 13 倍,实现了巨大的性能飞跃。

2.0版本1.png

2.0 版本2.png

01  更智能的全新查询优化器

全新查询优化器采取了更先进的 Cascades 框架、使用了更丰富的统计信息、实现了更智能化的自适应调优,在绝大多数场景无需任何调优和 SQL 改写即可实现极致的查询性能,同时对复杂 SQL 支持得更加完备、可完整支持 TPC-DS 全部 99 个 SQL。通过全新查询优化器,我们可以胜任更多真实业务场景的挑战,减少因人工调优带来的人力消耗,真正助力业务提效。

以 TPC-H 为例,全新优化器在未进行任何手工调优和 SQL 改写的情况下,绝大多数 SQL 仍领先于旧优化器手工调优后的性能表现!而在超过百家 2.0 版本提前体验用户的真实业务场景中,绝大多数原始 SQL 执行效率得以极大提升。

2.0版本3.png

参考文档:https://doris.apache.org/zh-CN/docs/dev/query-acceleration/nereids

如何开启:SET enable_nereids_planner=true 在 Apache Doris 2.0.0 版本中全新查询优化器已经默认开启

02  倒排索引支持

在 2.0.0 版本中我们对现有的索引结构进行了丰富,引入了倒排索引来应对多维度快速检索的需求,在关键字模糊查询、等值查询和范围查询等场景中均取得了显著的查询性能和并发能力提升。

在此以某头部手机厂商的用户行为分析场景为例,在之前的版本中,随着并发量的上升、查询耗时逐步提升,性能下降趋势比较明显。而在 2.0.0 版本开启倒排索引后,随着并发量的提升查询性能始终保持在毫秒级。在同等查询并发量的情况下,2.0.0 版本在该用户行为分析场景中并发查询性能提升了 5-90 倍!

2.0版本4.png

03  点查询并发能力提升 20 倍

在银行交易流水单号查询、保险代理人保单查询、电商历史订单查询、快递运单号查询等 Data Serving 场景,会面临大量一线业务人员及 C 端用户基于主键 ID 检索整行数据的需求,同时在用户画像、实时风控等场景中还会面对机器大规模的程序化查询,在过去此类需求往往需要引入 Apache HBase 等 KV 系统来应对点查询、Redis 作为缓存层来分担高并发带来的系统压力。

对于基于列式存储引擎构建的 Apache Doris 而言,此类的点查询在数百列宽表上将会放大随机读取 IO,并且查询优化器和执行引擎对于此类简单 SQL 的解析、分发也将带来不必要的额外开销,负责 SQL 解析的 FE 模块往往会成为限制并发的瓶颈,因此需要更高效简洁的执行方式。

在 Apache Doris 2.0.0 版本,我们引入了全新的行列混合存储以及行级 Cache,使得单次读取整行数据时效率更高、大大减少磁盘访问次数,同时引入了点查询短路径优化、跳过执行引擎并直接使用快速高效的读路径来检索所需的数据,并引入了预处理语句复用执行 SQL 解析来减少 FE 开销。

通过以上一系列优化,Apache Doris 2.0.0 版本在并发能力上实现了数量级的提升,实现了单节点 30000 QPS 的并发表现,较过去版本点查询并发能力提升超 20 倍!

基于以上能力,Apache Doris 可以更好应对高并发数据服务场景的需求,替代 HBase 在此类场景中的能力,减少复杂技术栈带来的维护成本以及数据的冗余存储。

参考文章:Apache Doris 2.0 高并发特性解读,查询并发提升 20 倍、单节点数万 QPS

04  自适应的并行执行模型

在实现极速分析体验的同时,为了保证多个混合分析负载的执行效率以及查询的稳定性,在 2.0.0 版本中我们引入了 Pipeline 执行模型作为查询执行引擎。在 Pipeline 执行引擎中,查询的执行是由数据来驱动控制流变化的,各个查询执行过程之中的阻塞算子被拆分成不同 Pipeline,各个 Pipeline 能否获取执行线程调度执行取决于前置数据是否就绪,实现了阻塞操作的异步化、可以更加灵活地管理系统资源,同时减少了线程频繁创建和销毁带来的开销,并提升了 Apache Doris 对于 CPU 的利用效率。因此 Apache Doris 在混合负载场景中的查询性能和稳定性都得到了全面提升。参考文档:https://doris.apache.org/zh-CN/docs/dev/query-acceleration/pipeline-execution-engine

如何开启 Set enable_pipeline_engine = true

  • 该功能在 Apache Doris 2.0.0 版本中将默认开启,BE 在进行查询执行时默认将 SQL 的执行模型转变 Pipeline 的执行方式。
  • parallel_pipeline_task_num 代表了 SQL 查询进行查询并发的 Pipeline Task 数目。Apache Doris 默认配置为0,此时 Apache Doris 会自动感知每个 BE 的 CPU 核数并把并发度设置为 CPU 核数的一半,用户也可以实际根据自己的实际情况进行调整。
  • 对于从老版本升级的用户,会自动将该参数设置成老版本中 parallel_fragment_exec_instance_num 的值。

更统一多样的分析场景

作为最初诞生于报表分析场景的 OLAP 系统,Apache Doris 在这一擅长领域中做到了极致,凭借自身优异的分析性能和极简的使用体验收获到了众多用户的认可,在诸如实时看板(Dashboard)、实时大屏、业务报表、管理驾驶舱等实时报表场景以及自助 BI 平台、用户行为分析等即席查询场景获得了极为广泛的运用。

而随着用户规模的极速扩张,越来越多用户开始希望通过 Apache Doris 来简化现有的繁重大数据技术栈,减少多套系统带来的使用及运维成本。因此 Apache Doris 也在不断拓展应用场景的边界,从过去的实时报表和 Ad-hoc 等典型 OLAP 场景到湖仓一体、ELT/ETL、日志检索与分析、高并发 Data Serving 等更多业务场景,而日志检索分析、湖仓一体也是我们在 Apache Doris 最新版本中的重要突破。

01  10倍以上性价比的日志检索分析平台

在 Apache Doris 2.0.0 版本中,我们提供了原生的半结构化数据支持,在已有的 JSON、Array 基础之上增加了复杂类型 Map,并基于 Light Schema Change 功能实现了 Schema Evolution。与此同时,2.0.0 版本新引入的倒排索引和高性能文本分析算法全面加强了 Apache Doris 在日志检索分析场景的能力,可以支持更高效的任意维度分析和全文检索。结合过去在大规模数据写入和低成本存储等方面的优势,相对于业内常见的日志分析解决方案,基于 Apache Doris 构建的新一代日志检索分析平台实现了 10 倍以上的性价比提升。

2.0版本5.png

02  湖仓一体

在 Apache Doris 1.2 版本中,我们引入了 Multi-Catalog 功能,支持了多种异构数据源的元数据自动映射与同步,实现了便捷的元数据和数据打通。在 2.0.0 版本中,我们进一步对数据联邦分析能力进行了加强,引入了更多数据源,并针对用户的实际生产环境做了诸多性能优化,在真实工作负载情况下查询性能得到大幅提升。

2.0版本6.png

在数据源方面,Apache Doris 2.0.0 版本支持了 Hudi Copy-on-Write 表的 Snapshot Query 以及 Merge-on-Read 表的 Read Optimized Query,截止目前已经支持了 Hive、Hudi、Iceberg、Paimon、MaxCompute、Elasticsearch、Trino、ClickHouse 等数十种数据源,几乎支持了所有开放湖仓格式和 Metastore。同时还支持通过 Apache Range 对 Hive Catalog 进行鉴权,可以无缝对接用户现有的权限系统。同时还支持可扩展的鉴权插件,为任意 Catalog 实现自定义的鉴权方式。

在性能方面,利用 Apache Doris 自身高效的分布式执行框架、向量化执行引擎以及查询优化器,结合 2.0 版本中对于小文件和宽表的读取优化、本地文件 Cache、ORC/Parquet 文件读取效率优化、弹性计算节点以及外表的统计信息收集,Apaceh Doris 在 TPC-H 场景下查询 Hive 外部表相较于 Presto/Trino 性能提升 3-5 倍

2.0版本7.png

通过这一系列优化,Apache Doris 湖仓一体的能力得到极大拓展,在如下场景可以更好发挥其优异的分析能力:

  • 湖仓查询加速:为数据湖、Elasticsearch 以及各类关系型数据库提供优秀的查询加速能力,相比 Hive、Presto、Spark 等查询引擎实现数倍的性能提升。
  • 数据导入与集成:基于可扩展的连接框架,增强 Apache Doris 在数据集成方面的能力,让数据更便捷的被消费和处理。用户可以通过 Apache Doris 对上游的多种数据源进行统一的增量、全量同步,并利用 Apache Doris 的数据处理能力对数据进行加工和展示,也可以将加工后的数据写回到数据源,或提供给下游系统进行消费。
  • 统一数据分析网关:利用 Apache Doris 构建完善可扩展的数据源连接框架,便于快速接入多类数据源。提供基于各种异构数据源的快速查询和写入能力,将 Apache Doris 打造成统一的数据分析网关。

高效的数据更新

在实时分析场景中,数据更新是非常普遍的需求。用户不仅希望能够实时查询最新数据,也希望能够对数据进行灵活的实时更新。典型场景如电商订单分析、物流运单分析、用户画像等,需要支持数据更新类型包括整行更新、部分列更新、按条件进行批量更新或删除以及整表或者整个分区的重写(inser overwrite)。

高效的数据更新一直是大数据分析领域的痛点,离线数据仓库 Hive 通常只支持分区级别的数据更新,而 Hudi 和 Iceberg 等数据湖,虽然支持 Record 级别更新,但是通常采用 Merge-on-Read 或 Copy-on-Write 的方式,仅适合低频批量更新而不适合实时高频更新。

在 Apache Doris 1.2 版本,我们在 Unique Key 主键模型实现了 Merge-on-Write 的数据更新模式,数据在写入阶段就能完成所有的数据合并工作,因此查询性能得到 5-10 倍的提升。在 Apache Doris 2.0 版本我们进一步加强了数据更新能力,主要包括:

  • 对写入性能进行了大幅优化,高并发写入和混合负载写入场景的稳定性也显著提升。例如在单 Tablet 7GB 的重复导入测试中,数据导入的耗时从约 30 分钟缩短到了 90s,写入效率提升 20 倍;以某头部支付产品的场景压测为例,在 20 个并行写入任务下可以达到 30 万条每秒的写入吞吐,并且持续写入十几个小时后仍然表现非常稳定。
  • 支持部分列更新功能。在 2.0.0 版本之前 Apache Doris 仅支持通过 Aggregate Key 聚合模型的 Replace_if_not_null 进行部分列更新,在 2.0.0 版本中我们增加了 Unique Key 主键模型的部分列更新,在多张上游源表同时写入一张宽表时,无需由 Flink 进行多流 Join 打宽,直接写入宽表即可,减少了计算资源的消耗并大幅降低了数据处理链路的复杂性。同时在面对画像场景的实时标签列更新、订单场景的状态更新时,直接更新指定的列即可,较过去更为便捷。
  • 支持复杂条件更新和条件删除。在 2.0.0 版本之前 Unique Key 主键模型仅支持简单 Update 和 Delete 操作,在 2.0.0 版本中我们基于 Merge-on-Write 实现了复杂条件的数据更新和删除,并且执行效率更加高效。基于以上优化,Apache Doris 对于各类数据更新需求都有完备的能力支持!

更加高效稳定的数据写入

01  导入性能进一步提升

聚焦于实时分析,我们在过去的几个版本中在不断增强实时分析能力,其中端到端的数据实时写入能力是优化的重要方向,在 Apache Doris 2.0 版本中,我们进一步强化了这一能力。通过 Memtable 不使用 Skiplist、并行下刷、单副本导入等优化,使得导入性能有了大幅提升:

  • 使用 Stream Load 对 TPC-H 144G lineitem 表原始数据进行三副本导入 48 buckets Duplicate 表,吞吐量提升 100%。
  • 使用 Stream Load 对 TPC-H 144G lineitem 表原始数据进行三副本导入 48 buckets Unique Key 表,吞吐量提升 200%。
  • 使用 insert into select 对 TPC-H 144G lineitem 表进行导入 48 buckets Duplicate 表,吞吐量提升 50%。
  • 使用 insert into select 对 TPC-H 144G lineitem 表进行导入 48 buckets Unique Key 表,吞吐提升 150%。

02  数据高频写入更稳定

在高频数据写入过程中,小文件合并和写放大问题以及随之而来的磁盘 I/O和 CPU 资源开销是制约系统稳定性的关键,因此在 2.0 版本中我们引入了 Vertical Compaction 以及 Segment Compaction,用以彻底解决 Compaction 内存问题以及写入过程中的 Segment 文件过多问题,资源消耗降低 90%,速度提升 50%,内存占用仅为原先的 10%

详细介绍:https://mp.weixin.qq.com/s/BqiMXRJ2sh4jxKdJyEgM4A

03  数据表结构自动同步

在过去版本中我们引入了毫秒级别的 Schema Change,而在最新版本 Flink-Doris-Connector 中,我们实现了从 MySQL 等关系型数据库到 Apache Doris 的一键整库同步。在实际测试中单个同步任务可以承载数千张表的实时并行写入,从此彻底告别过去繁琐复杂的同步流程,通过简单命令即可实现上游业务数据库的表结构及数据同步。同时当上游数据结构发生变更时,也可以自动捕获 Schema 变更并将 DDL 动态同步到 Doris 中,保证业务的无缝运行。

详细介绍:https://mp.weixin.qq.com/s/Ur4VpJtjByVL0qQNy_iQBw

更加完善的多租户资源隔离

多租户与资源隔离的主要目的是为了保证高负载时避免相互发生资源抢占,Apache Doris 在过去版本中推出了资源组(Resource Group)的硬隔离方案,通过对同一个集群内部的 BE 打上标签,标签相同的 BE 会组成一个资源组。数据入库时会按照资源组配置将数据副本写入到不同的资源组中,查询时按照资源组的划分使用对应资源组上的计算资源进行计算,例如将读、写流量放在不同的副本上从而实现读写分离,或者将在线与离线业务划分在不同的资源组、避免在离线分析任务之间的资源抢占。

2.0版本8.png

资源组这一硬隔离方案可以有效避免多业务间的资源抢占,但在实际业务场景中可能会存在某些资源组紧张而某些资源组空闲的情况发生,这时需要有更加灵活的方式进行空闲资源的共享,以降低资源空置率。因此在 2.0.0 版本中我们增加了 Workload Group 资源软限制的方案,通过对 Workload 进行分组管理,以保证内存和 CPU 资源的灵活调配和管控。

2.0版本9.png

通过将 Query 与 Workload Group 相关联,可以限制单个 Query 在 BE 节点上的 CPU 和内存资源的百分比,并可以配置开启资源组的内存软限制。当集群资源紧张时,将自动 Kill 组内占用内存最大的若干个查询任务以减缓集群压力。当集群资源空闲时,一旦 Workload Group 使用资源超过预设值时,多个 Workload 将共享集群可用空闲资源并自动突破阈值,继续使用系统内存以保证查询任务的稳定执行。Workload Group 还支持设置优先级,通过预先设置的优先级进行资源分配管理,来确定哪些任务可正常获得资源,哪些任务只能获取少量或没有资源。

与此同时,在 Workload Group 中我们还引入了查询排队的功能,在创建 Workload Group 时可以设置最大查询数,超出最大并发的查询将会进行队列中等待执行,以此来缓解高负载下系统的压力。

极致弹性与存算分离

过去 Apache Doris 凭借在易用性方面的诸多设计帮助用户大幅节约了计算与存储资源成本,而面向未来的云原生架构,我们已经走出了坚实的一步。

从降本增效的趋势出发,用户对于计算和存储资源的需求可以概括为以下几方面:

  • 计算资源弹性:面对业务计算高峰时可以快速进行资源扩展提升效率,在计算低谷时可以快速缩容以降低成本;
  • 存储成本更低:面对海量数据可以引入更为廉价的存储介质以降低成本,同时存储与计算单独设置、相互不干预;
  • 业务负载隔离:不同的业务负载可以使用独立的计算资源,避免相互资源抢占;
  • 数据管控统一:统一 Catalog、统一管理数据,可以更加便捷地分析数据。

存算一体的架构在弹性需求不强的场景具有简单和易于维护的优势,但是在弹性需求较强的场景有一定的局限。而存算分离的架构本质是解决资源弹性的技术手段,在资源弹性方面有着更为明显的优势,但对于存储具有更高的稳定性要求,而存储的稳定性又会进一步影响到 OLAP 的稳定性以及业务的存续性,因此也引入了 Cache 管理、计算资源管理、垃圾数据回收等一系列机制。

而在与 Apache Doris 社区广大用户的交流中,我们发现用户对于存算分离的需求可以分为以下三类:

  • 目前选择简单易用的存算一体架构,暂时没有资源弹性的需求;
  • 欠缺稳定的大规模存储,要求在 Apache Doris 原有基础上提供弹性、负载隔离以及低成本;
  • 有稳定的大规模存储,要求极致弹性架构、解决资源快速伸缩的问题,因此也需要更为彻底的存算分离架构;

为了满足前两类用户的需求,Apache Doris 2.0 版本中提供了可以兼容升级的存算分离方案:

第一种,计算节点。2.0 版本中我们引入了无状态的计算节点 Compute Node,专门用于数据湖分析。相对于原本存储计算一体的混合节点,Compute Node 不保存任何数据,在集群扩缩容时无需进行数据分片的负载均衡,因此在数据湖分析这种具有明显高峰的场景中可以灵活扩容、快速加入集群分摊计算压力。同时由于用户数据往往存储在 HDFS/S3 等远端存储中,执行查询时查询任务会优先调度到 Compute Node 执行,以避免内表与外表查询之间的计算资源抢占。

参考文档:https://doris.apache.org/zh-CN/docs/dev/advanced/compute_node

第二种,冷热数据分层。在存储方面,冷热数据往往面临不同频次的查询和响应速度要求,因此通常可以将冷数据存储在成本更低的存储介质中。在过去版本中 Apache Doris 支持对表分区进行生命周期管理,通过后台任务将热数据从 SSD 自动冷却到 HDD,但 HDD 上的数据是以多副本的方式存储的,并没有做到最大程度的成本节约,因此对于冷数据存储成本仍然有较大的优化空间。在 Apache Doris 2.0 版本中推出了冷热数据分层功能,冷热数据分层功能使 Apache Doris 可以将冷数据下沉到存储成本更加低廉的对象存储中,同时冷数据在对象存储上的保存方式也从多副本变为单副本,存储成本进一步降至原先的三分之一,同时也减少了因存储附加的计算资源成本和网络开销成本。通过实际测算,存储成本最高可以降低超过 70%!

参考文档:https://doris.apache.org/zh-CN/docs/dev/advanced/cold_hot_separation

面对更加彻底的存储计算分离需求,飞轮科技(SelectDB)技术团队设计并实现了全新的云原生存算分离架构(SelectDB Cloud),近一年来经历了大量企业客户的大规模使用,在性能、功能成熟度、系统稳定性等方面经受了真实生产环境的考验。在 Apache Doris 2.0.0 版本发布之际,飞轮科技宣布将这一经过大规模打磨后的成熟架构贡献至 Apache Doris 社区。这一工作预计将于 2023 年 10 月前后完成,届时全部存算分离的代码都将会提交到 Apache Doris 社区主干分支中,预计在 9 月广大社区用户就可以提前体验到基于存算分离架构的预览版本。

易用性进一步提升

除了以上功能需求外,在 Apache Doris 还增加了许多面向企业级特性的体验改进。

01  支持 Kubernetes 容器化部署

在过去 Apache Doris 是基于 IP 通信的,在 K8s 环境部署时由于宿主机故障发生 Pod IP 漂移将导致集群不可用,在 2.0 版本中我们支持了 FQDN,使得 Apache Doris 可以在无需人工干预的情况下实现节点自愈,因此可以更好应对 K8s 环境部署以及灵活扩缩容。

02  跨集群数据复制

在 Apache Doris 2.0.0 版本中,我们可以通过 CCR 的功能在库/表级别将源集群的数据变更同步到目标集群,可根据场景精细控制同步范围;用户也可以根据需求灵活选择全量或者增量同步,有效提升了数据同步的灵活性和效率;此外 Dors CCR 还支持 DDL 同步,源集群执行的 DDL 语句可以自动同步到目标集群,从而保证了数据的一致性。Doris CCR 配置和使用也非常简单,简单操作即可快速完成跨集群数据复制。基于 Doris CCR 优异的能力,可以更好实现读写负载分离以及多机房备份,并可以更好支持不同场景的跨集群复制需求

03  其他升级注意事项

  • 1.2-lts 需要停机升级到 2.0.0,2.0-alpha 需要停机升级到 2.0.0
  • 查询优化器开关默认开启 enable_nereids_planner=true ;
  • 系统中移除了非向量化代码,所以 enable_vectorized_engine 参数将不再生效;
  • 新增参数 enable_single_replica_compaction ;
  • 默认使用 datev2, datetimev2, decimalv3 来创建表,不支持 datev1,datetimev1, decimalv2 创建表;
  • 在 JDBC 和 Iceberg Catalog 中默认使用decimalv3;
  • date type 新增 AGG_STATE;
  • backend 表去掉 cluster 列;
  • 为了与 BI 工具更好兼容,在 show create table 时,将 datev2 和 datetimev2 显示为 date 和 datetime。
  • 在 BE 启动脚本中增加了 max_openfiles 和 swap 的检查,所以如果系统配置不合理,be 有可能会启动失败;
  • 禁止在 localhost 访问 FE 时无密码登录;
  • 当系统中存在 Multi-Catalog 时,查询 information schema 的数据默认只显示 internal catalog 的数据;
  • 限制了表达式树的深度,默认为 200;
  • array string 返回值 单引号变双引号;
  • 对 Doris 的进程名重命名为 DorisFE 和 DorisBE;

正式踏上 2.0 之旅

在 Apache Doris 2.0.0 版本发布过程中,我们邀请了数百家企业参与新版本的打磨,力求为所有用户提供性能更佳、稳定性更高、易用性更好的数据分析体验。后续我们将会持续敏捷发版来响应所有用户对功能和稳定性的更高追求,预计 2.0 系列的第一个迭代版本 2.0.1 将于 8 月下旬发布,9 月会进一步发布 2.0.2 版本。在快速 Bugfix 的同时,也会不断将一些最新特性加入到新版本中。9 月份我们还将发布 2.1 版本的尝鲜版本,会增加一系列呼声已久的新能力,包括 Variant 可变数据类型更好满足半结构化数据 Schema Free 的分析需求,多表物化视图在实现查询加速的同时也能简化数据调度和处理链路,在导入性能方面持续优化、增加新的更加简洁的数据导入方式,通过自动攒批实现更加实时的数据写入,复合数据类型的嵌套能力等。

期待 Apache Doris 2.0 版本的正式发布为更多社区用户提供实时统一的分析体验,我们也相信 Apache Doris 2.0 版本会成为您在实时分析场景中的最理想选择。

最后,Apache Doris 社区年度峰会 Doris Summit 2023 已经启程,我们期待将有更多关于 2.0 版本的最佳应用实践在 Doris Summit 2023 被所有用户所看到。

相关文章:

Apache Doris 2.0.0 版本正式发布:盲测性能 10 倍提升,更统一多样的极速分析体验

亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于 2023 年 8 月 11 日正式发布,有超过 275 位贡献者为 Apache Doris 提交了超过 4100 个优化与修复。 在 2.0.0 版本中,Apache Doris 在标准 Benchmark 数…...

LeetCode235. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先 文章目录 [235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/)一、题目二、题解方法一:递归方法二:迭代 一、题目 给定一个二叉搜索树, 找到该树中两个指定…...

设计模式——建造者(Builder)模式

建造者模式(Builder Pattern),又叫生成器模式,是一种对象构建模式 它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。建造者模式是一步一步创建一个复杂的对象,…...

Java课题笔记~ SpringBoot概述

问题导入 学习了SpringBoot入门案例之后,感觉对比SpringMVC哪一个更加方便简洁? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程 Spring程序缺点 配置繁琐 依赖设置繁琐 SpringBoot程序…...

python优雅地爬虫!

背景 我需要获得新闻,然后tts,在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路:获得html内容-> python的工具库解析,获得元素中的内容,完成。 好家伙,我知道我爬…...

UVM RAL后门访问配置

先给一下大致的代码结构,根据代码结构来描述。 //dut结构 module my_dut(...);my_reg U_REG(......);endmodulemodule my_reg(...);//reg1和reg2是一个reg的两个field,reg3单独是一个regreg [15:0] reg1_q;reg [15:0] reg2_q;reg [31:0] reg3_q;endmodu…...

数学建模之“灰色预测”模型

灰色系统分析法在建模中的应用 1、CUMCM2003A SARS的传播问题 2、CUMCM2005A长江水质的评价和预测CUMCM2006A出版社的资源配置 3、CUMCM2006B艾滋病疗法的评价及疗效的预测问题 4、CUMCM2007A 中国人口增长预测 灰色系统的应用范畴大致分为以下几方面: (1)灰色关…...

深入探讨 Oxigen:Rust 实现的并行遗传算法框

第一部分:引言及Oxigen框架概览 随着遗传算法在许多领域(如优化、机器学习和人工智能)的应用日益增多,其性能和效率成为了关键焦点。Oxigen 是一个用 Rust 语言实现的并行遗传算法框架,其提供了高效的并行计算机制&am…...

Flink-----Standalone会话模式作业提交流程

1.Flink的Slot特点: 均分隔离内存,不隔离CPU可以共享:同一个job中,不同算子的子任务才可以共享同一个slot,同时在运行的前提是,属于同一个slot共享组,默认都是“default”2.Slot的数量 与 并行度 的关系 slot 是一种静态的概念,表示最大的并发上线并行度是个动态的概念…...

算法与数据结构(七)--堆

一.堆 1.堆的定义 堆是计算机科学中一类特殊的数据结构的通常,堆通常可以被看做是一颗完全二叉树的数组对象。 堆的特性 1.它是完全二叉树,除了树的最后一层结点不需要是满的,其他的每一层从左到右都是满的,如果最后一层结点不…...

软件工程概述-架构师(三)

软件工程概述(老版) 软件开发生命周期: 软件定义时期:包括 可行性研究和详细需求分析过程,任务是软件工程必需完成的目标,具有可行问题分析、可行性研究、需求分析等。软件开发时期:软件的 设…...

华为手机Outlook手机APP无法登录邮箱,提示[2002]错误代码

近期遇到不少华为手机的Outlook APP无法登录邮箱Office365邮箱的案例,并且提示: 错误 出错了。[2002] 经测试,这应该是华为应用市场下载的Outlook版本有问题。 解决方法: 把Outlook卸载之后从微软官网重新下载官网版本去安装&am…...

“深入探究JVM内部结构与工作原理:解析Java虚拟机“

标题:深入探究JVM内部结构与工作原理 摘要:本文将深入探究Java虚拟机(JVM)的内部结构与工作原理。我们将介绍JVM的基本组成部分,包括类加载器、运行时数据区和执行引擎。同时,我们将通过一个示例代码来说明…...

windows下redis服务启动及.bat文件中中redis服务的启动

windows windows下redis服务的启动 1、不配置环境变量 找到redis服务的安装目录进入命令行窗口并输入命令redis-server.exe redis.windows.conf2、配置环境变量 将redis安装目录配置在path环境变量中之后就可以在cmd窗口的任意位置输入redis-server命令就可以启动redis服务…...

【学习笔记之vue】 Cannot find module ‘node-sass‘

Cannot find module node-sass方案一(不通) 下载node-sass组件 >> npm install -g cnpm>>cnpm install node-sass下载时报错 方案二 使用npm下载node-sass组件 >>npm install node-sassok...

POSTGRESQL 关于安装中自动启动的问题 详解

开头还是介绍一下群,如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis ,SQL SERVER ,ORACLE,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 &…...

Java寻找数组的中心下标

目录 1.题目描述 2.题解 分析 具体实现 1.题目描述 给你一个整数数组 nums ,请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和…...

ORACLE中判断表是否存在再删除表避免报错与MySql和SqlServer的不同

不同数据库中drop a table if it exists的不同: In MySQL it is pretty easy to drop a table if it exists already. In Oracle and Microsoft’s SQL Server it is a little more complicated. Today I want to present you the solutions for these two DBMS’.…...

解决 Maven 创建 Spring Boot 项目时出现 “Cannot access alimaven“ 错误的方法

系列文章目录 文章目录 系列文章目录前言一、确认 Maven 配置二、创建 Spring Boot 项目三、修改项目的 Maven 配置四、清除 Maven 本地仓库五、重新构建项目总结前言 Maven 是 Java 项目的构建工具,而 Spring Boot 则是用于快速构建 Spring 应用程序的框架。但有时,在创建 …...

设计模式——适配器模式

引入实例 说起适配器其实在我们的生活中是非常常见的,比如:学校的宿舍的电压都比较低,而有的学生想使用大功率电器,宿舍的就会跳闸,然而如果你使用一个适配器(变压器)就可以使用了(…...

如何区分闰年与平年

首先要明白 地球绕太阳运行周期为365天5小时48分46秒(合365.24219天),即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,每四年累积约一天,把这一天加于2月末…...

中间件(下)

1、中间件与性能优化的关系: 中间件与性能优化之间存在密切的关系,特别是在构建复杂的分布式系统、处理高并发、实现异步通信等情况下。中间件可以在性能优化方面发挥重要作用,但同时,不当的中间件选择和配置也可能导致性能问题。…...

LVS-DR的RS进行ARP抑制的原因和LVS持久连接配置

一.RS的ARP抑制 1.为什么要抑制 2.如何抑制 (1)修改/etc/sysctl.conf文件,增加以下内容 (2)命令行临时设置 二.LVS持久连接 1.客户端持久连接 2.端口持久连接 3.防火墙标记持久连接 一.RS的ARP抑制 1.为什么要…...

【HarmonyOS】codelab在hvigor版本2.4.2上无法运行问题

【关键字】 HarmonyOS、codelab、hvigor 【问题描述】 有cp反馈集成鸿蒙codelab报错。 下载音乐专辑示例文件(一次开发,多端部署-音乐专辑(ArkTS) (huawei.com))后构建项目,显示找不到2.5.0的hvigor。 …...

MySQL- sql语句基础

文章目录 1.select后对表进行修改(delete)2.函数GROUP_CONCAT()3.使用正则表达式3.DATE_FORMAT()4.count() 加条件 1.select后对表进行修改(delete) 报错:You can’t specify target table ‘Person’ for update in …...

【目标检测中对IoU的改进】GIoU,DIoU,CIoU的详细介绍

文章目录 1、IoU2、GIoU(Generalized Intersection over Union)3、DIoU4、CIoU 1、IoU IoU为交并比,即对于pred和Ground Truth:交集/并集 1、IoU可以作为评价指标使用,也可以用于构建IoU loss 1 - IoU 缺点: 2、对于pred和GT相…...

【环境配置】Windows10终端和VSCode下能够直接打开Anaconda-Prompt

很多小伙伴在 Windows 下做深度学习开发的时候,遇到终端没有在 Linux 那么方便,那么我们现在就可以来设置一下;这样我们也可以在文件夹内部右键打开终端,也可以在 VS Code 里面新建一个虚拟环境的控制台;这里主要是针对…...

稚晖君人形机器人问世:大模型加持,会自己换胳膊,要上生产线造车

从零开始,不到半年就造出人形机器人,还自带软硬件体系。 大模型技术的新一波浪潮:具身智能,已经有了重要进展。 刚刚,稚晖君的创业公司「智元机器人」开了自己的第一场发布会。 以「天才少年」身份加入华为的稚晖君(彭志辉)于去年底宣布离职创业,人们都在关注他在机器…...

变更通知在开源SpringBoot/SpringCloud微服务中的最佳实践

目录导读 变更通知在开源SpringBoot/SpringCloud微服务中的最佳实践1. 什么是变更通知2. 变更通知的场景分析3. 变更通知的技术方案3.1 变更通知的技术实现方案 4. 变更通知的最佳实践总结5. 参考资料 变更通知在开源SpringBoot/SpringCloud微服务中的最佳实践 1. 什么是变更通…...

亚马逊产品排名关键因素解析,通过测评干预需要具备哪些条件

亚马逊产品排名的高低意味着分配的流量多少以及销量的高低。影响产品排名的因素主要包括以下四个方面: 1. 产品销量 产品销量是反映产品在同类产品销售情况的一个重要指标。它在产品Listing中展示,并且平台每小时会更新一次该排行榜。平台算法认为&…...

leetcode原题:绘制直线(位运算)

题目: 已知一个由像素点组成的单色屏幕,每行均有 w 个像素点,所有像素点初始为 0,左上角位置为 (0,0)。 现将每行的像素点按照「每 32 个像素点」为一组存放在一个 int 中,再依次存入长度为 length 的一维数组中。 …...

jenkins 安装和通过gitee 拉取PHP项目

#jenkins 安装地址:https://pkg.jenkins.io/redhat-stable/sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key yum install fontconfig…...

解析TCP/IP协议的分层模型

了解ISO模型:构建通信的蓝图 为了促进网络应用的普及,国际标准化组织(ISO)引入了开放式系统互联(Open System Interconnect,OSI)模型。这个模型包括了七个层次,从底层的物理连接到顶…...

ARM M33架构入门

概述 Arm Cortex-M33核心处理器专为需要高效安全或数字信号控制的物联网和嵌入式应用而设计。该处理器具有许多可选功能,包括数字信号处理扩展 (DSP)、用于硬件强制隔离的TrustZone 安全性、内存保护单元 (MPU)和浮点单元 (FPU)。 Cortex-M33 的性能比 Cortex-M…...

CentOS系统环境搭建(四)——Centos7安装Java

centos系统环境搭建专栏🔗点击跳转 Centos7安装Java 查看云端yum库中目前支持安装的jdk软件包 yum search java|grep jdk选择JDK版本,并安装 yum install -y java-1.8.0-openjdk检查是否安装成功 java -version查看JDK的安装目录 find / -name jav…...

Arduino MQTT客户端库PubSubClient快速入门

文章目录 目的基础说明示例代码总结 目的 MQTT是比较常用在物联网设备中的通讯协议,这篇文章将使用 Arudino ESP32 作为MQTT客户端进行通讯使用演示。目前Arduino的MQTT客户端库中最常使用的是 PubSubClient ,所以本文也将以此进行说明。 主页&#xf…...

视频集中存储/云存储/磁盘阵列EasyCVR平台接入RTSP设备出现离线情况的排查

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...

部署Springboot项目注意事项

步骤 步骤 1:将数据库内容在云服务器上的数据库部署一份 我使用mariadb;会出现一些不兼容现象;我们需要把默认值删掉 2:配置文件你得修改地方 a:linux是磁盘区分(像我自己项目用来储存验证码的文件我们得换这个配置;…...

深度解析:DDoS攻击与先进防御策略

目录 DDoS 介绍 DDoS 攻击理论 DDoS 介绍 DDoS(分布式拒绝服务)攻击是一种恶意网络活动,旨在通过同时向目标系统发送大量请求或流量,使其无法正常运行或提供服务。攻击者通常利用网络上的多个计算机和设备,形成一个&…...

NLP | 论文摘要文本分类

基于论文摘要的文本分类与关键词抽取挑战赛​​​​​​2023 iFLYTEK A.I.开发者大赛-讯飞开放平台 环境需求:Anaconda-JupyterNotebook,或者百度AIStudio 赛题解析: 【文本二分类任务】根据论文摘要等信息理解,将论文划分为0-1两…...

Linux / Ubuntu磁盘扩容

测试时遇到了shell脚本执行错误的问题,找到脚本编写的楼哥,才发现自己给虚拟机的磁盘已经满了,没想到啊,业务的解压操作,这么费磁盘,那就需要进行磁盘的扩展,记录一下 1、首先停掉虚拟机&#…...

【ChatGPT 指令大全】怎么使用ChatGPT来辅助知识学习

目录 概念解说 简易教学 深度教学 教学与测验 解释一个主题的背后原理 总结 在当今信息时代,互联网的快速发展为我们获取知识提供了前所未有的便利。而其中,人工智能技术的应用也为我们的学习和交流带来了新的可能性。作为一种基于自然语言处理的人…...

URL编码指南

URL简介 URL 是统一资源定位符(Uniform Resource Locator)的缩写。它是用于在互联网上定位并访问资源的一种标识方式。 URL通常由以下几个组成部分组成: 协议(Protocol):指示要使用的协议,如…...

Java mail邮件开发 OA办公系统

目录 1 Java mail邮件开发 OA办公系统 1.1 ExitServlet 1.1.1 //退出系统 1.2 LoginAction 1.2.1 //登录Action Java mail邮件开发 OA办公系统 ExitServlet package com.email.ser...

ElasticSearch的客户端操作

ElasticSearch的客户端操作 1、客户端介绍 官方文档地址: https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 实际开发中,有多种方式操作Elasticsearch: 客户端工具:发送http请求(RESTful风格)操作…...

如何快速的合并多个PPT使之成为一个PPT?

如何快速的合并多个PPT使之成为一个PPT? 项目过程中,经常给客户汇报,经常做PPT,有时候,需要把之前的ppt内容整合到新的内容中,如何快速合并以及使用呢? 幻灯片(PPT中)点…...

【微信小程序】列表滚动触底更新实现

微信小程序开发系列 目录 前言一、上拉触底事件函数onReachBottom二、实现 前言 在微信小程序开发中经常遇到分页列表需要滚动到底部之后进行请求数据更新,下面介绍如何进行触底更新分页展示。使用到页面上拉触底事件的处理函数onReachBottom。 一、上拉触底事件函…...

2023全国大学生数学建模竞赛A题B题C题D题E题思路+模型+代码+论文

目录 一. 2023国赛数学建模思路: 赛题发布后会第一时间发布选题建议,思路,模型代码等 详细思路获取见文末名片,9.7号第一时间更新 二.国赛常用的模型算法: 三、算法简介 四.超重要!!&…...

Git常见操作

一、全局配置命令 配置级别: –local(默认,高级优先):只影响本地仓库 –global(中优先级):只影响所有当前用户的git仓库 –system(低优先级):影响到全系统的git仓库 1…...

thinkphp6前后端验证码分离以及验证

1.验证码接口生成验证码: public function verify(){return captcha(); } 也可以自己写方法 2.验证方法和普通模式session验证有区别,需要改原文件: 修改后的代码: <?php // +---------------------------------------------------------------------- // | ThinkP…...