TDengine 与其他时序数据库对比:InfluxDB/TimescaleDB 选型指南(一)
引言
在当今数字化时代,物联网(IoT)、工业互联网等领域蓬勃发展,产生了海量的时序数据。这些数据记录了设备状态、传感器读数、业务指标等随时间变化的信息,对于企业的运营监控、数据分析和决策制定起着关键作用。为了高效地存储和处理这些时序数据,时序数据库应运而生。TDengine、InfluxDB 和 TimescaleDB 作为时序数据库领域的佼佼者,各自具有独特的优势和特点,在不同的场景中得到了广泛应用。本文将对这三款数据库进行详细的对比分析,为开发者和企业在数据库选型时提供参考依据。
一、三款数据库简介
(一)TDengine
TDengine 是一款专为物联网(IoT)、车联网、工业互联网、IT 运维等场景设计和优化的开源、高性能、分布式、云原生时序数据库 。它的核心代码完全开源,拥有活跃的社区支持,为开发者提供了丰富的学习资源和技术交流平台。TDengine 不仅提供了传统数据库的基本功能,还集成了消息队列、缓存、流式计算等模块,极大地简化了数据处理平台的架构,降低了开发和运维成本。
(二)InfluxDB
InfluxDB 是一个用 Go 语言编写的开源时序数据库,由 InfluxData 公司开发和维护。它专为处理高写入频率和大规模时间序列数据而设计,在监控和运维领域应用广泛,常用于存储和分析服务器、网络设备、传感器和应用程序的指标数据。InfluxDB 具有高性能、可扩展性强、易用性好等特点,并提供了丰富的数据查询和处理功能,其自定义的 TSM(Time-Structured Merge Tree)存储引擎,能有效提升数据写入和查询的效率。
(三)TimescaleDB
TimescaleDB 是一个基于 PostgreSQL 的开源时序数据库,以插件化的形式部署,并随着 PostgreSQL 的版本升级而升级。它支持标准的 SQL 查询语言,这使得熟悉 SQL 的开发者可以轻松上手。同时,TimescaleDB 利用 PostgreSQL 的丰富功能,如事务处理、ACID(原子性、一致性、隔离性和持久性)支持等,还支持复杂的数据处理功能,包括数据聚合、窗口函数等,非常适合需要进行复杂数据分析和处理的场景。
二、性能对比
为了更直观地了解 TDengine、InfluxDB 和 TimescaleDB 的性能差异,我们参考 TSBS(Time Series Benchmark Suite)基准测试的数据 ,从写入性能、查询性能和存储性能三个方面进行对比分析。TSBS 是一个专门用于时序数据库性能测试的工具,能够模拟多种真实场景下的时序数据读写操作,其测试结果具有较高的可信度和参考价值。在测试中,我们保证了硬件环境、数据规模和测试脚本的一致性,以确保测试结果的公平性和准确性。
(一)写入性能
在写入性能方面,TDengine 展现出了明显的优势。根据 TSBS 基准测试数据,在不同的场景下,TDengine 的写入速度均远超 InfluxDB 和 TimescaleDB。在场景二的测试中,TDengine 的写入性能最大达到了 TimescaleDB 的 6.7 倍,InfluxDB 的 10.6 倍 。这得益于 TDengine 独特的数据模型和存储引擎设计,它能够充分利用时序数据的特点,将数据按时间顺序进行高效的组织和存储,减少了写入过程中的磁盘 I/O 操作和数据碎片化,从而大大提高了写入性能。
同时,TDengine 在写入过程中消耗的计算(CPU)资源和磁盘 I/O 开销也相对较低。以场景四为例,在写入 1,000,000 devices × 10 metrics 的数据时,TDengine 对服务器的 CPU 需求最小,峰值仅使用了 17% 左右的服务器 CPU 资源,而 InfluxDB 和 TimescaleDB 在写入过程中对 CPU 资源的占用则明显更高 。在磁盘 I/O 方面,TDengine 在写入过程中对于磁盘写入能力的占用远小于 InfluxDB 和 TimescaleDB,只占用了部分磁盘写入能力(125MiB/Sec. 3000IOPS) 。这使得 TDengine 在处理大规模时序数据写入时,能够保持较低的系统负载,确保系统的稳定性和高效性。
(二)查询性能
在查询性能方面,TDengine 同样表现出色。在场景一和场景二的不同类型查询中,TDengine 的查询平均响应时间均优于 InfluxDB 和 TimescaleDB。尤其是在复杂查询(Complex queries)类型中,TDengine 的优势更加明显,其查询性能最高达到了 InfluxDB 的 37 倍、TimescaleDB 的 28.6 倍 。
这是因为 TDengine 针对时序数据的查询特点进行了深度优化,采用了一系列高效的查询算法和索引机制。TDengine 支持 SQL 查询语言,并对其进行了扩展,增加了许多针对时序数据的函数和操作符,使得用户可以方便地进行各种复杂的时序数据分析。同时,TDengine 的存储引擎能够快速定位和读取所需的数据,减少了查询过程中的数据扫描和过滤时间,从而提高了查询效率。例如,在进行时间窗口聚合查询时,TDengine 能够快速地对指定时间范围内的数据进行聚合计算,而 InfluxDB 和 TimescaleDB 在处理大规模数据集时,查询性能则会明显下降。
(三)存储性能
在存储性能方面,TDengine 采用了领先的压缩算法,能够将数据压缩至原始大小的 1/10,大大降低了存储成本 。相比之下,InfluxDB 和 TimescaleDB 在存储相同规模的数据时,占用的磁盘空间明显大于 TDengine。根据 TSBS 基准测试报告,在部分场景中,TimescaleDB 落盘数据规模最高达到了 TDengine 的 26.9 倍,InfluxDB 磁盘占用最高是 TDengine 的 4.5 倍 。
随着数据集规模的增长,TDengine 在数据存储方面的优势愈加明显。这是因为 TDengine 的压缩算法能够更好地适应时序数据的特点,对数据进行有效的压缩。同时,TDengine 还提供了数据分级存储、S3 存储等功能,能够将不同时间段的数据存储在挂载的不同介质上的目录里,实现不同 “热度” 的数据存储在不同的存储介质上,进一步降低了存储成本,提高了存储效率。
三、功能特性对比
(一)数据模型
TDengine 采用了独特的超级表(Super Table)和子表(Sub Table)数据模型 。超级表作为一种模板,定义了一组具有相同数据结构的子表的公共属性,如列(字段)和标签(Tags)。子表则是从超级表派生而来,继承了超级表的列结构,并拥有自己的标签值,用于实际存储数据。例如,在一个物联网场景中,可以创建一个超级表 “devices”,包含 “ts”(时间戳)、“temperature”(温度)、“humidity”(湿度)等列,以及 “device_id”(设备 ID)、“location”(位置)等标签。然后,为每个具体的设备创建一个子表,如 “device_001”,通过指定不同的标签值来区分不同的设备。这种数据模型能够有效地组织和管理大量具有相似结构的时序数据,提高数据查询和分析的效率。
InfluxDB 的数据模型基于标签(Tags)和字段(Fields)。标签用于索引和过滤数据,相当于传统数据库中的索引列,它可以帮助用户快速定位和查询特定的数据。字段则用于存储实际的数值数据,是没有索引的列。例如,在存储服务器监控数据时,可以将 “server_name”(服务器名称)、“region”(区域)等作为标签,将 “cpu_usage”(CPU 使用率)、“memory_usage”(内存使用率)等作为字段。所有的数据都会根据时间戳进行排序,这种数据模型简单灵活,适用于各种时序数据的存储和查询场景。
TimescaleDB 基于 PostgreSQL 的表结构,通过将普通表转换为超表(Hypertable)来处理时序数据 。超表会自动按时间和空间进行分片(chunk),空间维度指属性字段,如传感器 ID、用户 ID 等。例如,创建一个用于存储传感器数据的超表 “sensor_data”,包含 “time”(时间)、“sensor_id”(传感器 ID)、“value”(数据值)等列,系统会根据时间和传感器 ID 对数据进行自动分片存储。这种数据模型充分利用了 PostgreSQL 的特性,支持复杂的 SQL 查询和事务处理,适合需要进行复杂数据分析和处理的场景。
(二)SQL 支持
TDengine 支持标准的 SQL 查询语言,并在其基础上进行了扩展,增加了许多针对时序数据的函数和操作符 。用户可以使用熟悉的 SQL 语法进行数据的插入、查询、更新和删除操作,同时还能利用 TDengine 提供的扩展功能,如时间窗口函数、数据聚合函数等,方便地进行时序数据分析。例如,使用 “SELECT AVG (temperature) FROM devices WHERE location = 'Beijing' GROUP BY time (1h)” 语句,可以查询出位于北京的设备每小时的平均温度。这种对标准 SQL 的支持,使得熟悉 SQL 的开发者可以快速上手 TDengine,降低了学习成本。
InfluxDB 在 v1 版本中使用类似于 SQL 的查询语言 InfluxQL,用户可以使用它进行数据的查询和分析 。InfluxQL 支持多种查询操作,包括选择、过滤、排序、分组、聚合等,能够满足基本的时序数据查询需求。然而,从 v2 版本开始,InfluxDB 引入了新的查询语言 Flux 。Flux 是一种功能更强大、更灵活的查询语言,支持更复杂的查询操作,如跨桶查询、数据转换和处理等。但对于习惯了 SQL 语法的开发者来说,学习 Flux 可能需要一定的时间和成本。例如,使用 Flux 查询过去一小时内所有服务器的平均 CPU 使用率,可以使用如下语句:“from (bucket: "telegraf") |> range (start: -1h) |> filter (fn: (r) => r._measurement == "cpu" and r._field == "usage_idle") |> aggregateWindow (every: 1h, fn: mean)” 。
TimescaleDB 完全支持标准的 SQL 查询语言,因为它是基于 PostgreSQL 开发的,继承了 PostgreSQL 强大的 SQL 处理能力 。用户可以使用标准的 SQL 语句进行数据的操作和分析,同时还能利用 TimescaleDB 提供的时序数据处理功能,如自动分片、时间序列函数等。例如,使用 “SELECT time_bucket ('1 hour', time), AVG (temperature) FROM sensor_data GROUP BY time_bucket ('1 hour', time)” 语句,可以查询出传感器数据每小时的平均温度。这种对标准 SQL 的全面支持,使得 TimescaleDB 在处理复杂的数据分析任务时具有很大的优势,同时也便于与其他基于 SQL 的工具和系统进行集成。
(三)分布式与扩展性
TDengine 从设计之初就考虑了分布式和扩展性,其集群功能完全开源 。TDengine 采用了分布式的元数据管理和数据存储架构,能够支持水平扩展,轻松应对大规模数据和高并发的读写请求。在一个拥有 10 亿时间线和 100 个数据节点的情况下,TDengine 的性能也能得到很好的保证,并且能够有效地解决时序数据处理中的 “高基数” 问题 。例如,当数据量不断增加时,可以通过添加更多的节点来扩展集群的存储和计算能力,而无需对应用程序进行大规模的修改。这种分布式架构使得 TDengine 在处理海量时序数据时具有很高的灵活性和可扩展性。
InfluxDB 的开源版本最初只支持单机部署,企业版才具备完整的集群功能 。在企业版中,InfluxDB 通过集群部署可以实现数据的分布式存储和查询,提高系统的性能和可用性。然而,对于一些预算有限的小型企业或个人开发者来说,使用 InfluxDB 的企业版可能会面临成本较高的问题。同时,InfluxDB 在分布式环境下的一致性有一些限制,尤其在写入操作时,需要进行额外的配置和管理来确保数据的一致性。例如,在进行数据写入时,需要考虑数据在多个节点之间的同步和复制,以避免数据丢失或不一致的情况发生。
TimescaleDB 支持线性扩展,它通过将数据自动分片存储在多个节点上,实现了水平扩展的能力 。TimescaleDB 可以根据数据的时间和空间维度进行自动分区,将不同时间段或不同区域的数据存储在不同的分片(chunk)中,从而提高查询和写入的性能。同时,TimescaleDB 支持多个 SERVER 和多个 CHUNK 的并行查询,能够充分利用集群的计算资源,加快查询速度。例如,在处理大规模的传感器数据时,可以将不同传感器的数据存储在不同的分片中,当进行查询时,多个分片可以并行处理查询请求,提高查询效率。然而,与 TDengine 相比,TimescaleDB 在分布式扩展性方面的功能相对较弱,尤其是在处理超大规模数据和高并发场景时,可能会面临一些性能瓶颈。
(四)其他特性
TDengine 除了具备基本的时序数据库功能外,还自带了缓存、流式计算和数据订阅等功能 。缓存功能可以提高数据的读取速度,减少磁盘 I/O 操作,从而提升系统的整体性能。流式计算功能允许用户对实时流入的数据进行实时分析和处理,及时发现数据中的异常和趋势。数据订阅功能则可以实现数据的安全、灵活共享,用户可以通过订阅的方式获取感兴趣的数据,而无需直接访问数据库。例如,在一个智能工厂的场景中,通过 TDengine 的流式计算功能,可以实时监测设备的运行状态,当发现设备出现异常时,及时发出警报通知维护人员进行处理。
InfluxDB 具有保留策略(Retention Policy),用户可以通过设置保留策略来自动清理旧数据,控制数据的存储时间和空间占用 。例如,可以设置某个数据库中的数据只保留 30 天,超过 30 天的数据将被自动删除。此外,InfluxDB 还支持持续查询(Continuous Query),能够自动定期计算聚合数据,并将结果存储在指定的位置,提高了查询的效率。例如,通过持续查询,可以每小时计算一次服务器的平均负载,并将结果存储在一个新的测量(measurement)中,以便后续查询和分析。
TimescaleDB 利用了 PostgreSQL 的丰富特性,如支持 GIS(地理信息系统)、JOIN 操作等,方便进行复杂的数据处理和分析 。同时,TimescaleDB 还支持流复制(Stream Replication)和 PITR(Point-in-Time Recovery,时间点恢复)等功能,提高了数据的安全性和可靠性。流复制可以实现数据在多个节点之间的实时同步,当主节点出现故障时,从节点可以迅速接管服务,保证系统的高可用性。PITR 功能则可以将数据库恢复到某个特定的时间点,以便在数据丢失或损坏时进行数据恢复。例如,在一个金融交易系统中,利用 TimescaleDB 的流复制和 PITR 功能,可以确保交易数据的安全和完整,即使出现硬件故障或人为错误,也能够快速恢复数据,保证业务的正常运行
相关文章:
TDengine 与其他时序数据库对比:InfluxDB/TimescaleDB 选型指南(一)
引言 在当今数字化时代,物联网(IoT)、工业互联网等领域蓬勃发展,产生了海量的时序数据。这些数据记录了设备状态、传感器读数、业务指标等随时间变化的信息,对于企业的运营监控、数据分析和决策制定起着关键作用。为了…...
Jetson agx Orin 适配Xenomai4
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一、Xenomai 4 二、使用步骤 1.获取源码 2.编译源码 3、安装 4、运行效果 5、libevl 总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了…...
Terraform - 理解 Count 和 For_Each 循环
概述 使用 Terraform 时,您可能需要为同一资源创建多个实例。这时 count 和 for_each 循环就派上用场了。这些循环允许您创建具有相同配置但具有不同值的多个资源。本指南将讲解如何在 Terraform 中使用 count 和 for_each 循环。 Terraform 中的 Count Terraform …...
Git本地更新和远端同步操作
1、将远端文件夹拉取到本地 从0—1:克隆 在文件夹空白处点击:Git克隆 输入url,克隆到本地 输入远端文件地址,点击确定,远端文件即可克隆到本地 2、拉取远端更新到本地 文件克隆到本地后,每次更新需…...
激活函数Softmax在不同维度上的应用 | dim参数理解
理解 Softmax 在不同维度上的应用,关键在于明确 Softmax 的作用以及 dim 参数的意义。Softmax 的目标是将输入张量的某些元素转换为概率分布,使得这些元素的和为1。dim 参数决定了沿着哪个维度进行归一化操作。 1. Softmax 的基本原理 Softmax 函数的公…...
地理人工智能中位置编码的综述:方法与应用
以下是对论文 《A Review of Location Encoding for GeoAI: Methods and Applications》 的大纲和摘要整理: A Review of Location Encoding for GeoAI: Methods and Applications 摘要(Summary) 本文系统综述了地理人工智能(G…...
6.DJI-PSDK:psdk订阅无人机高度/速度/GPS/RTK/时间/经纬度等消息及问题解决
DJI-PSDK:psdk订阅无人机高度/速度/GPS/RTK/时间/经纬度等消息 消息订阅可以获取绝大多数无人机的动态信息,包括无人机的姿态、速度、加速度、角速度、高度、GPS 位置、云 台的角度和状态、飞行模式和飞行状态、电机和电池等各类关键信息。 这些信息并不会“一股脑儿地”全部…...
ArrayList的subList的数据仍是集合
ArrayList的subList结果不可强转成ArrayList,否则会抛出 ClassCastException异常 • 级别: 【CRITICAL】 • 规约类型:BUG • 最坏影响: 程序错误,抛出异常 说明:subList 返回的是ArrayList的内部类SubL…...
VS Code怎么换颜色
在 VS Code 中,你可以通过修改主题或自定义编辑器颜色来将界面改为白色。以下是几种方法: 方法 1:切换浅色主题(推荐) VS Code 自带多个浅色主题,可以直接切换: 按快捷键 Ctrl K,…...
jupyter中切换Anaconda虚拟环境
jupyter中切换虚拟环境 查看python路径 import sys sys.executable这个命令会输出当前 Notebook 使用的 Python 可执行文件的路径 2. 查看安装的包和环境信息(前两步都在jupyter notebook中进行) !which python !python --version !pip list将你的虚拟…...
红帽认证 Linux安全 级别
红帽认证体系将安全能力划分为专项技能认证与架构师路径,覆盖从基础加固到企业级安全架构设计。以下是安全相关认证的级别、核心内容及职业定位: 一、红帽安全认证分级与定位 认证名称级别考试代码核心方向考试难度适用人群Red Hat Certif…...
从服务器多线程批量下载文件到本地
1、客户端安装 aria2 下载地址:aria2 解压文件,然后将文件目录添加到系统环境变量Path中,然后打开cmd,输入:aria2c 文件地址,就可以下载文件了 2、服务端配置nginx文件服务器 server {listen 8080…...
WPF 中的元素继承层次结构 ,以下是对图中内容的详细说明:
顶层基类 DispatcherObject:处于继承体系最顶端,是一个抽象类。它为 WPF 元素提供了与 Dispatcher(调度器)交互的能力,Dispatcher 负责管理线程间的消息传递,确保 UI 操作在正确的线程(通常是 …...
ROS IkFast运动学插件
ikFast运动学插件生成 环境安装ROS依赖安装openrave依赖下载依赖代码工具使用urdf转dae设置精度查看模型关节生成代码生成插件 环境 ubuntu 20.04ROS版本:noetic 安装ROS依赖 sudo apt-get install -y ros-noetic-desktop ros-noetic-collada-urdf ros-noetic-mov…...
Flink Hive Catalog最佳实践
Flink Hive Catalog 最佳实践 一、配置与初始化 依赖管理 Hive Connector 版本对齐:需确保 flink-sql-connector-hive 版本与 Hive 版本严格匹配(如 Hive 3.1.3 对应 flink-sql-connector-hive-3.1.3_2.12),同时添加 Hadoop 遮蔽…...
接口测试之postman使用指南
一、为何使用postman postman是一款简单高效的接口测试工具,能够很方便发送接口请求,易于保存接口请求脚本,postman提供接口响应数据比对功能,可以设置预期结果作断言,还能把测试用例放在一个集合中批量执行ÿ…...
小豆包api:支持GPT-4.1全新系列模型api,纯官逆向可用!
今天凌晨,OpenAI正式发布GPT-4.1系列模型,带来标准版GPT-4.1,更轻量快速GPT-4.1 mini和极致性价比的GPT-4.1 nano三款模型,全面超越GPT-4o,更聪明、更便宜。 小豆包api已全面支持GPT-4.1全新系列模型! 与前…...
GPTNet如何革新创意与效率
引言 人工智能正在以前所未有的速度改变我们的工作与生活方式,从智能写作到视觉创作,AI工具已成为不可或缺的伙伴。在众多平台中,GPTNet以其强大的功能整合和直观体验崭露头角。它不仅汇集了GPT系列、Claude、Grok、Gemini等顶级对话模型&am…...
3.3.6 VO-O语法- 流程算子
流程算子是VO语言最重要的一类语法算子。它们是VO语言特有的语法概念。这些算子属于容器算子,用于组织管理各类流程。这样的设计有利于流程的复用。可以将流程视为一个大级别的函数模块,在更大的业务逻辑中复用,从而降低业务开发的复杂度&…...
c++引入nacos,详细步骤
以下是将Nacos引入C项目的详细步骤,包括安装、配置和代码实现: 1. 安装Nacos服务器 下载Nacos服务器安装包,可以从Nacos官网获取最新版本。 解压安装包并启动Nacos服务器: cd nacos/bin sh startup.sh -m standalone 这将启动…...
OpenAI 最新发布的 GPT-4.1 系列在 API 中正式上线
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
亚远景-自动驾驶时代,ASPICE评估标准将如何演进?
自动驾驶时代,ASPICE评估标准将从以下几个方面演进: 1. 技术领域的扩展 增加硬件工程和机器学习过程组 :ASPICE 4.0版本新增了硬件工程和机器学习过程组,以应对自动驾驶系统中硬件与软件深度融合的需求。自动驾驶功能的实现不仅依…...
Redis 数据类型全解析:从基础到实战应用
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis 作为高性能的键值对存储系统,其丰富的数据类型是实现复杂业务逻辑的核心优势。本文将深入解析 Redis 六大核心数据类型及扩展类型ÿ…...
基于JSP+MySQL实现用户注册登录及短信发送功能
用户注册信息存入数据库 内容介绍 此项目是前台用户的登录和注册,,这部分包括两个子部分:其中一个为新用户注册,在这里我们可以通过注册浏览更多信息;另一个是用户登录,用户登录系统是一.般 Web 网站都有的子系统,其作用是限制该网站某些资…...
Spark-SQL核心编程2
路径问题 相对路径与绝对路径:建议使用绝对路径,避免复制粘贴导致的错误,必要时将斜杠改为双反斜杠。 数据处理与展示 SQL 风格语法:创建临时视图并使用 SQL 风格语法查询数据。 DSL 风格语法:使用 DSL 风格语法查询…...
Flink SQL SavePoint最佳实践
以下是 Flink SQL Savepoint 最佳实践,涵盖配置、触发、恢复及注意事项,高效管理作业状态: 一、Savepoint 的配置与触发 1. 基础配置 存储路径:在 flink-conf.yaml 中全局设置 Savepoint 存储目录,避免每次手动指定路…...
【无标题】Spark-SQL编程(2)
以下是今天学习的知识点以及代码测试: Spark-SQL核心编程(四) 实验内容: 利用IDEA开发Spark-SQL。 实验步骤: 利用IDEA开发Spark-SQL 创建子模块Spark-SQL,并添加依赖 <dependency> <grou…...
django项目之添加资产信息功能
资产信息功能添加 目录 1.创建表格 2.页面展示 3.新增和修改 4.删除 这篇文章的内容, 就是在前面做的基础上, 新增一个资产管理功能, 其实就和之前的部门信息还有员工信息差不多的, 但是这篇文章里面, 会有些细节的地方, 和之前的不太一样。那下面我们就开始讲述这篇文章…...
macos下 ~/.zshrc~ 和 ~/.zshrc
macos下 ~/.zshrc~ 和 ~/.zshrc ~/.zshrc通常是备份文件或临时文件,可能由编辑器(如vim)创建,通常可以安全删除,不会影响系统运行。 在Mac下,这种带~后缀的备份文件通常是由以下情况产生: 常…...
Kotlin集合操作陷阱与突围:如何优雅地边遍历边修改MutableList
在Kotlin开发中,MutableList是我们常用的集合类型之一。但当我们需要在遍历列表的同时修改它(添加或删除元素)时,很多开发者会遇到ConcurrentModificationException异常。本文将详细介绍如何安全高效地实现这一需求。 一、问题场…...
交换机与路由器的默契配合:它们的联系与区别
交换机与路由器的默契配合:它们的联系与区别 一. 交换机与路由器的基本功能1.1 交换机的功能1.2 路由器的功能 二. 交换机和路由器的区别三. 交换机和路由器的联系3.1 数据转发的协作3.2 网络分段与分隔3.3 协同工作提供互联网接入 四. 交换机和路由器的联合应用场景…...
cocos 3D自由世界游戏 - 开发
cocos 3D自由世界游戏 - 开发 序概述第一步 创建环境,XForge 框架基础3D创建思路场景地形树木等环境人物角色角色实现实现代码篇空间管理篇动画逻辑篇按钮实现篇虚拟摇杆多功能按钮移动和目标篇AI实现角色属性以及身份牌篇装备篇结尾序 在同时浅入了unity 和 cocos以来,得到…...
SOME/IP中”客户端消费“及”服务端提供”的解析
先上结论 AREthAddConsumedEventGroup-->客户端的函数-->谁调用 Consumed函数,谁就是消费者 AREthAddProvidedEventGroup-->服务端的函数-->谁调用 Provided函数,谁就是服务端 Server 端:AREthAddProvidedEventGroup → 声明 &…...
视频分析设备平台EasyCVR安防视频管理系统,打造电石生产智能视频监控新体系
一、背景介绍 电石生产中的出炉工序是整个生产流程中最为繁重且危险的环节。在开堵炉眼的过程中,电石极易发生飞溅现象,尤其在进行吹氧操作时,人员灼伤的风险极高。鉴于此,该工序正逐步由传统的人工操作模式向智能化方向转变。然…...
ffmpeg实现视频流抽帧
ffmpeg 实现视频流抽帧 抽取实时视频帧 如果你的实时视频是通过 RTSP、UDP 或其他协议获取的,可以直接调用 FFmpeg 命令来抽取帧。 ffmpeg 命令 示例 1 ffmpeg -i rtsp://your_rtsp_stream_url -vf fps1 -update 1 output.jpg说明: -i rtsp://your…...
VTK知识学习(51)- 交互与Widget(三)
1、概述 从前面的 内容可知,交互器样式(如 vtknteractorStylelmage)主要是根据不同的键盘、鼠标等消息来控制相机(vtkCamera)、Actor 等相关参数,从而达到交互的目的。而在渲染场景中,这些交互器样式是没有表达实体的。也就是说,在…...
蓝桥杯嵌入式开发板结构分析及功能学习笔记
目录 板子结构一览时钟源分析74LS573锁存器按键输入滴答定时器 SysTick串口收发LCD屏幕ADC采样AT24C02(EEPROM)可编程电阻TIM定时器输入捕获DAC 板子结构一览 主控为 **STM32G431RBT6**** 外部晶振频率为 **24MHz IAP下载为** GD32F350C8T6** 时钟源分析 自己配置的STM32Cu…...
C++进阶——C++11_智能指针
目录 1、问题引入 2、RAII和智能指针 3、C标准库的智能指针 3.1 auto_ptr (不好) 3.2 unique_ptr 3.3 shared_ptr (重点) 3.4 weak_ptr (重点) 4、shared_ptr的循环引用问题(重点) 5、shared_ptr的线程安全问题 6、C11智能指针和boost的关系 7、内存泄漏 7.1 什么是…...
音频格式转换
1. 下载ffmpeg https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-7.1.1-full_build.7z 2. 配置ffmpeg环境变量 3.安装pydub pip install pydub 4.编写转化工具代码 from pydub import AudioSegment def convertM4aToWav(m4a,wav):sound AudioSegment.from_file(m4a, f…...
mysql安装配置教程
由于您可能需要针对特定操作系统(如Windows、macOS或Linux)的MySQL安装配置教程,这里我将提供一个较为通用的指南,适用于大多数情况。如果您有特定的操作系统需求,请告诉我,我可以提供更详细的指导。 ### …...
埃文科技助力山西公共数据运营新发展
近日,郑州埃文科技有限公司(以下简称“埃文科技”)凭借“数据场景生态”的三维核心竞争力,成为山西云时代政务云技术有限公司专业领域数据类产品授权运营合作伙伴。 埃文科技作为数据全生命周期价值建设先行者,深度赋…...
【STM32】在FreeRTOS下使用硬件SPI收发数据出现的时序耦合问题(WK2124芯片为例)
问题 STM32中在Freertos使用SPI通讯芯片 WK2124进行SPI转4串口时,接收数据为一个任务,发送数据为一个任务,切接受任务优先级更高实测发现收发一段时间(约几分钟)外扩芯片会死锁导致WK2124复位。 分析 首先ÿ…...
linux Shell编程之函数与数组(四)
目录 一. shell 函数 1. 函数的用法 (1) 两个数求和 (2) 系统资源监控并报警函数 2. 函数变量的作用范围 3. 函数的参数 4. 递归函数 二. shell 数组 (1) 获取数组长度 (2) 读取某下标赋值 (3) 数组遍历 (4) 数组切片 (5) 数组替换 (6) 数组删除 三. shell 脚本…...
4.vtk光照vtkLight
文章目录 VTK中的光照1. vtkLight 的两种类型:位置光照和方向光照2. vtkLight 的常用方法3. 方法命名风格4. vtkProp 的可见性与 vtkLight 的开关 示例 VTK中的光照 vtkLight: 用于定义一个或多个光源。每个光源可以有其颜色、位置、焦点等属性。 vtkActor: 每个vtk…...
定义AIDL 接口
目录 定义 AIDL 接口创建 .aidl 文件实现 AIDL 接口向客户端公开接口接口的版本兼容性小结1. 定义 AIDL 接口 AIDL 接口是什么? 概念 AIDL(Android 接口定义语言)用来定义跨进程通信(IPC)的接口。简单来说,它规定了客户端和服务端之间如何进行数据交换和方法调用。.aidl…...
Linux系统-scp命令--两台服务器之间传输文件
一、定义 scp是secure copy的简写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,可以在linux服务器之间复制文件和目录,scp传输是加密的,可能会稍微影响一下速度。另外,scp还非常不占资源,不会提…...
Visual Studio + OpenCV C++ 安装与配置教程
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,广泛用于图像处理、视频分析、模式识别和机器学习等领域。它由Intel公司于1999年发起,并在2000年由Willow Garage(一个机器人研究机构)进一步开发和维护。OpenCV支持多种编程语言,包括C++、Python…...
怎么通过OPPO手机进行图片编辑?图片编辑攻略,打造专业级照片
在当今数字化时代,手机摄影已成为记录生活、分享瞬间的重要方式。而作为市场上广受欢迎的智能手机品牌之一,OPPO手机不仅在摄影硬件上表现出色,其内置的图片编辑功能也极为强大,能够满足使用者从基础调整到高级创作的各种需求。本…...
基于MFC 的链接库
1. 动态库 MFC Regular dll: ① DLL内部有一个CWinApp类全局对象(像是基于mfc的exe程序那样存在一个theApp),该CWinApp类的Initstance负责执行dll内部初始化。 ② DLL不能人为提供Dllmain函数,该函数由mfc库提供。 ③在visual studio 的工程配置中&a…...
2025.04.15【Connection】| 生信数据可视化:连接图绘制指南
文章目录 生信数据可视化:连接图绘制指南什么是连接地图?为什么使用连接地图?如何在R中创建连接地图?1. 安装和加载必要的库2. 准备数据3. 计算大圆航线的距离和方位角4. 创建连接地图 高级技巧1. 自定义地图样式2. 添加地理背景 …...