分布式、端边云同步、读写查询性能,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 级别的时序数据存储。
与业界其他时序数据库相比,Apache IoTDB 是第一个也是唯一一个提出并应用共识协议统一框架的系统。用户可以根据性能、可用性、一致性和存储成本等需求,灵活选择不同的共识算法。在共识协议统一框架下,Apache IoTDB 拥有强一致性共识协议 RatisConsensus、 专为 IoT 时序场景设计的高性能弱一致性共识协议 IoTConsensus、轻量级单副本共识协议 SimpleConsensus,为用户不同的业务需求提供了丰富灵活的配置选择。
提供丰富可观测性指标。Apache IoTDB 在分布式架构的全链路中内置了上千种监控指标,覆盖读写流程、共识算法、负载均衡、系统资源等,可以为用户提供可靠的实时监控。
InfluxDB
InfluxDB 开源版的分布式特性较为有限,只支持单节点部署,适用于中小规模的数据处理需求。
在开源版本中,InfluxDB 通过时间分片和数据压缩技术来提高数据写入和查询的性能,但不支持原生分布式存储和处理功能。
为了解决单节点的局限性,用户通常需要依赖外部工具和方案,例如使用 Telegraf 进行数据分发,或者通过 InfluxDB 企业版来获得完整的分布式支持。
03
端边云同步
随着物联网数据采集技术的发展与云计算服务的兴起,端边云架构在数据管理中的作用愈发重要。越来越多的业务系统在工厂等靠近数据源的地方部署端侧边侧数据库进行数据采集,并将采集数据汇总到城市数据中心来实现海量数据的存储与分析。接下来,我们将对比 Apache IoTDB 和 InfluxDB 开源版的端边云同步能力。
Apache IoTDB
Apache IoTDB 原生内置流处理引擎,支持端边云同步功能,并拥有良好的性能、可拓展性和可用性等。
近存储计算,以最小 IO、CPU 和网络代价利用数据进行计算,可对核心场景充分优化。Apache IoTDB 充分利用了时序数据库中存储文件的高压缩率特点,将存储引擎 IoTLSM-Tree 中的数据存储文件 TsFile 作为传输单位,降低传输的网络流量并减小云端负载。
Apache IoTDB 端边云同步框架允许用户实现自定义的流处理逻辑,可以实现对存储引擎数据变更的监听和捕获、完成对变更数据的处理、实现对变形后数据的向外推送等逻辑。基于自定义流处理插件编程接口,用户可以轻松编写数据抽取插件、数据处理插件和数据发送插件,从而使得流处理功能灵活适配各种工业场景,相比 ETL 或用户手动实现的 CDC 更好用易用。
提出一种基于日志与文件混合传输的时序数据库数据同步方法。通过动态选择利用日志文件和数据文件进行同步,可以在保证较低延迟的同时,尽量增大数据吞吐量。
支持分布式高可用。流处理引擎原生支持进度记录、出错自动重试、断点重算等特性,同时支持 at-least-once 传输语义,保证端到端 100% 一致性。
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 倍。
05
总结
在选择适合物联网和大数据应用的时序数据库时,了解不同数据库在架构设计、功能和性能方面的差异是至关重要的。本文对 Apache IoTDB 和 InfluxDB 开源版进行了详细对比,重点分析了它们在分布式架构、端边云同步能力和性能方面的表现。通过本文的对比分析,希望能够为开发者和决策者在选择时序数据库时提供有价值的参考,在复杂多变的物联网和大数据环境中做出最优选择!