StarRocks + Paimon 在阿里集团 Lakehouse 的探索与实践
作者:
范振: 阿里云计算平台开源 OLAP 负责人,StarRocks 社区 Champion
翁才智: 阿里云技术专家,Apache Paimon PMC Member
导读:阿里集团在推进湖仓一体化建设过程中,依托 StarRocks 强大的 OLAP 查询能力与 Paimon 的高效数据入湖特性,实现了流批一体、存储成本大幅下降、查询性能数倍提升的显著成效:
A+ 业务借助 Paimon 的准实时入湖,显著降低了存储成本,并引入 StarRocks 提升查询性能。升级后,数据时效提前60分钟,开发效率提升50%;JSON列化存储减少50%,查询性能提升最高达10倍;OLAP分析中,非JOIN查询快1倍,JOIN查询快5倍。
饿了么升级为准实时Lakehouse架构后,在时效性仅损失1-5分钟的前提下,实现Flink资源缩减、StarRocks查询性能提升(仅5%性能损失),存储成本降低90%。
阿里集团数据湖项目背景
在过去的十几年中,Hadoop 体系一直是大数据领域的主流架构。无论是大型企业还是中小型企业,大家普遍采用的都是基于 Hadoop 和 Lambda 的架构。具体来说,在离线处理方面,Hive 和 Spark 是主要的工具;而在实时处理领域,Flink 已经成为一种事实标准。在 OLAP 领域,过去几年呈现出百家争鸣的局面,但最近两三年,StarRocks 的市场份额显著增加。
Hadoop 和 Lambda 架构为各公司带来了巨大的商业成功,无论是在数据处理量上,还是在替代传统数据库方面,都发挥了重要作用。以阿里集团为例,其整体架构与行业主流类似,但采用了自研体系,包括 MaxCompute 用于离线处理,以及 Flink 用于实时处理。此外,阿里还推出了 MaxCompute 和 Hologres 等产品,进一步完善了其大数据体系。
然而,Hadoop 和 Lambda 架构也面临着一些挑战,例如需要维护两套架构,存在代码重复编写、数据冗余、开发口径不统一以及数据孤岛等问题。为了应对这些挑战,近年来我们观察到行业趋势主要体现在以下三个方面:
-
Lakehouse 架构的兴起:Lakehouse 作为一种融合了数据湖和数据仓库优势的架构,已经成为行业共识。无论是北美还是国内,Lakehouse 架构的接受度都非常高。
-
开源与社区的力量:开源社区逐渐成为数据领域的主流方向,许多开源公司不断进化,StarRocks 就是其中的佼佼者。
-
AI 与 BI 的融合:AI 技术在近年来形成了浪潮,AI 与 BI 系统的融合,特别是在元数据打通和开放性方面,已经成为架构升级的必然需求。
基于这些趋势,阿里集团进行了深入思考,希望对整体数据架构进行升级,以实现以下目标:
-
流批统一:通过一套代码和统一的架构,简化运营成本,提升开发效率。
-
统一存储:寻找低成本的存储解决方案,降低数据存储成本。
-
高性能分析:在不牺牲业务体验的前提下,选择一款优秀的 OLAP 引擎或 Lakehouse 引擎,推动架构升级。
-
数据统一:实现结构化与非结构化数据的统一,为 AI 与 BI 的融合提供支持,确保“Data for AI”和“AI for Data”在阿里集团顺利落地。
全面升级为 Lakehouse 架构
阿里集团的整体目标与阿里云的目标有着高度的一致性。在2024年的云栖大会上,阿里云推出了名为 OpenLake 的架构。这一架构旨在通过低成本、高可靠的存储解决方案(如阿里云 OSS)构建数据湖。在数据湖格式方面,目前行业内逐渐形成了以 Delta Lake、Hudi 和 Iceberg 为代表的“数据湖三剑客”,以及新兴的 Paimon 等优秀技术。这些技术致力于将传统数据库中的事务特性(如 MVCC、Time Travel 和 Schema Evolution)引入数据湖。
在元数据管理层面,阿里云推出了DLF (Data Lake Formation),而开源社区则有 Polaris、Databricks 推出的 Unity Catalog 等解决方案。这些工具旨在实现 AI 与 BI 的统一管理,为数据湖提供强大的元数据支持。
在计算引擎方面,目前没有一种“万能”的计算引擎,每种引擎都有其适用场景。无论是大数据处理还是 AI 搜索,都存在众多开源和闭源的引擎选择。阿里集团参考阿里云的 OpenLake 体系,进行了自身的架构升级,并且对各种湖格式和 Lakehouse 引擎进行了深入调研。
Why Paimon?
最适合流/批/OLAP 统一的湖格式
在数据湖格式的选择上,业界已经形成了广为人知的“数据湖三剑客”:Delta Lake、Hudi 和 Iceberg。在过去几年的竞争中,这些格式各有优劣,有的逐渐脱颖而出,而有的则在慢慢消退。然而,根据我们的观察,在与 Flink 对接以构建 Streaming Lakehouse 的场景中,这三种格式在设计上都存在一些底层缺陷。
众所周知,构建实时数据库或实时数仓的核心架构通常是 LSM(Log-Structured Merge)架构。这种架构是实时处理的基石。然而,无论是 Iceberg 还是 Delta Lake,它们本质上用的不是这一套的设计思想,这导致它们在支持实时处理和与 Flink 对接时存在诸多不足。
从阿里集团的观察来看,Iceberg 和 Paimon 将成为最具潜力的两种数据湖格式。在北美,像 Snowflake 和Databricks 这样的行业巨头已经将 Iceberg 作为首选支持的数据湖格式,其他格式则被放在次要位置。在国内,由于 Flink 已经成为流处理的事实标准,并且是流批一体的重要引擎,我们预计 Paimon 将成为国内数据湖格式,尤其是 Streaming Lakehouse 场景中最理想的选择。
在最近的 Flink Forward Asia(FFA)大会上,Paimon 推出了1.0版本。这个版本非常可靠,已经可以作为大规模商用的版本。
Paimon 的诞生背景与优势
随着互联网发展,大数据时代来临。用户使用企业产品时会产生大量行为日志,如点击、购买等。高效存储和处理这些日志,以供下游业务部门分析并据此调整策略,是大数据架构的关键任务。
离线数仓是典型的大数据架构,通过定时调度处理上一时间段数据,具有架构简单、适用范围广、中间结果便于查询等优点,且夜间运行可提升集群利用率。但其痛点是延迟高,通常每小时或每天调度一次,无法满足对实时性要求高的业务,如电商大促或异常行为监测。此外,离线数仓更新成本高,需读取原分区数据与新变更合并后覆盖原分区。
流计算引擎的出现催生了实时数仓,其通过消息队列作为中间存储,解决了离线数仓的延迟问题,但消息队列中的中间结果难以查询,增加了数据复用和问题排查的难度。流计算过程中的状态计算成本较高,如 Flink 的 Flink State 功能虽支持毫秒级延迟查询,但需将数据存储在本地高速磁盘,数据量大时会增加计算和存储成本。且在物流等数据有效周期长的业务场景中,很难在短时间内让数据过期,需在成本与正确性间权衡。
从准确性、低成本和时效性三个维度看,离线数仓和实时数仓各有优劣,目前企业大多以离线数仓为主,部分重要业务采用实时链路,形成 Lambda 架构,但同时维护两条链路会增加成本。因此,探索一种既能保留现有架构又能兼具两者优势的折中方案,是 Paimon 的目标。
流式湖仓架构
Paimon 是一种流批一体的数据湖格式,支持实时更新、海量追加、高效查询和数据管理四大核心能力。在更新能力方面,Paimon 的主键表支持大规模更新写入,并且具备出色的更新性能,这得益于其创新性地引入了 LSM Tree 数据结构来处理更新操作。此外,在更新数据时,Paimon 允许用户选择多种更新方式,如打宽、聚合或覆盖等,并且能够生成完整的变更日志,便于下游进行流式消费。
最重要的是,所有变更都能在分钟级延迟内完成,满足了众多业务对时效性的需求。在追加能力方面,Paimon 的非主键表支持大规模流处理和批处理,并且能够自动进行小文件合并,这不仅降低了存储集群的运维压力,还进一步提升了读写效率。在查询能力方面,Paimon 支持了包含 Z-order、索引、Deletion Vector 等多种优化技术,结合 StarRocks 等引擎,可以实现高效的 OLAP 查询。
在数据管理方面,Paimon 的系统表支持查询分区、分桶、文件等元数据信息,并且支持分支管理和时间旅行等功能,方便用户查询不同版本的数据。
这些能力对用户意味着什么?对于离线数仓用户而言,如果采用 Paimon 作为中间存储,无需更改计算链路,即可获得低成本的更新能力,同时保留中间层数据的可复用性。如果后续对时效性有更高要求,也可以借助实时计算引擎,让数据在数仓中以分钟级延迟流动起来。此外,用户还可以将常见的 ETL 操作(如打宽、聚合)下推到 Paimon 中,以降低计算成本。
最后,由于计算结果由 Paimon 统一存储,用户无需维护两套存储链路,从而降低了维护成本。通过这一过程,我们构建了一套以 Paimon 为存储核心的流式湖仓架构。
飞速发展的生态与用户采纳
Paimon 除了以上核心功能之外,还具备非常丰富的生态体系。在核心存储方面,Paimon 支持包括 ORC、Parquet 和 Avro 等常见的大数据文件格式,同时也支持 HDFS、阿里云 OSS 以及 AWS S3 等常见的分布式存储。在数据源方面,Paimon 支持包括 MySQL、Kafka 在内的常见数据源的数据摄入。在数据消费方面,Paimon 实现了引擎的平权发展,无论是 Flink、Spark 这样的流批计算引擎,还是 StarRocks、Trino 这样的查询引擎,都能方便地读取 Paimon 的数据。此外,Paimon 最近也在尝试解锁包括 Rust、Python 在内的多语言支持,希望在机器学习等更多场景中进行进一步探索。
作为新兴的数据湖项目,Paimon 发展迅速。过去两年,社区专注于核心功能研发与项目孵化。 2024年,Paimon 在应用层面取得重大突破:在阿里集团内部的 Alake 数据湖项目中,将统一集团数据湖存储;阿里云的 OpenLake 项目也将围绕 Paimon 构建高效流式湖仓产品线。此外,Paimon 还广泛应用于字节跳动、同城旅行、快手、网易等众多企业,助力其实现更实时、更开放、低成本的数据管理。
Why StarRocks?
查询 Paimon 湖格式性能最好的开源引擎
在探讨完 Paimon 的优势后,接下来需要选择一款 Lakehouse 引擎,以优化 Paimon 的查询性能。我们的结论是:StarRocks 是最适合 Paimon 湖格式的 Lakehouse 开源引擎。以下是我从几个方面对这一结论的思考:
-
性能卓越
StarRocks 是目前性能最好的开源引擎之一。阿里云团队在 StarRocks 数据湖查询方面投入了大量资源,最初支持了 Hive 引擎,随后扩展到 Hudi 和 Iceberg,并与社区共建了许多特性。
在 Hive 引擎方面,我们经常收到客户和社区用户的反馈,包括阿里云的许多客户。在 Benchmark 测试中, StarRocks 的性能比 Trino 快约4倍,而在实际生产业务中,性能提升通常在3到6倍之间。这主要取决于算子的复杂度和 I/O 访问量。在 Paimon 中,我们甚至看到了13倍的性能提升,这一数字非常惊人。
-
技术优势
Paimon 继承了StarRocks 在查询 DLA 方面的所有优势,这些优势可以总结为以下几点:
-
更优的查询计划器:包括 CBO(Cost-Based Optimizer)和对 SDK 元数据的缓存策略,如 table、partition 和 manifest 等,以确保查询计划的最优性。
-
C++ 编写与向量化:StarRocks 使用 C++ 编写,并全面实现了向量化,包括向量化算子、Parquet Reader 和ORC Reader 等,这使得其在性能上优于 Trino。
-
针对 OSS 的优化:我们对 OSS 进行了大量专业优化,这些优化不仅适用于通用场景,还针对 Paimon 进行了许多专有优化,如支持 Paimon 的 DV 表、缓存元数据和索引等。
从动态角度看,引擎的发展是循序渐进的。目前,StarRocks 对 Paimon 的支持表现出色,很多优势源于 StarRocks 利用了 Paimon 的独特特性,例如 Paimon Deletion Vector 以及 Manifest Cache 等。如果 Trino 能够补齐这些短板,其性能也将显著提升,但最终 StarRocks vs Trino 仍然有望达到 3~5 倍的性能提升。
-
存算分离架构统一查询内表和外表
我们非常看重一套架构能够支持两种格式。在 StarRocks 中,我们把存算分离中的表称为内表,把 Paimon 或 Iceberg 这样的表称为外表(湖表)。我们使用存算分离统一架构来支持查询内表和外表。阿里云 EMR Severless StarRocks 正是基于此架构提供的服务。
这种架构有以下几个优点:
-
灵活的物化视图:社区持续推出功能日益丰富的物化视图。这一领域竞争激烈,要实现卓越表现仍需大量工作。
-
灵活的多表联邦查询:支持灵活的多表联邦查询,一个 SQL 中可能包含 Paimon 表和内表,但它们都统一在 OSS 格式上。
-
灵活的弹性和隔离:这是存算分离的天然优势。在存算一体架构中,扩容需进行数据平衡和搬移,操作复杂且耗时;而在存算分离架构中,扩容仅需调整元数据,过程轻量且可实现多种调度策略。
-
统一的缓存管理:鉴于 Paimon 是外表,StarRocks 内表在 OSS 上也是远程表访问,统一的缓存管理十分必要。通过一套架构和缓存管理,实现读取 Paimon 和内表的最快速度。当前现状是,尽管我们希望用 Paimon 构建整个湖仓,但部分业务因快速发展需求,需借助内表的垂直领域特性,如直接从 Flink CDC 消费 Kafka 并利用 StarRocks 的特性。此外,Paimon 目前缺失对半结构化数据(如 JSON)的处理能力,而集团中有大量埋点 JSON 数据需分析,需通过 Flat JSON 导入内表进行优化,以达到理想效果。
强大的社区力量
阿里集团与阿里云合作紧密,阿里云在 StarRocks 上投入已久,我们的团队在社区中深耕多年,对 StarRocks 内核引擎了如指掌,积累了丰富经验。从人力协作和成本角度看,这点至关重要。
更重要的是,我们背后有强大的社区支持。无论是在海外还是国内,社区对 Lakehouse 的发展,尤其是对 Iceberg 和 Paimon 的坚定支持与规划,是我们极为看重的。这也是我们选择的技术发展路线和未来投资方向。因此,我们坚信 StarRocks 是值得长期技术投入的社区。阿里集团的团队也将在2025年继续与社区紧密合作,共同推动发展。
StarRocks x Paimon 在阿里集团的业务应用
A+流量分析
最后,分享两个实际的业务案例。
首先是阿里集团的 A+ 业务,这是阿里所有 APP 的流量域,涉及众多业务方,数据规模庞大。改造前,A+ 业务采用典型的 Lambda 架构,离线使用 MaxCompute 处理,实时则构建了独立链路,继承了 Lambda 架构的优缺点,如开发效率低、实时性不足等。
改造后,我们将架构从 Lambda 转变为准实时架构,离线链路升级为准实时链路。这一转变对 A+ 流量域来说已经足够,实现了显著的成本节约,并大幅提升数据时效性。
A+ 业务是一个典型的数仓架构,包括 ODS、DWD、DWS、ADS 等层次。StarRocks 在这一体系中直接查询 Paimon 的 ADS 层和 DWS 层,这是 StarRocks 直接访问湖表的链路。
另一条链路涉及 JSON 类型流量埋点,数据量极大,Paimon 中难以有效查询,时效性较低。我们通过 StarRocks 3.3 版本后推出的 Flat JSON 特性(与社区共同打磨的成果)来解决这一问题。Flat JSON 在阿里集团已有大规模应用,通过对 JSON 列进行解析和优化,查询性能提升了十倍以上。
总体而言,通过 Paimon 的准实时入湖,我们大幅降低了存储成本,并引入了 StarRocks。在可接受的时效性范围内,OLAP 数据导入的性能虽有小幅下降,但业务价值大幅提升。以下是架构升级所带来的具体收益:
-
流批一体:数据时效提前60分钟;开发效率提升50%;业务获取分钟数据门槛降低
-
Flat JSON:JSON 列化后存储减少50%;JSON 列化导入百亿分钟级;查询性能提升10倍
-
OLAP 分析:非 JOIN 类场景快1倍;JOIN 类查询快5倍
饿了么
饿了么最初采用 Lambda 架构构建,离线部分使用 MaxCompute 处理,实时部分经历了两个阶段:第一阶段是实时数仓1.0,采用 Flink+Kafka 的 Kappa 架构;第二阶段升级为实时数仓2.0,使用 Flink+Hologres 构建。然而,这种架构继承了 Lambda 架构的痛点,如开发效率低、存储成本高。由于使用 SSD 存储两份冗余数据,成本极高。此外,Kappa 架构中无法直接查询 Kafka 数据,导致数据未被充分利用。
升级为准实时 Lakehouse 架构后,收益显著。业务在时效性上仅损失1到5分钟,但获得了以下收益:Flink 资源减少、StarRocks 查询性能提升,查询性能损失仅为5%,而存储成本减少了90%。
在选择数据格式时,饿了么经过大量调研,对比了 Paimon 和 Hudi。Paimon 在时效性上比 Hudi 提高了两倍,因为它与 Flink 的结合更为紧密。
未来展望
最后,我们来看一下阿里集团后续的规划与展望。如之前所述,阿里集团正在推进 Alake 战役,其核心目标是全面升级 Lakehouse 架构。我们将以 Paimon 为底座,并结合 OpenLake,计划引入更多计算引擎,以实现业务接入的灵活性和多样性,为每个业务选择最适合的计算引擎和链路。底层则计划统一采用 Paimon 的湖格式。
在2025年,我们将大规模推进业务接入,探索更多使用方式,并积极与业界分享经验,同时也会为社区做出更多贡献。
相关文章:
StarRocks + Paimon 在阿里集团 Lakehouse 的探索与实践
作者: 范振: 阿里云计算平台开源 OLAP 负责人,StarRocks 社区 Champion 翁才智: 阿里云技术专家,Apache Paimon PMC Member 导读:阿里集团在推进湖仓一体化建设过程中,依托 StarRocks 强大的 OLAP 查询能力与 Paimon…...
OTP单片机调试工具之—单线数据编码
OTP单片机调试工具在实现过程中离不开单线数据的传输,那么使用哪一种方式的数据编码会比较好呢? 我所了解的主要有以下三种: 1.UART(串口),这种方式在单片机和pc之间进行传输都非常常见,效率比较…...
你的完美主义:从缺陷到超能力
所属专栏:《逻辑辨证系列》 前情回顾: 《完美还是完成》(一):完成还是完美—完成大于完美 时间、机会、情绪成本 先完成 … 本期: 《完美还是完成》(二):你的完美主…...
zsh: command not found: adb 报错问题解决
哈喽小伙伴们大家好,我是小李,今天,我满怀信心想要在本地跑一下pda,然而, what? 居然报错了!!别逗我啊! 好吧,究其原因:没有配置好sdk 那就配呗。 首先,…...
应急响应靶机练习-Linux2
1.背景 前景需要:看监控的时候发现webshell告警,领导让你上机检查你可以救救安服仔吗!! 挑战内容: (1)提交攻击者IP (2)提交攻击者修改的管理员密码(明文) (…...
进程间通信--匿名管道
进程间通信介绍 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件&…...
ctfshow-xxs-316-333-wp
316.反射型 XSS(-326都是反射型) js恶意代码是存在于某个参数中,通过url后缀进行get传入,当其他用户点进这个被精心构造的url链接时,恶意代码就会被解析,从而盗取用户信息。 来看题,先简单测试…...
顺序表和链表的对比(一)
前言 今天给小伙伴们分享的是在数据结构中顺序表和链表的对比。它们在计算机科学和软件开发中具有广泛的应用,是理解更复杂数据结构(如栈、队列、树、图等)的基础。这次将会给大家从定义初始化,以及功能增删查改上进行详细对比&a…...
蓝思科技冲刺港股上市,双重上市的意欲何为?
首先,蓝思科技冲刺港股上市,这一举措是其国际化战略进入实质性阶段的重要标志。通过港股上市,蓝思科技有望进一步拓宽融资渠道,这不仅能够为公司带来更加多元化的资金来源,还能够降低对单一市场的依赖风险,…...
【C++项目实战】校园公告搜索引擎:完整实现与优化指南
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长,行则将至 目录 📚一、项目概述 📖1.项目背景 📖2.主要功能 📖3.界面展…...
C语言每日一练——day_8
引言 针对初学者,每日练习几个题,快速上手C语言。第八天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…...
单片机农业大棚浇花系统
标题:单片机农业大棚浇花系统 内容:1.摘要 本文针对传统农业大棚浇花方式效率低、精准度差的问题,提出了一种基于单片机的农业大棚浇花系统。该系统以单片机为核心控制器,通过土壤湿度传感器实时采集土壤湿度数据,并将数据传输至单片机进行处…...
Kubernetes 单节点集群搭建
Kubernetes 单节点集群搭建教程 本人尝试基于Ubuntu搭建一个单节点K8S集群,其中遇到各种问题,最大的问题就是网络,各种镜像源下载不下来,特此记录!注意:文中使用了几个镜像,将看来可能失效导致安…...
windows安装两个或多个JDK,并实现自由切换
我用两个JDK来做演示,分别是JDK8和JDK17(本人已安装JDK8,所以这里只演示JDK17的安装)。 1、下载JDK17安装 Java Downloads | Oracle 2、安装JDK17,这里忽略。直接双击软件,点击下一步就可以。 3、配置环境变量 在系统变量中新建一个CLASSP…...
如何打包数据库mysql数据,并上传到虚拟机上进行部署?
1.连接数据库,使得我们能看到数据库信息,才能进行打包上传 2. 3. 导出结果如下,是xml文件 4.可以查询每个xml文件的属性,确保有大小,这样才是真实导出 5跟着黑马,新建文件夹,并且把对应的东西放…...
fastapi +angular迷宫求解可跨域
说明:我计划使用fastapi angular,实现迷宫路径生成与求解 后端功能包括: 1.FastAPI搭建RESTful接口。写两个接口, 1.1生成迷宫, 1.2求解路径 前端功能包括 1.根据给定的长宽值,生成迷宫 2.点击按钮&…...
CobaltStrike详细使用及Linux上线
1、工具准备 cs工具 将teamserver.zip放进服务端给必要文件增加可执行文件( 执行时会有提示 )服务端启动服务监听 sudo ./teamserver <IP地址> <密码> [c2配置文件]客户端直接连接即可端口默认:50050主机:服务端ip地址2、基础配置 启动监听…...
WSL2 Ubuntu安装GCC不同版本
WSL2 Ubuntu安装GCC不同版本 介绍安装gcc 7.1方法 1:通过源码编译安装 GCC 7.1步骤 1:安装编译依赖步骤 2:下载 GCC 7.1 源码步骤 3:配置和编译步骤 4:配置环境变量步骤 5:验证安装 方法 2:通过…...
WPF CommunityToolkit.MVVM库的简单使用
CommunityToolkit.MVVM 是 .NET 社区工具包中的一部分,它为实现 MVVM(Model-View-ViewModel)模式提供了一系列实用的特性和工具,能帮助开发者更高效地构建 WPF、UWP、MAUI 等应用程序。以下是关于它的详细使用介绍: 1…...
4个 Vue 路由实现的过程
大家好,我是大澈!一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员👨🏻💻,关注我,科技未来或许我能帮到你! Vue 路由相信朋友们用的都很熟了,但是你知道 Vue 路由…...
Compose 实践与探索十 —— 其他预先处理的 Modifier
1、PointerInputModifier PointerInputModifier 用于定制触摸(包括手指、鼠标、悬浮)反馈算法,实现手势识别。 1.1 基本用法 最简单的使用方式就是通过 Modifier.clickable() 响应点击事件: Box(Modifier.size(40.dp).backgro…...
基于Python的天气预报数据可视化分析系统-Flask+html
开发语言:Python框架:flaskPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统登录 可视化界面 天气地图 天气分析 历史天气 用户管理 摘要 本文介绍了基于大数据…...
“消失的中断“
“消失的中断” 1. 前言 在嵌入式开发过程中,中断必不可少。道友们想必也经常因为中断问题头疼不已,今天来说说一个很常见的问题,“消失的中断”。最近项目在使用第三方MCAL的时候,就遇到了I2C中断丢失的问题,排查起…...
对C++面向对象的理解
C的面向对象编程(OOP)是其核心特性之一,通过类(Class)和对象(Object)实现数据和行为的封装,支持继承、多态和抽象等核心概念。以下是关键点解析: 1. 类(Class…...
代码随想录-训练营-day52
97. 小明逛公园 (kamacoder.com) #include<iostream> #include<vector> using namespace std; int main(){int n,m,u,v,w;cin>>n>>m;vector<vector<vector<int>>> grid(n1,vector<vector<int>>(n1,vector<int>(n1…...
Java File 类详解
1. 概述 File 类是 Java 提供的用于文件和目录路径名的抽象表示。它能够用于创建、删除、查询文件和目录的信息,但不用于读写文件内容。如果需要对文件进行读写,可以结合 FileReader、FileWriter、BufferedReader 等类来完成。 2. File 类的构造方法 …...
JS实现省份地级市的选择
JS实现省份地级市的选择 效果展示: 代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><ti…...
【鸿蒙开发】Hi3861学习笔记-Visual Studio Code安装(New)
00. 目录 文章目录 00. 目录01. Visual Studio Code概述02. Visual Studio Code下载03. Visual Studio Code安装04. Visual Studio Code插件05. 附录 01. Visual Studio Code概述 vscode是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管…...
记录致远OA服务器硬盘升级过程
前言 日常使用中OA系统突然卡死,刷新访问进不去系统,ping服务器地址正常,立马登录服务器检查,一看磁盘爆了。 我大脑直接萎缩了,谁家OA系统配400G的空间啊,过我手的服务器没有50也是30台,还是…...
计算机网络-网络规划与设计
基本流程 需求分析—》通信规范分析—》逻辑网络设计—》物理网络设计—》实施阶段 需求分析: 确定需求,包括:业务需求、用户需求、应用需求、计算机平台需求、网络通信需求等。 产物:需求规范 通信规范分析: 现有…...
C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色
C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色 安装 Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.Windows 普通实现 using System; using System.Collections.Generic; using System.Linq; using OpenCvSharp; // 添加OpenCV引用…...
精通游戏测试笔记(持续更新)
第一章、游戏测试的两条规则 不要恐慌 不要将这次发布当作最后一次发布 不要相信任何人 把每次发布当作最后一次发布 第二章:成为一名游戏测试工程师...
Linux内核,mmap_pgoff在mmap.c的实现
1. mmap_pgoff的系统调用实现如下 SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,unsigned long, prot, unsigned long, flags,unsigned long, fd, unsigned long, pgoff) {return ksys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); }2. ksys_mma…...
深度揭秘:蓝耘 Maas 平台如何重塑深度学习格局
目录 前言 深度学习:技术基石与发展脉络 蓝耘 Maas 平台:深度学习的强大助推器 1. 高性能算力支撑 2. 丰富的模型支持 3. 便捷的开发体验 4. 完善的安全保障 代码示例:蓝耘 Maas 平台上的深度学习实践 1. 注册与登录 2. 代码实现 …...
深入解析操作系统进程控制:从地址空间到实战应用
引言 想象这样一个场景: 你的游戏本同时运行着《赛博朋克2077》、Chrome浏览器和Discord语音 突然游戏崩溃,但其他应用依然正常运行 此时你打开任务管理器,发现游戏进程已经消失,但内存占用却未完全释放 这背后涉及的关键机制…...
网络空间安全(33)MSF漏洞利用
前言 Metasploit Framework(简称MSF)是一款功能强大的开源安全漏洞利用和测试工具,广泛应用于渗透测试中。MSF提供了丰富的漏洞利用模块,允许安全研究人员和渗透测试人员利用目标系统中的已知漏洞进行攻击。 一、漏洞利用模块&…...
《Electron 学习之旅:从入门到实践》
前言 Electron 简介 Electron 是由 GitHub 开发的一个开源框架,基于 Chromium 和 Node.js。 它允许开发者使用 Web 技术(HTML、CSS、JavaScript)构建跨平台的桌面应用程序。 Electron 的优势 跨平台:支持 Windows、macOS 和 Linux…...
通达信软件+条件选股+code
在通达信软件中,你的选股公式需要放在 "公式管理器" 的 "条件选股公式" 分类中。以下是详细操作步骤: 一、打开公式管理器 打开通达信软件,按快捷键 Ctrl + F (或点击顶部菜单栏:"公式" → "公式管理器") 二、创建新公式 选择分…...
【2025】基于springboot+vue的汽车销售试驾平台(源码、万字文档、图文修改、调试答疑)
基于 Spring Boot Vue 的汽车销售试驾平台通过整合前后端技术,实现了汽车销售和试驾预约的信息化和智能化。系统为管理员和用户提供了丰富的功能,提升了客户体验和销售效率,增强了数据分析能力,为汽车销售行业的发展提供了新的途…...
Spring Web MVC入门
一、什么是SpringMVC 首先,MVC是一种架构设计模式,也是一种思想,而SpringMVC是对MVC思想的具体实现,除此之外,SpringMVC还是一个Web框架。 总的来说,SpringMVC就是一个实现MVC模式的Web框架。 而MVC可以…...
5G核心网实训室搭建方案:轻量化部署与虚拟化实践
5G核心网实训室 随着5G技术的广泛应用,行业对于5G核心网人才的需求日益增长。高校、科研机构和企业纷纷建立5G实训室,以促进人才培养、技术创新和行业应用研究。IPLOOK凭借其在5G核心网领域的深厚积累,提供了一套高效、灵活的5G实训室搭建方…...
IMX6ULL学习整理篇——Linux驱动开发的基础2 老框架的一次实战:LED驱动
IMX6ULL学习整理篇——Linux驱动开发的基础2 老框架的一次实战:LED驱动 在上一篇博客中,我们实现了从0开始搭建的字符设备驱动框架,但是这个框架还是空中楼阁,没有应用,很难说明我们框架的正确性。这里,…...
网络空间安全(32)Kali MSF基本介绍
前言 Metasploit Framework(简称MSF)是一款功能强大的开源安全漏洞检测工具,被广泛应用于渗透测试中。它内置了数千个已知的软件漏洞,并持续更新以应对新兴的安全威胁。MSF不仅限于漏洞利用,还包括信息收集、漏洞探测和…...
零基础上手Python数据分析 (3):Python核心语法快速入门 (下) - 程序流程控制、函数与模块
写在前面 还记得上周我们学习的 Python 基本数据类型、运算符和变量吗? 掌握了这些基础知识,我们已经能够进行一些简单的数据操作了。 但是,在实际的数据分析工作中,仅仅掌握基本语法是远远不够的。 我们需要让程序能够 根据条件做出判断,重复执行某些操作,组织和复用代…...
C++【类和对象】(超详细!!!)
C【类和对象】 1.运算符重载2.赋值运算符重载3.日期类的实现 1.运算符重载 (1).C规定类类型运算符使用时,必须转换成调用运算符重载。 (2).运算符重载是具有特殊名字的函数,名字等于operator加需要使用的运算符,具有返回类型和参数列表及函数…...
Windows-PyQt5安装+PyCharm配置QtDesigner + QtUIC
个人环境 Windows 11 pycharm 2024.2 Anaconda2024.6python 3.9 1)先使用pip命令在线安装 1)pip install PyQt5 2)pip install PyQt5-tools2)配置环境变量 1:安装成功后可以在python的安装目录Lib\site-packahes目录下看到安装包。比如我的路径是E:\anaconda3…...
qq音乐 webpack 补环境
网址: aHR0cHM6Ly95LnFxLmNvbS9uL3J5cXEvcGxheWVy 1.接口分析 接口:cgi-bin/musics.fcg 参数:sign是加密的 2.代码分析 进入调用栈 先在send位置打上断点,页面刷新 往上一个栈找 可以看到上面就有一个关键词sign是从…...
【蓝桥杯】省赛:神奇闹钟
思路 python做这题很简单,灵活用datetime库即可 code import os import sys# 请在此输入您的代码 import datetimestart datetime.datetime(1970,1,1,0,0,0) for _ in range(int(input())):ls input().split()end datetime.datetime.strptime(ls[0]ls[1],&quo…...
计算机的结构形式
微机的机构形式 台式个人微机 最开始的微机(计算机)都是台式的,到目前为止仍是个人微机的主要形式。台式机按照电脑机箱的放置形式,分为卧式和立式两种。台式机需要放在桌面上或者留有专门放置机箱位置,他的主机、键…...
C语言【内存函数】详解
目录: 1. memcpy使用和模拟实现 2. memmove使用和模拟实现 3. memset函数的使用 4. memcmp函数的使用 以上函数均包含在一个头文件<string.h>里面 一、memcpy的使用和模拟实现。 memcpy函数介绍: 函数原型: void * memcpy ( void…...