Apache IoTDB vs InfluxDB 开源版,架构性能全面对比!

news2024/11/27 2:20:50

e14cef628f4d8cf7ea540e9a6b625320.png

分布式、端边云同步、读写查询性能,Apache IoTDB 与 InfluxDB 开源版的详尽对照!

在物联网(IoT)领域,数据的采集、存储和分析是确保系统高效运行和决策准确的重要环节。随着物联网设备数量的增加和数据量的爆炸式增长,开发者和决策者们需要选择合适的时序数据管理系统。Apache IoTDB 和 InfluxDB 是两款广泛应用的原生时序数据库,它们在架构设计、性能和功能方面各具特色。

为了帮助用户在具体应用场景中做出最适合的时序数据库选择。本文将从:分布式架构、端边云同步能力和性能表现三个方面对 Apache IoTDB 和 InfluxDB 开源版进行详细对比。下面,跟随我们来一探究竟!

01

基本概述

Apache IoTDB(Internet of Things Database)是起源于清华大学的 Apache 顶级项目,也是专为物联网和工业大数据场景设计的高效可扩展时序数据库。IoTDB 旨在提供高吞吐量和低延迟的数据写入和查询能力,支持海量设备和传感器的数据采集。其核心优势在于轻量级、高压缩比和便捷的时间序列数据管理。此外,IoTDB 提供端边云一体化的解决方案,并能够与 Apache Hadoop、Spark、Flink 等大数据系统无缝集成。IoTDB 的分布式架构能够应对大规模物联网数据的存储需求,并提供高可用性和数据一致性。

InfluxDB 是由 InfluxData 开发的一款被广泛应用的时序数据库,以其高性能和灵活性在开发者社区中享有盛誉。InfluxDB 专为高并发的时间序列数据写入和查询而优化,提供了强大的查询语言 InfluxQL,以及兼容 SQL 的 Flux 查询语言,使数据分析更加灵活。InfluxDB 强大的数据压缩和持久化策略有效降低了存储成本。同时,InfluxDB 还支持丰富的生态系统扩展,包括 Telegraf 作为数据采集代理,以及 Chronograf 和 Kapacitor 用于数据可视化和实时处理。

02

分布式架构

在物联网和大数据应用中,分布式架构是处理海量数据和保证系统高可用性的关键技术之一。分布式架构不仅能提高系统的吞吐量和性能,还能提供良好的扩展性和容错能力。接下来,我们将深入探讨 Apache IoTDB 和 InfluxDB 开源版在分布式架构上的设计理念、实现方式及其优缺点。

Apache IoTDB

Apache IoTDB 原生支持分布式,并针对物联网场景做了大量优化,以最大化分布式集群的可用性、可扩展性和性能。

  • Apache IoTDB 针对大部分时序场景中近期数据操作频繁、历史数据操作较少的特点,设计了专门的数据分区和负载均衡策略:Apache IoTDB 管理数据和元数据,以数据分片为例,如下图所示,所有设备的读写流量都会通过哈希算法均匀分配到 SeriesSlot ,再通过时间区间计算得到 TimeSlot 及其对应的 DataPartition,而各层映射通过负载均衡算法确保均匀分配,从而使数据的读写可以并行均匀利用集群所有节点的资源。

通过该方案,不论设备数量是万级还是亿级,时间范围的跨度是 1 年还是 10 年,IoTDB 分片路由信息的维护成本依然是非常轻量的,而具体的时序数据管理又可以分散到集群中,这使得 IoTDB 在面对大规模时序数据时具有很高的可扩展性,目前最大测试过 PB 级别的时序数据存储。

d5c6310f3b341d66528deacdb5354a25.png

  • 与业界其他时序数据库相比,Apache IoTDB 是第一个也是唯一一个提出并应用共识协议统一框架的系统。用户可以根据性能、可用性、一致性和存储成本等需求,灵活选择不同的共识算法。在共识协议统一框架下,Apache IoTDB 拥有强一致性共识协议 RatisConsensus、 专为 IoT 时序场景设计的高性能弱一致性共识协议 IoTConsensus、轻量级单副本共识协议 SimpleConsensus,为用户不同的业务需求提供了丰富灵活的配置选择。

  • 提供丰富可观测性指标。Apache IoTDB 在分布式架构的全链路中内置了上千种监控指标,覆盖读写流程、共识算法、负载均衡、系统资源等,可以为用户提供可靠的实时监控。

InfluxDB

InfluxDB 开源版的分布式特性较为有限,只支持单节点部署,适用于中小规模的数据处理需求。

  • 在开源版本中,InfluxDB 通过时间分片和数据压缩技术来提高数据写入和查询的性能,但不支持原生分布式存储和处理功能。

  • 为了解决单节点的局限性,用户通常需要依赖外部工具和方案,例如使用 Telegraf 进行数据分发,或者通过 InfluxDB 企业版来获得完整的分布式支持。

03

端边云同步

随着物联网数据采集技术的发展与云计算服务的兴起,端边云架构在数据管理中的作用愈发重要。越来越多的业务系统在工厂等靠近数据源的地方部署端侧边侧数据库进行数据采集,并将采集数据汇总到城市数据中心来实现海量数据的存储与分析。接下来,我们将对比 Apache IoTDB 和 InfluxDB 开源版的端边云同步能力。

Apache IoTDB

Apache IoTDB 原生内置流处理引擎,支持端边云同步功能,并拥有良好的性能、可拓展性和可用性等。

991e7c0315bbad6d90cbcac9e5fc46d3.png

  • 近存储计算,以最小 IO、CPU 和网络代价利用数据进行计算,可对核心场景充分优化。Apache IoTDB 充分利用了时序数据库中存储文件的高压缩率特点,将存储引擎  IoTLSM-Tree 中的数据存储文件 TsFile 作为传输单位,降低传输的网络流量并减小云端负载。

  • Apache IoTDB 端边云同步框架允许用户实现自定义的流处理逻辑,可以实现对存储引擎数据变更的监听和捕获、完成对变更数据的处理、实现对变形后数据的向外推送等逻辑。基于自定义流处理插件编程接口,用户可以轻松编写数据抽取插件、数据处理插件和数据发送插件,从而使得流处理功能灵活适配各种工业场景,相比 ETL 或用户手动实现的 CDC 更好用易用。

  • 提出一种基于日志与文件混合传输的时序数据库数据同步方法。通过动态选择利用日志文件和数据文件进行同步,可以在保证较低延迟的同时,尽量增大数据吞吐量。

  • 支持分布式高可用。流处理引擎原生支持进度记录、出错自动重试、断点重算等特性,同时支持 at-least-once 传输语义,保证端到端 100% 一致性。

fd62cc4bfcc4e5cee798c0adee8594c1.png

InfluxDB

InfluxDB 开源版在端边云同步方面的功能相对有限。虽然 InfluxDB 开源版可以通过 Telegraf 代理从边缘设备收集数据,但其本身并不提供专门的同步工具或协议来实现端边云同步。

开发者通常需要依赖第三方工具或定制解决方案来实现数据的同步和传输。例如,可以使用 Kapacitor 进行数据处理和传输,或者借助 MQTT、HTTP 等协议手动实现数据同步。这种方式虽然灵活,但也增加了实现的复杂性和维护成本。InfluxDB 企业版提供了更多的同步和集成选项,但这些功能在开源版中并不包含。

04

性能

性能无疑是时序数据库选型中最重要的指标之一。接下来,本文将基于 benchANT 对 Apache IoTDB 和 InfluxDB 开源版进行性能对比。

benchANT 是德国一家专门做云设施和数据库性能评估的测试机构。在用户对数据库选型很难找到以性能、功能表现为参考基准榜单的情况下,benchANT 致力于在统一的硬件资源和系统配置下对各类主流数据库系统做性能测试,并依据各项指标进行排名。

基于 benchANT 排行榜的评估结果与其提供的测试环境、条件,Apache IoTDB 团队试图还原了 benchANT 排行榜针对 Apache IoTDB 性能与成本指标的测试流程,并与 InfluxDB 的数据表现进行了对比。

  • Apache IoTDB 的写入吞吐量(Write Throughput)通过导入 2,617,920,000 个数据点并计算所需的耗时得到, InfluxDB 测试结果为 52 万点/秒,而 Apache IoTDB 可达到 363 万点/秒,为 InfluxDB 的 7 倍

  • Apache IoTDB 的查询延迟(Read Latency)通过查询“1 个设备的 1 个测点在 1 个小时内按照 1 分钟进行分段聚合的值”这一场景计算得到,InfluxDB 测试结果约为 45 毫秒,而 Apache IoTDB 可达到 2 毫秒,响应速度比 InfluxDB 快 20 倍以上

  • Apache IoTDB 的存储占用(Storage Comsumption)通过在测试结束时记录存储空间占用得到, InfluxDB 测试结果为 3 GiB,而 Apache IoTDB 仅占用 2 GiB,存储成本比 InfluxDB 减少 33%

  • benchANT 使用读取吞吐量(Read Throughput)/ 月成本(Monthly Costs),计算出的成本效益(Operations Per Cost),也就是代表“每一美元能够置换多少的读取性能”,进而评估时序数据库的投入性能比。在这一指标中, InfluxDB 成本效益为 12.37 ops/$,而 Apache IoTDB 则达到 64.59 ops/$,约为 InfluxDB 的 5 倍

cf753d07dd10b40598a534825994bee3.png

05

总结

在选择适合物联网和大数据应用的时序数据库时,了解不同数据库在架构设计、功能和性能方面的差异是至关重要的。本文对 Apache IoTDB 和 InfluxDB 开源版进行了详细对比,重点分析了它们在分布式架构、端边云同步能力和性能方面的表现。通过本文的对比分析,希望能够为开发者和决策者在选择时序数据库时提供有价值的参考,在复杂多变的物联网和大数据环境中做出最优选择!

ac6093ad786980f23ce17e0f8a813794.gif

0c9840a1c2a306e3801ddf77eba0cfd9.jpeg

0d72d1a8af1c7e202da4f8468ac3fc34.jpeg

176dfc25124bac795c6d891c0d838726.jpeg

d437d5f17417786aaa2a798441c39cc6.gif

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; func calculateMinimumHP(dungeon [][]int) int {n, m : len(dungeon), len(dungeon[0])dp : make([][]int, n 1)for i : 0; i < len(dp); i {dp[i] make([]int, m 1)for j : 0; j < len(dp[i]); j {dp[i][j] math.MaxInt32}}dp[…

爬虫笔记11——网页爬取数据写入csv

数据持久化存储进文件&#xff0c;前面的文章已经讲解如何存储入Excel表格了&#xff0c;有兴趣可以看一下&#xff0c;现在来记录一下如何存储进csv文件。 csv存储 csv简述 csv就是一个普通文件&#xff0c;里面的内容是每一行中的数据用逗号分隔&#xff0c;然后文件后缀为…

Golang | Leetcode Golang题解之第179题最大数

题目&#xff1a; 题解&#xff1a; func largestNumber(nums []int) string {sort.Slice(nums, func(i, j int) bool {x, y : nums[i], nums[j]sx, sy : 10, 10for sx < x {sx * 10}for sy < y {sy * 10}return sy*xy > sx*yx})if nums[0] 0 {return "0"…

教师信息管理系统

摘要 随着互联网技术与信息时代的高速发展和应用&#xff0c;教育行业也逐渐意识到互联网技术与信息化管理的融合。在传统的教师信息管理中&#xff0c;往往需要大量的纸质档案和手工处理&#xff0c;不仅效率低下&#xff0c;而且容易出现信息丢失和错误。因此为了提高教师信…

解决vs2022无法安装扩展程序包

在工具—>NuGet包管理器—>程序包管理设置&#xff0c;把程序包源设置为https://www.nuget.org/api/v2/&#xff0c;如下图 然后就可以在管理解决方案包界面搜索下载自己需要的扩展包

安全之战,巅峰对决 | 第八届XCTF国际网络攻防联赛总决赛首日赛况公布!

XCTF联赛由清华大学蓝莲花(Blue-Lotus)战队发起&#xff0c;国家创新与发展战略研究会主办&#xff0c;赛宁网安总体承办&#xff0c;旨在探索网络安全创新能力与发展潜力。第八届XCTF国际网络攻防联赛总决赛在四川省经济和信息化厅、四川省教育厅、四川省公安厅的指导下&#…

kafka(二)安装部署(2)windows

一、前提 安装Kafka之前&#xff0c;需要安装JDK、Zookeeper、Scala, 本次安装版本选择&#xff1a; JDK&#xff1a;1.8 Zookeeper&#xff1a;3.6.4 Scala&#xff1a;2.12 Kafka&#xff1a;3.5.2 1、jdk Java Downloads | Oracle 见jdk下载安装。 2、Zookeeper 下载…

Android进程间通信 Messenger详解

//这里服务端Service是运行在单独的进程中的 android:process“:other” class MessengerService : Service() { private lateinit var mMessenger: Messenger override fun onBind(intent: Intent): IBinder { log(TAG, “onBind~”) //传入Handler实例化Messenger mMes…

Android测量

最大模式&#xff08;MeasureSpec.AT_MOST&#xff09; 这个也就是父组件&#xff0c;能够给出的最大的空间&#xff0c;当前组件的长或宽最大只能为这么大&#xff0c;当然也可以比这个小。 最高两位是11的时候表示”最大模式”。即MeasureSpec.AT_MOST未指定模式&#xff08;…

Java | Leetcode Java题解之第179题最大数

题目&#xff1a; 题解&#xff1a; class Solution {public String largestNumber(int[] nums) {int n nums.length;// 转换成包装类型&#xff0c;以便传入 Comparator 对象&#xff08;此处为 lambda 表达式&#xff09;Integer[] numsArr new Integer[n];for (int i 0;…

windows git配置多个账号

window下git多账号配置_百度搜索 (baidu.com) 最重要的是这里生成新的id_rsa文件的时候&#xff0c;bash窗口是在 .ssh路径下 其实就是这个窗口在什么路径下执行的就是生成在什么路径 下面窗口路径不对&#xff0c;不是Desktop&#xff0c;应该是.ssh 如果是Desktop或者任何一…

如何解决跨区域文件传输存在的安全管控问题?

⼤型企业和集团为扩⼤市场份额、优化资源配置&#xff0c;会在不同地区设⽴多级下属分⽀机构、研发中心、实验室等&#xff0c;存在研发数据横向或纵向流转的需求&#xff0c;研发数据进行跨区域文件传输的场景。跨区域可能是网络区域&#xff0c;也可能是地理区域&#xff0c;…

常见数字化转型方案撰写的思维模式

通过这一段时间的学习和倾听,结合DAMA数据管理知识体系学习与项目实践,对大部分数据治理类项目、信息化建设和数字化转型项目的思维模式做了一些总结梳理,具体有如下四种,供参考。 一、方法1:结合环境六边形法 1.要点题,弄清楚问题是什么 2.目标原则有哪些,补充哪些 3.…

Android O 适配详细指南

NotificationChannel channel new NotificationChannel(mChannelId, name, NotificationManager.IMPORTANCE_DEFAULT); mNotificationManager.createNotificationChannel(channel); } } // 创建通知传入channelId NotificationCompat.Builder builder new NotificationCompat…

【Linux详解】缓冲区优化 | 进度条的实现 | Linux下git 的上传

目录 一. 缓冲区 1. 缓冲区概念 2. 缓冲区作用 2.1 提升读写效率 2.2 减少等待时间 3. 缓冲区刷新策略 3.4 特殊策略 4. 缓冲区存储位置 5. 总结 二. 实现进度条 引入&#xff1a;倒计时 process.c 三. Linux下git的上传 sum 一. 缓冲区 1. 缓冲区概念 缓冲区是…

C++实现自动生成c++类中的属性的get和set方法

目录 应用场景 运行准备 代码展示 结果显示 应用场景 当我们在编写类的属性时&#xff0c;需要对该属性进行封装&#xff0c;需要一系列的get和set的方法。例如下面是天气类的成员属性。可以看到属性很多&#xff0c;而写get和set都是一些固定的操作&#xff0c;因此可以直…

Swift 中的动态数组

Swift 的 Array 类型是一种强大而灵活的集合类型&#xff0c;可以根据需要自动扩展或缩减其容量。 动态数组的基本概念 Swift 中的数组是基于动态数组&#xff08;dynamic array&#xff09;的概念实现的。动态数组能够根据需要自动调整其容量&#xff0c;以容纳新增的元素&a…

51单片机STC89C52RC——6.3 定时器/计数器 实现计时功能(定时器+中断系统+LCD1602液晶显示器)

目录 目的/效果 一&#xff0c;STC单片机模块 二&#xff0c;定时器 中断系统LCD1602显示 三&#xff0c;创建Keil项目 四&#xff0c;代码 五&#xff0c;代码编译、下载到51单片机 ​ 目的/效果 用定时器实现系统中断&#xff0c;计时信息显示在LCD1602上。效果如下 …

计算机组成原理----指令系统课后习题

对应的知识点&#xff1a; 指令系统 扩展操作码的计算&#xff1a; 公式&#xff1a; 对扩展操作码而言&#xff0c;若地址长度为n&#xff0c;上一层留出m种状态&#xff0c;下一层可扩展出 mx2^n 种状态 1.设计某指令系统时&#xff0c;假设采用 16 位定长指令字格式&#…

文件上传漏洞-下篇

一、白名单绕过 目录路径检测绕过 00截断 简介&#xff1a; 0x00是字符串的结束标识符&#xff0c;攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断&#xff0c;而后面的内容又可以帮助我们绕过检测。 饶过条件 利用操作&#xff1a;Pass-12 要求&#xff…