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

InfluxDB 2.0 到 3.0 技术架构演进与性能分析

在这里插入图片描述

架构演进

关键技术变化:InfluxDB 3.0 相比 2.0 在架构上进行了重大的技术升级。首先,核心代码由 Go 语言重写为 Rust,以利用 Rust 更高的性能和内存安全特性,从而显著提升数据库的性能、可靠性和安全性。其次,引入列式存储架构和 Apache Arrow 技术栈:InfluxDB 3.0 基于 Apache Arrow 的内存格式和 Apache DataFusion 查询引擎构建,这使其成为一个实时的列式时序数据库,相较于 2.x 基于行式存储和自研引擎的设计,3.0 借助 Arrow/DataFusion 实现了向量化查询执行和更高的并行度。此外,InfluxDB 3.0 将底层存储格式改为 Apache Parquet 列式文件,并采用对象存储(如云存储)来持久化时序数据。这一系列技术变化带来了近乎无限的标签基数(无限卡片inality)支持、更快速的写入和查询,以及通过低成本对象存储降低长期存储成本。

存储引擎的变更:InfluxDB 2.0 沿用了 1.x 时代的 TSM (Time-Structured Merge Tree) 存储引擎,采用 WAL+LSM 机制和 TSI 索引,将数据以时间序列点写入磁盘上的 .tsm 文件。这种架构在高基数场景下存在内存索引膨胀和查询效率下降的问题。InfluxDB 3.0 全面引入新一代存储引擎 IOx(InfluxDB IOx 是 3.0 内核的代号),采用实时列式存储方案:数据先写入内存中的写缓冲(通过 Ingester 组件实时摄取),并周期性地压缩持久化为 Parquet 列存文件到对象存储中。新引擎支持无限序列基数,即无论标签取值有多少种类都不会像旧引擎那样导致性能急剧恶化。同时,由于使用列式压缩存储,数据压缩效率大幅提高,存储成本显著降低。总的来说,存储引擎从面向磁盘的LSM树转变为面向内存/列式格式的混合引擎,实现了高吞吐写入与长期海量数据低成本存储的兼顾。

查询引擎的优化:在查询层面,InfluxDB 2.0 提供了 InfluxQL 和新引入的 Flux 查询语言。Flux 是一个函数式脚本查询引擎,功能强大但相对独立,与 InfluxQL/SQL 语法差异较大,导致用户需要学习新的查询语言。而 InfluxDB 3.0 则转向使用 DataFusion 提供的标准 SQL 查询引擎,同时原生支持 InfluxQL。这意味着 3.0 能够用类 SQL 的查询执行计划来运行查询,利用列式内存格式实现向量化计算和多线程并发,加速聚合和扫描等操作。此外,3.0 通过 Apache Arrow Flight SQL 接口支持标准 SQL 查询,用户可以直接使用 SQL 或 InfluxQL 访问时序数据。新查询引擎还支持更丰富的分析功能和更高的扩展性,例如可以通过 Arrow Flight 与诸如 Python pandas、Polars 等第三方分析工具高效交换数据,方便地进行高级数据分析和可视化。总体来说,3.0 查询引擎利用通用的 SQL 优势和 Arrow 列式计算,加之对旧 InfluxQL 的兼容,实现了查询性能与易用性的双重提升。

其他核心技术改进:InfluxDB 3.0 在架构上引入了分布式组件化设计,提升了伸缩性和可靠性。3.0 的核心由Router(路由节点)Ingester(摄取节点)Querier(查询节点)Catalog(元数据目录)Compactor(压缩进程)等模块组成,各司其职。例如,Router 负责接收和解析写入协议并将数据分发到多个 Ingester,实现高并发写入和数据的内存复制冗余。Ingester 将近期数据存入内存并异步刷入对象存储,Querier 则针对内存数据和历史 Parquet 数据提供实时查询服务;Compactor 在后台合并小的列存文件,提高读效率;Catalog 维护元数据索引,以支持无限标签基数下仍能快速定位数据。 这一改进使得 InfluxDB 3.0 天生支持水平扩展和高可用部署:可以通过增加节点来提高吞吐量或存储容量,数据在分布式节点间复制保证持久性。相比之下,2.x 开源版主要是单节点架构(集群特性仅在闭源企业版提供),扩展能力有限。3.0 还提供了数据持久性改进(写入数据经由多个 Ingester 副本确认,提高可靠性)以及更完善的安全机制,得益于 Rust 实现减少了崩溃和内存泄漏的风险。总体而言,从 2.0 到 3.0,InfluxDB 的架构从单体走向分布式、从行式走向列式、从自研专用走向开放通用,为大规模实时时序数据处理打下了更坚实的技术基础。

性能对比

读写性能:InfluxDB 3.0 在读写性能方面相对于 2.x(以及1.x OSS)有数量级的提升。官方基准测试显示,3.0 在写入吞吐上可以支撑同时写入的客户端数量比开源版 InfluxDB 提高最多 45倍,在达到相同性能指标时所需的硬件资源更少。这意味着在高并发数据写入场景下,3.0 能够处理过去难以承受的负载而不出现性能衰减。查询性能方面的提升同样显著:针对最近数据的查询,InfluxDB 3.0 比开源版快 2.5× 到 45× 不等(取决于具体查询类型和时间范围)。许多常见的聚合、统计计算、阈值过滤以及分组查询在新引擎上都得到数倍于过去的加速。尤其在针对于最新几分钟数据的实时查询上,由于 3.0 将近期数据保存在内存列格式中,查询延迟极低,实现真正的秒级实时分析。此外,3.0 的分布式查询引擎可并行处理查询,提高了在高并发查询场景下的整体吞吐能力,这是 2.0 单节点引擎所无法轻易达到的。

数据压缩与存储效率:InfluxDB 3.0 的列式存储方案极大提升了数据压缩比和存储效率。经对比测试,新版本将相同数据集压缩后的存储占用降低到约为 InfluxDB OSS 的 1/4,即数据压缩效率提高约 4.5倍。这主要归功于 Parquet 列存格式对时间序列数据的高效编码(如按列进行差分压缩和位图编码等)以及针对重复模式的优化。同时,3.0 直接利用对象存储(如 S3 等)来存放历史数据,相比 2.0/1.x 将数据保存在本地 SSD,上述高压缩率结合低廉的对象存储,使长期保留海量数据的成本大幅下降。在不损失查询能力的情况下,用户可以经济地保存全部历史时序数据,而不必像过去为了节省空间而删除或下采样数据。综上,InfluxDB 3.0 提供了更高的单位存储数据量,显著提升了存储效率和成本效益。

资源消耗(CPU、内存):由于采用 Rust 和列式内存格式等优化,InfluxDB 3.0 对硬件资源的利用效率得到加强。在官方对比中,3.0 在使用 更少CPU内核和内存 的情况下仍能显著超越 2.0/1.x 的性能。Rust 实现避免了 Go GC 引起的停顿,降低了 CPU 空转和内存碎片,提高了稳定性。列式处理也意味着在执行聚合等操作时能够充分利用 SIMD 指令和缓存局部性,每单位CPU时间处理更多的数据点。此外,3.0 不再需要为每条时间序列维护大型的内存索引(1.x时代高基数环境下索引内存占用非常大),改由紧凑的元数据Catalog配合列存文件索引,从而极大降低了内存消耗增长率,即使千万级别的序列也能在合理内存下运转,并且,由于采用分布式架构,用户可以垂直扩展或水平扩展来分摊负载,例如将不同 Ingester/Querier 部署在多台机器上,各自利用自身的内存和CPU,从整体上缓解单节点资源瓶颈。总体来说,InfluxDB 3.0 更加“轻量高效”,在相同硬件条件下可处理更多的数据,同时在高负载下维持较低的垃圾回收和缓存开销,这对 CPU 和内存利用率都是重大改进。

并发能力:InfluxDB 2.0 在高并发写入和查询方面存在一定限制,而 3.0 针对并发能力进行了加强。一方面,如前述,3.0 支持同时数十倍的并发写入客户端而性能不降 —通过 Router/Ingester 组成的集群写入架构,多个 Ingester 节点并行接收数据,使写入带宽几乎线性扩展。另一方面,在查询并发上,3.0 的查询调度器和 DataFusion 引擎可以更好地并行执行多个查询,包括将不同查询分发到不同 Querier 节点或在单节点上利用多线程执行,从而支撑更多并发查询用户。相比之下,InfluxDB 2.x 单机在高并发查询时可能出现响应变慢,因为受制于CPU上下文切换和I/O争用。得益于新架构,InfluxDB 3.0 在实际应用中可同时处理大量的数据读写请求,即使在峰值负载下仍保持低延迟和高吞吐。这使其非常适合用在需要实时处理海量数据的场景中,而 2.0 往往需要通过分片集群或其他手段才能勉强应对。

主要特点

功能增强:从 2.0 到 3.0,InfluxDB 在功能特性上有多项显著增强。首先是查询语言的扩展:InfluxDB 3.0 原生支持标准 SQL 查询,这是之前版本不具备的。借助 DataFusion 引擎,用户可以直接对时序数据执行 SQL 查询,充分利用复杂的JOIN、子查询等关系型查询能力;同时 3.0 保留了对 InfluxQL(1.x的类SQL时序查询语言)的支持,使老用户的查询语法得以延续。相较之下,InfluxDB 2.0 引入的 Flux 语言在 3.0 中并未延用,这实际上简化了技术栈——用户不再需要学习新的专有查询语言,转而使用更通用的 SQL 或 InfluxQL。另一个功能增强是数据类型和应用范围的扩展。InfluxDB 3.0 被设计为一个通用的时序数据平台,不仅能存储传统的度量指标(metrics),还可以高效地存储事件(events)、日志(logs)和分布式追踪(traces)等不同类型的时序数据,在单一数据库中统一管理。这种“全观测数据”支持在 2.0 中并不完善(2.x 虽可存储任意数据但性能针对指标优化,对高基数日志类数据支持不佳),而 3.0 列式引擎使得存储高频日志和追踪数据成为可能,从而增强了系统的适用性。最后,3.0 利用 Arrow Flight 等标准接口,提升了系统的开放性和可扩展性**:例如用户可以通过 Arrow Flight SQL 接口将 InfluxDB 与其它分析工具集成,或直接读取 Parquet 文件与数据湖打通。总的来说,InfluxDB 3.0 在功能上更加强大通用,既涵盖了更多的数据类型和查询方式,又为集成扩展提供了标准化途径。

易用性改进:在用户体验和易用性方面,InfluxDB 3.0 相较前代也有所改进。首先,由于引入SQL和保留InfluxQL,大多数运维和开发人员可以使用熟悉的查询语言与数据库交互,无需像2.0时代那样学习全新的Flux脚本,大大降低了上手难度。其次,3.0 强调控制面与数据面的分离:数据库本身专注于存储和查询核心功能,而诸如用户管理、数据库管理等运维操作通过独立的管理界面或命令行工具完成。例如,在 InfluxDB Cloud 3.0 中,创建组织、设置保留策略等由云UI或 influxctl 工具执行,而应用程序开发则主要使用简化的客户端库进行读写。这种设计使得核心引擎更简洁,客户端库也变得“轻量”且易于使用(仅提供写入和查询两个主要功能)。对于使用者来说,这减少了API复杂度,典型用例只需关心写数据和查数据两件事。第三,InfluxDB 3.0 对兼容旧版做出了努力,从而提升用户迁移和使用的便利性。它提供了1.x兼容模式的HTTP API,以及老的 line protocol 写入格式依然受支持。这意味着现有的收集代理(如 Telegraf)和监控工具(如 Grafana 使用 InfluxQL 查询)可以直接对接3.0,大部分常用查询和写入代码无需修改即可工作。兼容性细节上虽有少许差异(例如 1.x 的持续查询Continuous Query和SELECT INTO语法在3.0中不再支持),但总体保持了一致的使用体验,使老用户平滑过渡。最后,从管理角度,3.0 内置了更完善的集群及高可用部署支持(如InfluxDB Clustered版本),用户可以更轻松地在本地或私有云搭建集群获得与云服务相当的能力。综合来看,InfluxDB 3.0 在易用性上的改进体现在更熟悉的语言、更精简的客户端、更良好的后向兼容和更方便的部署管理,降低了学习成本和运维成本。

兼容性和迁移:尽管架构大改,InfluxDB 3.0 尽可能提供向后兼容选项,但仍存在一些迁移上的挑战。查询兼容性方面,如前所述,3.0 支持 InfluxQL 查询语言以及与1.x类似的查询API,这保证了1.x用户的大部分查询语句可直接在3.0上执行。InfluxDB 2.0 中如果启用了“1.x兼容模式”(即继续使用 InfluxQL 而非 Flux),其查询也能无缝迁移到3.0。但是,Flux 查询脚本在3.0中无法直接运行,需要改写为等价的 InfluxQL/SQL 查询;对于使用Flux构建大量业务逻辑的2.x用户来说,这是迁移中的主要工作量之一。写入兼容性上,3.0 延续了行协议(Line Protocol)写入格式和 v1/v2 版本的写入API,因此数据采集端无需改动即可向3.0写数据。不过,由于存储引擎完全不同,数据迁移需要通过导出再导入的方式:无法直接就地升级2.x的数据文件为3.0格式。InfluxData 官方表示将提供从 1.x 和 2.x 迁移到 3.0 的数据迁移工具,以尽量简化搬迁过程。实践中,很多用户选择先在2.x中使用1.x兼容模式,这样升级到3.0时应用改动最小。需要注意的是,一些 InfluxDB 2.0 特有的特性在3.0中可能没有直接对应,例如 2.0 的任务 (Task) 和检查/告警机制在3.0开源中尚未提供等。这些可能需要依赖第三方方案或等待未来版本实现。整体而言,InfluxDB 3.0 在接口层面尽量保持与旧版一致以减轻迁移阵痛,但由于底层改动巨大,完全的向后兼容不可能,实现迁移仍需一定规划和测试。好在官方和社区已有不少经验指导,例如推荐从1.x直接迁移到3.0(绕过2.x的Flux)会更顺畅,因此在升级时应仔细参考官方文档与工具,评估查询和数据迁移的工作量,逐步平滑过渡到新平台。

生态系统支持:InfluxDB 一直拥有完善的生态系统,而3.0在延续这一点的同时,通过开放标准的引入进一步扩大了生态支持范围。首先,常用的数据采集和可视化工具基本都支持或将支持与3.0的集成。例如,Telegraf(InfluxData 提供的插件式收集代理)继续作为主要的数据写入工具,利用 line protocol 向 InfluxDB 3.0 写入各类指标,无需更改;Grafana 等监控可视化软件亦可使用 InfluxQL 或 Flux 数据源插件对接 InfluxDB 3.0,并由于3.0对InfluxQL的良好兼容,已有的仪表盘查询依然适用。对于希望使用 SQL 查询的用户,也可以通过 Grafana 的 PostgreSQL/Flux 等插件灵活配置(未来可能会有直接支持 Flight SQL 的插件)。其次,InfluxDB 3.0 提供了多语言的客户端库。除了继续维护对 v1 (InfluxQL) 和 v2 (Flux) 客户端的兼容,官方推出了精简的 v3 轻量级客户端库(目前涵盖 Python、Go、Java、JavaScript、C# 等语言),这些库内部使用 Arrow Flight 通道,实现高效的 gRPC 查询和HTTP写入。开发者可以选择适合自己查询风格的客户端:偏好 SQL 可选 v3 库,老项目沿用 InfluxQL 则可继续用 v1 库。再次,由于 3.0 架构完全建立在 开源列式格式 之上,它与大数据生态的融合度更高。例如,其 Arrow Flight 接口使得第三方分析工具(如Python的 Pandas/PyArrow、Rust/JS 的 Polars 等)能够直接以 DataFrame 形式获取数据用于机器学习或自定义分析。此外,对象存储中的 Parquet 数据也可被其他支持 Parquet 的引擎(如 Apache Spark、Dremio 等)读取,实现数据湖场景下的共享。最后,InfluxDB 3.0 继续拥有广泛的社区和第三方集成支持,如 Kubernetes Operator 用于自动化部署、各类监控框架对其集成适配等。其作为时序数据库的行业定位未变,像 Kapacitor(流式处理)、Chronograf(可视化)这类周边工具依然可用于3.0(部分可能需升级兼容)。总的来说,3.0 在保持原有生态的同时,通过标准化接口和格式,打开了与更广泛数据工具链融合的大门,使其在不同使用场景下都能良好地融入现有技术栈。

应用场景

物联网(IoT)数据存储:InfluxDB 3.0 的特性非常契合物联网场景下海量传感器数据的存储和查询需求。物联网环境通常有千万级别的设备和传感器,每个传感器产生自己的时间序列(标签基数极高),数据点频繁写入且需要长期保存。InfluxDB 2.x 在这种场景下容易遇到索引内存不足或写入瓶颈;而 3.0 提供的无限序列基数能力允许无数设备各自写入数据而不会造成性能骤降。同时,3.0 的高吞吐写入确保了每秒成千上万条来自传感器的数据点能可靠摄取,列式压缩和对象存储又使得这些数据可以经济地保留多年历史。从查询上看,运维人员可以利用 InfluxDB 3.0 对任意设备的指标进行实时监控和历史追溯。例如,在工业物联网中,可以对某工厂所有机器的温度传感器数据执行实时聚合分析,以秒级响应发现异常;也可以在数据库中保留多年数据以供日后故障调查和趋势分析,而存储成本依然可控。InfluxDB 3.0 对 IoT 的支持还体现在易于与边缘和云架构结合——通过 InfluxDB Edge(3.0 开源版)在边缘网关收集数据,汇聚到云端 InfluxDB 集群进行集中存储分析。综合而言,3.0 针对物联网的大规模、高基数、长保留期的数据场景提供了前所未有的性能和可扩展性,使其成为物联网时序数据平台的理想选择。

监控与观测数据处理:在IT基础设施和应用监控领域,InfluxDB 历来是常用方案,而 3.0 的到来进一步巩固了其在可观测性(Observability)场景的地位。现代监控不仅需要处理指标(metrics),还包括日志(logs)和追踪(traces)数据,以形成对系统的全方位观测。InfluxDB 3.0 首次将指标、事件、追踪数据统一存储在单一后端,从而支持用户在同一个系统中关联分析多种监控数据。例如,在一个微服务架构中,运维人员可以将各服务的性能指标、日志事件以及分布式调用跟踪数据都写入 InfluxDB 3.0,然后使用 SQL 查询跨越这些数据源进行综合分析(比如在一次请求链路中先检查trace延迟,再关联相应服务的指标和日志)。这种一体化的方案简化了架构,无需再维护独立的时序库和日志系统并尝试融合它们的数据。更重要的是,InfluxDB 3.0 针对监控数据的高频写入和近实时查询进行了优化:无论是服务器指标每秒上报,还是应用日志高速涌入,3.0 都能流畅接收并支持秒级查询最新数据,适用于实时仪表盘和告警。此外,由于 3.0 提供高并发、高吞吐能力,大型监控部署(例如监控数千台主机、容器的Prometheus替代)可以利用其存储和查询更长时间范围、更精细粒度的数据,而不会因为数据量过大而性能崩溃。再者,InfluxDB 生态中的告警和可视化工具也可以直接结合3.0 使用,实现从数据采集、存储到分析告警的一站式解决方案。总而言之,在系统监控和运维观测方面,InfluxDB 3.0 提供了强大的数据处理能力和整合不同观测数据的能力,使得运维团队能够更容易地建立端到端的可观测性平台,及时发现和诊断系统问题。

其他典型应用场景:除了IoT和基础设施监控,InfluxDB 3.0 还适用于其他各种需要处理大规模时序数据的场景:

  • 实时分析与流式数据处理:对于金融交易、用户行为事件流、点击流分析等需要对数据进行实时计算的场景,3.0 的高性能查询引擎可以在数据到达的同时执行复杂的统计分析。例如在股票交易分析中,数百万条行情数据点可以被秒级聚合计算指标,用于驱动实时决策系统。3.0 对海量近期数据的查询优化使其能够胜任此类实时分析需求。

  • 工业控制与大数据存储:工业控制系统中大量传感器和日志产生的大数据需要可靠存储和长期趋势分析。InfluxDB 3.0 的列式引擎和压缩存储非常适合工业大数据的归档与挖掘。用户可以将多年累积的工业过程数据保存在3.0中,并定期运行复杂查询或机器学习算法来发现潜在模式,而不必将数据迁移到另一个仓库进行分析——3.0 本身即可作为分析型时序数据湖使用。

  • 高卡片型数据管理:某些应用需要跟踪大量独立实体的时间序列数据,例如智能城市中成千上万个交通传感器,或物流追踪中每件商品的状态变化。这类 高cardinality(高基数)数据过去是 InfluxDB 的弱项,而 3.0 针对这类场景进行了专门优化,无论实体ID数量多大,都能以稳定性能记录和查询其时序数据。因此在智慧城市、车联网、供应链跟踪等领域,InfluxDB 3.0 成为可选的核心时序数据库。

  • 混合负载场景:InfluxDB 3.0 能同时处理事务性写入和分析性查询,适合一些需要边写入边分析的场景。例如在线上游戏运营中,一方面持续记录玩家行为事件(在线数、操作日志等),另一方面定时统计在线人数、行为频次用于运营决策。3.0 可以在不停机写入的同时高效执行统计查询,保障业务实时洞察力。

综上,InfluxDB 3.0 作为新一代时序数据库,通过架构演进带来的高性能和新特性,扩大了适用面。从物联网设备数据、IT基础设施监控,到金融实时分析、工业大数据管理等,只要涉及时序数据的场景,InfluxDB 3.0 都能提供比过去更出色的支持。其统一数据平台的理念也使开发者能够在一个系统中解决多种类型时序数据的问题,充分发挥数据的价值。凭借这些优势,InfluxDB 3.0 正成为各行业处理海量时序数据的有力工具,为实时数据驱动的应用场景提供强大的后端支撑。

相关文章:

InfluxDB 2.0 到 3.0 技术架构演进与性能分析

架构演进 关键技术变化:InfluxDB 3.0 相比 2.0 在架构上进行了重大的技术升级。首先,核心代码由 Go 语言重写为 Rust,以利用 Rust 更高的性能和内存安全特性,从而显著提升数据库的性能、可靠性和安全性。其次,引入列式…...

介绍一下Mybatis的底层原理(包括一二级缓存)

表面上我们的就是Sql语句和我们的java对象进行映射,然后Mapper代理然后调用方法来操作数据库 底层的话我们就涉及到Sqlsession和Configuration 首先说一下SqlSession, 它可以被视为与数据库交互的一个会话,用于执行 SQL 语句(Ex…...

docker gitlab arm64 版本安装部署

前言: 使用RK3588 部署gitlab 平台作为个人或小型团队办公代码版本使用 1. docker 安装 sudo apt install docker* 2. 获取arm版本的gitlab GitHub - zengxs/gitlab-arm64: GitLab docker image (CE & EE) for arm64 git clone https://github.com/zengxs…...

7、怎么定义一个简单的自动化测试框架?

定义一个简单的自动化测试框架可以从需求理解、框架设计、核心模块实现、测试用例编写和集成执行等方面入手,以下为你详细介绍: 1. 明确框架需求和范围 确定测试类型:明确框架要支持的测试类型,如单元测试、接口测试、UI 测试等…...

linux组管理

创建组:groupadd (创建组命令的详细使用:如何创建组-CSDN博客) 修改组:groupmod (修改组命令的详细使用:如何修改组-CSDN博客) 组配置文件: /etc/group...

【MySQL】常用语句

目录 1. 数据库操作2. 表操作3. 数据操作(CRUD)4. 高级查询5. 索引管理6. 用户与权限7. 数据导入导出8. 事务控制9. 其他实用语句注意事项 如果这篇文章对你有所帮助,渴望获得你的一个点赞! 1. 数据库操作 创建数据库 CREATE DATA…...

二维数组 C++ 蓝桥杯

1.稀疏矩阵 #include<iostream> using namespace std;const int N 1e4 10; int a[N][N];int main() {int n, m; cin >> n >> m;for (int i 1; i < n; i) {for (int j 1; j < m; j) {cin >> a[i][j];}}for (int j m; j > 1; j--) {for (i…...

SAP HCM 回溯分析

最近总有人问回溯问题&#xff0c;今天把12年总结的笔记在这共享下&#xff1a; 12年开这个图的时候总是不明白是什么原理&#xff0c;教程看N次&#xff0c;网上资料找一大堆&#xff0c;就是不明白原理&#xff0c;后来为搞明白逻辑&#xff0c;按照教材的数据一样做&#xf…...

MySQl的日期时间加

MySQL日期相关_mysql 日期加减-CSDN博客MySQL日期相关_mysql 日期加减-CSDN博客 raise notice 查询目标 site:% model:% date:% target:%,t_shipment_date.site,t_shipment_date.model,t_shipment_date.plant_date,v_date_shipment_qty_target;...

前部分知识复习03

一、光照模型 经验型&#xff1a; 1.Lambert光照模型 2.Phong光照模型 3.Blinn-Phong光照模型 物理型&#xff1a; 4.PBR光照模型 二、渲染路径 渲染路径&#xff1a;是为进行光照计算而设置的渲染方式 前向渲染路径顶点照明渲染路径延迟渲染路径 顶点照明渲染路径中的灯光…...

Windows图形界面(GUI)-QT-C/C++ - QT MDI Area

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 多文档编辑器 2. 多窗口应用程序 3. 多视图应用程序 三、常见样式 1. 子窗口管理 2. 布局管理 四、属性设置 1. 添加子窗口 2. 移除子窗口 3. 设置…...

基于微信小程序的私家车位共享系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

用deepseek制作我的第一个长视频---使用AI解决尝试新领域没有经验拖延的问题!

&#xff08;由于技术原因&#xff0c;联网搜索暂不可用&#xff09; 制作一个高质量的Vlog或生活记录长视频&#xff0c;即使零基础也能通过系统规划实现&#xff01;以下是为你定制的「从零到成品」全流程指南&#xff0c;结合叙事逻辑、剪辑技巧和效率工具&#xff0c;帮你…...

零基础学习电磁兼容(EMC)06--时域和频域

大部分工程师很熟悉示波器,并使用它读取信号的频率和电压值,然而,在EMC领域,绝大多数的数据都是从频谱分析仪、测量接收机等基于频率测量的设备中读取的,因此,了解这些频率参数的含义以及与时域信号的关系,是非常重要的。 时域和频域的本质:傅里叶变换及其逆过程 如下…...

解决在使用自己的数据集在 Ultralytics 上运行 RT - DETR 模型时显存爆满的问题

在使用自己的数据集在 Ultralytics 上运行 RT - DETR 模型时&#xff0c;显存爆满是一个常见问题。以下是一系列可以采取的步骤和方法&#xff0c;帮助你解决这个问题&#xff0c;同时使用 Ultralytics 的官方源码。 1. 环境准备 确保你已经安装了 Ultralytics 库&#xff0c…...

Android学习19 -- 手搓App

1 前言 之前工作中&#xff0c;很多时候要搞一个简单的app去验证底层功能&#xff0c;Android studio又过于重型&#xff0c;之前用gradle&#xff0c;被版本匹配和下载外网包折腾的堪称噩梦。所以搞app都只有找应用的同事帮忙。一直想知道一些简单的app怎么能手搓一下&#x…...

鼠标拖尾特效

文章目录 鼠标拖尾特效一、引言二、实现原理1、监听鼠标移动事件2、生成拖尾元素3、控制元素生命周期 三、代码实现四、使用示例五、总结 鼠标拖尾特效 一、引言 鼠标拖尾特效是一种非常酷炫的前端交互效果&#xff0c;能够为网页增添独特的视觉体验。它通常通过JavaScript和C…...

【CSS】什么是响应式设计?响应式设计的基本原理,怎么做

在当今多设备、多屏幕尺寸的时代&#xff0c;网页设计面临着前所未有的挑战。传统的固定布局已无法满足用户在不同设备上浏览网页的需求&#xff0c;响应式设计&#xff08;Responsive Web Design&#xff09;应运而生&#xff0c;成为网页设计的趋势和标准。本文将深入探讨响应…...

单机性能调优中的程序优化

目录 一、系统框架的选择 二、程序优化 表单压缩 局部刷新 仅取所需 逻辑清晰 谨慎继承 程序算法优化 批处理 延迟加载 防止内存泄漏 减少大对象引用 防止争用死锁 存储过程 内存分配 并行 异步 缓存 单机优化顾名思义就是我们要在单机上对系统的性能进行调优…...

2.4学习总结

洛谷1305代码 #include<stdio.h> #include<stdlib.h> struct treenode {char val;struct treenode* left;struct treenode* right; }; struct treenode* createnode(char val) {struct treenode* node (struct treenode*)malloc(sizeof(struct treenode));node-&…...

小程序-视图与逻辑

前言 1. 声明式导航 open-type"switchTab"如果没有写这个&#xff0c;因为是tabBar所以写这个&#xff0c;就无法跳转。路径开始也必须为斜线 open-type"navigate"这个可以不写 现在开始实现后退的效果 现在我们就在list页面里面实现后退 2.编程式导航…...

突破封闭集限制:OvSGTR引领开放词汇场景图生成新纪元

场景图生成&#xff08;Scene Graph Generation, SGG&#xff09;&#xff0c;这个领域&#xff0c;旨在通过解析图像来构建描述性的结构化图表&#xff0c;不仅能够识别图片中的物体&#xff0c;还能捕捉它们之间的相互关系。 这种能力对于诸如图像字幕、视觉问答以及图像生成…...

C语言基础之【程序流程结构】

C语言基础之【程序流程结构】 概述选择结构if语句if…else语句小练习&#xff1a;“三只小猪体重比较” if…else if…else语句小练习&#xff1a;“三只小猪体重比较” 三目运算符小练习&#xff1a;“三只小猪体重比较” switch语句小练习&#xff1a;**“成绩等级判断器”**…...

代码随想录35 动态规划

目录 leetcode 746.使用最小花费爬楼梯 leetcode 62.不同路径 思路&#xff1a; leetcode 63.不同路径|| leetcode 746.使用最小花费爬楼梯 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选…...

【游戏设计原理】98 - 时间膨胀

从上文中&#xff0c;我们可以得到以下几个启示&#xff1a; 游戏设计的核心目标是让玩家感到“时间飞逝” 游戏的成功与否&#xff0c;往往取决于玩家的沉浸感。如果玩家能够完全投入游戏并感受到时间飞逝&#xff0c;说明游戏设计在玩法、挑战、叙事等方面达到了吸引人的平衡…...

51单片机 06 定时器

51 单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成。 作用&#xff1a;1、用于计时&#xff1b;2、替代长时间的Delay&#xff0c;提高CPU 运行效率和处理速度。 定时器个数&#xff1a;3个&#xff08;T0、T1、T2&#xff09;&#xf…...

4 前端前置技术(中):node.js环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 前言...

【Leetcode刷题记录】1456. 定长子串中元音的最大数目---定长滑动窗口即解题思路总结

1456. 定长子串中元音的最大数目 给你字符串 s 和整数 k 。请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。 英文中的 元音字母 为&#xff08;a, e, i, o, u&#xff09;。 这道题的暴力求解的思路是通过遍历字符串 s 的每一个长度为 k 的子串&#xf…...

C++效率掌握之STL库:string函数全解

文章目录 1.为什么要学习string&#xff1f;什么是string&#xff1f;2.string类对象的常见构造3.string类对象的容量操作4.string类对象的迭代器5.string类对象的元素访问6.string类对象的元素修改7.string类对象的查找、提取、对比8.string类的非成员函数及npos希望读者们多多…...

Linux命令运行原理及权限管理

目录 1.引言 2.shell命令以及运行原理 3.Linux权限 3.1Linux下的用户类型 3.2Linux权限管理 3.2.1文件访问者的分类&#xff08;人&#xff09; 3.2.2文件类型和访问权限&#xff08;事物属性&#xff09; 3.2.3文件权限值的表示方法 3.2.4文件访问权限的相关设置方法…...

linux内核源代码中__init的作用?

在 Linux 内核源代码中&#xff0c;__init是一个特殊的宏&#xff0c;用于标记在内核初始化阶段使用的变量或函数。这个宏的作用是告诉内核编译器和链接器&#xff0c;被标记的变量或函数只在内核的初始化阶段使用&#xff0c;在系统启动完成后就不再需要了。因此&#xff0c;这…...

系统学习算法:专题九 穷举vs暴搜vs深搜vs回溯vs剪枝

其中标题的深搜&#xff0c;回溯&#xff0c;剪枝我们之前专题都已经有过学习和了解&#xff0c;这里多了两个穷举和暴搜&#xff0c;其实意思都差不多&#xff0c;穷举就是穷尽力气将所有情况都列举出来&#xff0c;暴搜就是暴力地去一个一个情况搜索&#xff0c;所以就是全部…...

《深度洞察ICA:人工智能信号处理降维的独特利器》

在人工智能技术飞速发展的今天&#xff0c;信号处理作为关键环节&#xff0c;面临着数据维度不断攀升的挑战。高维信号数据虽蕴含丰富信息&#xff0c;但也给处理和分析带来诸多难题&#xff0c;如计算资源消耗大、分析复杂度高、模型易过拟合等。独立成分分析&#xff08;ICA&…...

FASTA 和 FASTQ 格式详解|SRA转fastq

FASTA 格式 FASTA 格式是一种用于存储序列信息的简单格式&#xff0c;广泛应用于核酸&#xff08;DNA/RNA&#xff09;和蛋白质序列的存储。它主要由两个部分组成&#xff1a; 描述行&#xff1a;以“>”符号开头&#xff0c;包含序列的描述信息&#xff0c;如名称、来源等…...

Docker使用指南(一)——镜像相关操作详解(实战案例教学,适合小白跟学)

目录 1.镜像名的组成 2.镜像操作相关命令 镜像常用命令总结&#xff1a; 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…...

为何在Kubernetes容器中以root身份运行存在风险?

作者&#xff1a;马辛瓦西奥内克&#xff08;Marcin Wasiucionek&#xff09; 引言 在Kubernetes安全领域&#xff0c;一个常见的建议是让容器以非root用户身份运行。但是&#xff0c;在容器中以root身份运行&#xff0c;实际会带来哪些安全隐患呢&#xff1f;在Docker镜像和…...

【人工智能】多模态学习在Python中的应用:结合图像与文本数据的深度探索

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 多模态学习是人工智能领域的一个重要研究方向,旨在通过结合多种类型的数据(如图像、文本、音频等)来提高模型的性能。本文将深入探讨多模…...

以AI为翼:技术能力进阶的新路径

一、引言 1.1 研究背景与意义 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已成为推动各领域发展的核心驱动力。从最初简单的算法模型到如今复杂的深度学习架构&#xff0c;AI 技术取得了令人瞩目的进步。自 20 世纪 50 年代人工智能概念提出以来&#x…...

使用 HTTP::Server::Simple 实现轻量级 HTTP 服务器

在Perl中&#xff0c;HTTP::Server::Simple 模块提供了一种轻量级的方式来实现HTTP服务器。该模块简单易用&#xff0c;适合快速开发和测试HTTP服务。本文将详细介绍如何使用 HTTP::Server::Simple 模块创建和配置一个轻量级HTTP服务器。 安装 HTTP::Server::Simple 首先&…...

Jenkins 触发构建的几种常见方式

为了实现自动化构建,Jenkins 提供了多种触发构建的方式。这些触发方式可以根据开发团队的需求来选择,使得构建过程更加灵活和高效。 1. 手动触发构建 手动触发构建是最简单的一种方式,通常用于开发人员或管理员手动启动构建任务。 步骤: 登录 Jenkins 后,进入某个项目(…...

算法基础--二分查找

模板 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_map> /** 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;其时间复杂度为 o(logn) */ using namespace std;const int N …...

Vue 3 30天精进之旅:Day 14 - 项目实践

在前面的学习中&#xff0c;我们已经掌握了Vue 3的基础知识&#xff0c;包括其核心概念、Vue Router、Vuex&#xff0c;以及异步操作等。今天是一个重要的里程碑&#xff1a;我们将把这些知识整合到一个实际的项目中。通过项目实践&#xff0c;你将能够深入理解所学知识&#x…...

【Java基础-42.4】Java中的包装类对象默认值:深入解析与注意事项

在Java编程中&#xff0c;包装类&#xff08;Wrapper Classes&#xff09;是将基本数据类型&#xff08;如int、char等&#xff09;封装为对象的类。它们提供了更多的功能和灵活性&#xff0c;例如允许基本数据类型参与面向对象的操作&#xff08;如存储在集合中&#xff09;。…...

Linux进程概念

目录 一.进程 二.进程状态 三.环境变量 四.程序地址空间 五.Linux2.6内核进程调度队列 一.进程 基本概念 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等内核观点&#xff1a;担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的…...

Linux的简单使用和部署4asszaaa0

一.部署 1 环境搭建方式主要有四种: 1. 直接安装在物理机上.但是Linux桌面使用起来非常不友好.所以不建议.[不推荐]. 2. 使用虚拟机软件,将Linux搭建在虚拟机上.但是由于当前的虚拟机软件(如VMWare之类的)存在⼀些bug,会导致环境上出现各种莫名其妙的问题比较折腾.[非常不推荐…...

人工智能专业术语详解(A)

人工智能不仅是指寻求如何替代人类的机器人或人类寻求自我挑战的游戏&#xff0c;更是指运用复杂的程序化数学&#xff0c;其结果与高质量的训练数据相结合&#xff0c;推动了我们在日常生活中所看到的技术进步。从无人驾驶汽车到寻找癌症的治疗方法&#xff0c;人工智能正在逐…...

深度学习 Pytorch 基础网络手动搭建与快速实现

为了方便后续练习的展开&#xff0c;我们尝试自己创建一个数据生成器&#xff0c;用于自主生成一些符合某些条件、具备某些特性的数据集。 导入相关的包 # 随机模块 import random# 绘图模块 import matplotlib as mpl import matplotlib.pyplot as plt# 导入numpy import nu…...

deepseek的对话风格

概述 deepseek的对话风格&#xff0c;比一般的模型的回答多了思考过程&#xff0c;这是它比较可爱的地方&#xff0c;模型的回答有了思考过程&#xff0c;对用户而言大模型的回答不完全是一个黑盒。 deepseek的对话风格 train_prompt_style """Below is an…...

Spring Security(maven项目) 3.0.2.9版本 --- 改

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…...

OpenAI新商标申请曝光:AI硬件、机器人、量子计算全线布局?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...