IoTDB 与 HBase 对比详解:架构、功能与性能

708a2ec3a706ac458954b30de9d8bcf8.png

五大方向,洞悉 IoTDB 与 HBase 的详尽对比!

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

为了帮助用户在时序应用场景中做出更适合的时序数据库选择,本文将从:分布式架构、端边云同步能力、部署易用性、分析与计算能力和性能表现五个方面对 Apache IoTDB 和 Apache HBase 进行详细对比。

01

基本概述

Apache IoTDB(Internet of Things Database)是起源于清华大学的 Apache 顶级项目,也是专为物联网和工业大数据场景设计的高效可扩展时序数据库。

Apache HBase 是一个高性能、面向列的分布式 NoSQL 数据库,基于 Google 的 BigTable 架构设计,运行在 Hadoop 生态系统之上。它利用 Hadoop 分布式文件系统(HDFS)进行数据存储,并通过 Zookeeper 进行分布式协调。

02

对比方向一:分布式架构

Apache IoTDB

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

  • Apache IoTDB 针对大部分时序场景中近期数据操作频繁、历史数据操作较少的特点,设计了专门的数据分区和负载均衡策略

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

59e09222003ff1a0a49b3d62ab402042.png

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

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

Apache HBase

Apache HBase 的数据文件底层存储于 HDFS(Hadoop Distributed File System)。因此 Apache HBase 的分布式架构分为计算和存储两层。

Apache HBase 在计算层可以基于日志同步实现多集群多活或单集群内 region 多副本 的 replica 机制,在存储层基于 HDFS(Hadoop Distributed File System)实现存储文件的多副本分布式存储。本文主要探讨 Apache HBase 在存储层,即 HDFS 的分布式架构与设计。

ce9d742032ba130b45bc6988f4840cf9.png

  • HDFS 的核心容错和一致性机制依赖于数据块副本(Replication)。每个文件被拆分为多个 Block(数据块),这些数据块会存储在多个 DataNode 上,并且每个数据块会有多个副本(默认情况下是 3 个)。

  • HDFS 使用了基于 Chain Replication 的 Pipelines 机制来保证副本数据之间的一致性。数据会被串行地写入到各个副本中。假设有三个副本,数据会首先写入第一个 DataNode,然后通过管道的方式传递给下一个 DataNode,依次类推。

二者差异

outside_default.png

共识算法灵活性

  • IoTDB 提出并应用了时序数据库界第一个共识协议统一框架。用户可以根据性能、可用性、一致性和存储成本等需求,灵活选择不同的共识算法。

  • HDFS 提供了最小副本数和异步复制等机制加速读写过程,但 HDFS 本质上仍是只有一种共识协议的分布式存储系统,不具备提供多种性能、一致性共识机制的能力,扩展性相对较差。

outside_default.png

分布式架构性能

  • IoTDB 拥有为时序物联网场景定制优化的共识协议,配合数据分区和负载均衡策略,可以为物联网时序数据场景提供非常高的性能。

  • HDFS Pipelines 机制通过管道式的顺序写入方式来保障数据的一致性和高可用性。然而,由于 Pipelines 采用串行复制,它在多副本写入时会带来一定的写入延迟,并且在处理 DataNode 故障时需要动态调整管道,可能会影响性能。此外,网络带宽的消耗和副本管理的复杂性也是它在大规模集群中需要应对的问题。

71b094b1a9d7e18215f127994f379a50.jpeg

Apache IoTDB 共识协议统一框架:用户可以灵活使用不同的 IConsensus 实现

36e48747934e9942e366bf62f301cec6.png

HBase Chain Replication 分布式架构

03

对比方向二:边云同步

Apache IoTDB

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

f3e51d285d07b5c92dc3c0aad65995b5.png

  • 可以自适应选择流式同步和文件(TsFile)同步,可以在保证全量同步的基础上,尽量降低延迟

  • 允许用户实现自定义的流处理逻辑,可以实现对存储引擎数据变更的监听和捕获、完成对变更数据的处理、实现对变形后数据的向外推送等逻辑。

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

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

Apache HBase

Apache HBase 在边云同步能力上并没有针对性的内置功能,主要是因为 HBase 设计之初是为了解决大规模分布式存储和查询问题,主要应用于数据中心或云端的场景,其与 Apache Hive 等大数据栈的连接更为紧密。在端边云同步场景中,HBase 的能力和支持较为有限。

要实现边云同步能力,HBase 需要借助外部框架来进行定制开发。例如,用户可以结合 Apache Flink、Apache Kafka 等流处理框架,将边缘设备的数据实时写入到 HBase 集群中,并通过自定义的同步逻辑实现边缘到云的同步和分析。尽管这种方法在灵活性上较好,但增加了开发和运维的复杂性。

二者差异

outside_default.png

原生数据同步

  • HBase 虽然可以通过其异步复制机制(HBase Replication)实现一定程度上的数据同步。然而,这种复制机制主要用于数据中心之间的复制,并不适合高效的边云同步,延迟可能较大。

  • IoTDB 拥有专为边云环境设计的流处理引擎,数据同步更加实时和高效,玩转数据同步。

outside_default.png

边侧环境适配度

  • HBase 的集群和存储架构需要依赖 HDFS 和 Zookeeper,这意味着它通常需要较为稳定且高性能的网络环境,限制了其在边缘设备中的应用,使其在边缘场景中的适用性有限,难以在网络不稳定、资源有限的边缘环境中高效运作。

  • IoTDB 针对边侧低带宽、长时间断网、小存储等特点进行了大量优化,使得边侧场景可以轻量运行数据同步任务。 

5b32ef5b8238d27c7dc9ae48bc71a5ac.png

Apache IoTDB 端边云场景的数据同步

04

对比方向三:部署易用性

Apache IoTDB

Apache IoTDB 作为新一代的时序数据管理解决方案,致力于通过更轻量级的架构降低部署难度,特别是在资源占用硬件要求上做了大量优化。相比于传统的分布式数据库,IoTDB 能在许多场景中通过单台机器完成海量时序数据的高效写入和查询工作。这意味着即使在数据规模巨大的情况下,IoTDB 也可以通过一台单机就实现高性能数据处理,而不需要复杂的集群部署。

3208dd192a97b63b22d0d774f201739c.jpeg

Apache IoTDB 不依赖任何外部组件,既支持单机也支持分布式:上图为常见的 3C3D 架构

Apache HBase

HBase 是大数据生态体系中的重要一环,用户通过使用 Hadoop、HBase、Zookeeper 等众多开源生态组件,能够搭建一套大规模的分布式集群,从而服务业务数据应用。但与 IoTDB 相比,Apache HBase 的部署则显得复杂得多。HBase 作为一个分布式数据库,需要依赖多个上下游组件,如 Hadoop(用于 HDFS 文件系统)、Zookeeper(用于集群协调)等。因此,HBase 的部署通常是分布式多节点架构,至少需要多个节点来确保高可用性和数据冗余,这导致了较高的硬件需求和运维负担。

165bab4b94235b8b0fcd5e33960fc75a.png

Apache HBase 的分布式架构需要协调 Zookeeper 等众多上下游组件

二者差异

outside_default.png

架构与部署复杂度

  • IoTDB:采用轻量级架构,支持单机部署,适合不需要大规模集群的场景,部署简单且依赖少。

  • HBase:基于分布式架构,依赖 HDFS 和 Zookeeper 等生态组件,通常需要多节点配置,部署复杂度较高。

outside_default.png

硬件需求

  • IoTDB:单机即可支持大规模数据处理,硬件要求较低,适合对资源敏感的 IoT 场景。

  • HBase:需要多个节点以确保高可用性和数据冗余,硬件需求高,适合大规模分布式存储。

outside_default.png

自动化与运维简化

  • IoTDB:提供一键部署工具,运维简便,无需处理复杂组件依赖,减少了管理成本。

  • HBase:需同时管理 HDFS、Zookeeper 和 RegionServer 等多个组件,运维难度较大。

outside_default.png

扩展能力

  • IoTDB:支持动态添加和删除节点,扩展轻量化,便于根据业务需求调整节点数量。

  • HBase:扩展时需综合调优 HDFS、Zookeeper 和 RegionServer,对运维团队的技术要求高。

05

对比方向四:分析与计算能力

HBase 是一个键值存储系统,读写接口较原始,无时间维度的分析接口,并没有专门为时序数据分析提供特定功能,如果需要完成时序数据分析任务,需要与其他大数据分析下游软件如 Apache Spark 进行集成或进行较多的业务代码开发。

HBase 相比, Apache IoTDB 在时序场景下的分析与计算能力上拥有很多特色功能:

1. 支持多种统计聚合,包括 count、max、min、avg、std、sum、first_value、last_value 等常用的计算函数

2. 支持多种时序语义的数据查询,包括按等间隔划分窗口的查询、按某列枚举值划分窗口的查询按照时序记录的连续性划分窗口等特色时序查询能力

3. 支持多种时序数据分析查询,包括数据质量检测、数据画像、异常检测、频域分析、数据匹配、数据修复等查询能力。

4. 支持 AINode 原生机器学习框架,内置包括时序预测、异常检测等类型的算法,同时支持用户加载自身模型直接对数据进行推理,拥有开箱即用的一体化存储和分析方案:安装部署后,可一键进行序列预测。

baf1bbb862fb3c565657b2cf63321f3f.png

06

对比方向五:性能

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

TPCx-IoT 是第一个专门设计用于测量物联网网关系统性能的物联网基准。它可以直接比较不同的软件和硬件解决方案。使用拥有数千个变电站的典型电力供应商的运营模式,TPCx-IoT 为通常从大量设备中,摄取大量数据的商用系统提供可验证的性能、性价比和可用性指标,同时运行实时时间分析查询。其灵活的设计使 TPCx-IoT 能够以技术上严格和直接可比的方式,用于评估广泛的系统拓扑和实施方法。

  • TPCx-IoT 定义了三个主要指标(用户主要关注前两个指标):

1. 性能指标:IoTps = SF/T:性能指标代表网关的有效吞吐能力,其中 SF 是 Scale Factor(摄取的数据量), T 是摄取经过的时间,以秒为单位。

2. 性价比指标:$/kIoTps = 1000∗P / IoTps。性价比指标代表系统在 3 年内的总拥有成本, 其中 P 是 SUT 的总拥有成本。

3. 系统可用日期:TPC 定价规范中定义的可用日期。

  • 所有测试结果公开可查~

基于 Apache IoTDB 的 TimechoDB 在性能(IoTps)上可达 10,671,241,而搭载 Cloudera HBase 2.2.3 on CDP 7.1.4 的 Dell Power Edge R7515 测试结果为 1,617,545,IoTDB 性能约为 HBase 的 6.60 倍

基于 Apache IoTDB 的 TimechoDB 的性价比(Price/kIoTps)为 27.91 USD,而搭载 Cloudera HBase 2.2.3 on CDP 7.1.4 的 Dell Power Edge R7515 测试结果为 329.75 USD,IoTDB 的性价比是 HBase 的 11.81 倍

0947dd789a6e9435b2c6bd4760c30f2c.png

07

总结

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

规上企业应用实例

能源电力:中核武汉|国网信通产业集团|华润电力|大唐先一|上海电气国轩|清安储能|某储能厂商|太极股份

航天航空:中航机载共性|北邮一号卫星

钢铁冶炼:宝武钢铁|中冶赛迪

交通运输:中车四方|长安汽车|城建智控|德国铁路

智慧工厂与物联:PCB 龙头企业|博世力士乐|德国宝马|京东|昆仑数据|怡养科技|绍兴安瑞思

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c++丨STL】vector模拟实现

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 前言 一、vector底层刨析 二、模拟实现 1. 属性、迭代器以及函数声明 2. 功能实现 交换两个容器的内容 构造函数 拷贝构造 赋值重载 析构…

C++中类的默认成员函数

默认成员函数 1.构造函数2.析构函数3.拷贝构造函数4.赋值运算符重载4.1运算符重载4.2赋值运算符重载 #mermaid-svg-oipiwg9stvONvYK0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oipiwg9stvONvYK0 .error-icon{f…

数据编排与ETL有什么关系?

数据编排作为近期比较有热度的一个话题,讨论度比较高,同时数据编排的出现也暗示着数字化进程的自动化发展。在谈及数据编排时,通常也会谈到ETL,这两个东西有相似点也有不同点。 数据编排和ETL(提取、转换、加载&#x…

【SpringCloud】SpringBoot集成Swagger 常用Swagger注解

概述:SpringBoot集成Swagger 常用Swagger注解 导语 相信无论是前端还是后端开发,都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。其实无论是前…

革命性AI搜索引擎!ChatGPT最新功能发布,无广告更智能!

文章目录 零、前言一、ChatGPT最新AI搜索引擎功能操作指导实战1:搜索新闻实战2:搜索天气实战3:搜索体育消息 二、感受 零、前言 大人,时代变了。 最强 AI 助力下的无广告搜索引擎终于问世。我们期待已久的这一刻终于到来了,从今天起,ChatGPT…

基于 CMSIS-PACK 移植Bootloader

基于 CMSIS-PACK 移植 1.准备工作 准备一份基础的裸机源码 (可通过 STM32CubeMx 可视化软件创建也可按照工程项目所需文档手动创建) 工程,如一份 stm32 包含一个支持 printf 的串口初始化代码。 2.安装Pack包 在 MDK 中部署 **MicroBoot **的第一步是获取对应的…

苍穹外卖day09超出配送范围前端不提示问题

同学们在写苍穹外卖项目day09时调用了百度地图api来判断用户地址是否超出配送范围, 但是在黑马官方的课程或资料中,出现这样的问题时只会向用户端的控制台报错并不会提醒用户 如下图: 解决方法: 其实解决方法很简单只需要找到向…

嵌入式linux中PWM控制与实现

大家好,今天主要给大家分享一下,如何使用linux系统里面的PWM的功能,可以控制对应电机的转速。 第一:PWM驱动基本简介 PWM就是脉冲宽度调制。 PWM信号有两个关键术语:频率和占空比,频率指的是开关的速度。占空比就是一个周期内高电平和低电平时间的比例,一个周期内高电…

CUDA系统学习之一软件堆栈架构

一、CPU与GPU体系架构 计算单元分布 CPU: 少量强大的ALU(算术逻辑单元),通常4-8个核心GPU: 大量小型ALU,成百上千个计算核心特点:GPU更适合并行计算,可以同时处理大量数据控制单元(Control) CPU: 较大的控制单元,复杂的…

「QT」几何数据类 之 QPoint 整型点类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

0x00基础算法 -- 0x01 位运算

资料来源:算法竞赛进阶指南活动 - AcWing 1、进制表示 二进制表示:m位二进制中,通常称最低位为第0位,从右到左以此类推,最高位为第m-1位。 常用十六进制表示的数字: 32位补码int(十进制&#xf…

H5移动端预览PDF方法

新建页面 新建一个页面以便去预览对应的pdf 新建完后在 pages.json 文件内去新增对应路由 页面内容 <template><view class"page"><view class"pdf"><view id"demo"></view></view><view class"b…

嵌入式开发之线程

进程 vs 线程 进程在切换时系统开销大很多操作系统引入了轻量级进程LWP同一进程中的线程共享相同地址空间Linux不区分进程、线程(都会创建:task_strcut)线程特点: 通常线程指的是共享相同的地址空间的多个任务,使用多线程的好处 大大提高了任务切换的效率避免了额外的TLB…

【SQL实验】更新操作

完整代码在文章末尾【代码是自己的解答&#xff0c;并非标准答案&#xff0c;也有可能写错&#xff0c;文中可能会有不准确或待完善之处&#xff0c;恳请各位读者不吝批评指正&#xff0c;共同促进学习交流】 将素材“图书管理”文件下载到本地&#xff0c;并将其还原到SQL SER…

Hadoop(HDFS)

Hadoop是一个开源的分布式系统架构&#xff0c;旨在解决海量数据的存储和计算问题&#xff0c;Hadoop的核心组件包括Hadoop分布式文件系统&#xff08;HDFS&#xff09;、MapReduce编程模型和YARN资源管理器,最近需求需要用到HDFS和YARN。 文章目录 HDFS优缺点HDFS的读写原理 常…

Spire.PDF for .NET【页面设置】演示:获取 PDF 文件中的页数

计算 PDF 文件中的页数对于各种目的都至关重要&#xff0c;例如确定文档长度、组织内容和评估打印要求。除了使用 PDF 查看器了解页数信息外&#xff0c;您还可以通过编程自动执行该任务。在本文中&#xff0c;您将学习如何使用C#通过Spire.PDF for .NET获取 PDF 文件中的页数。…

stm32不小心把SWD和JTAG都给关了,程序下载不进去,怎么办?

因为想用STM32F103的PA15引脚&#xff0c;调试程序的时候不小心把SWD和JTAD接口都给关了&#xff0c;先看下罪魁祸首 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关掉JTAG&#xff0c;不关SWGPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//关掉SW&am…

vue3使用element-plus,树组件el-tree增加引导线

vue3使用element-plus&#xff0c;树组件el-tree增加引导线 vue3项目element-plus&#xff0c;树组件el-tree增加引导线 element-plus组件库的el-tree样式 因为element的样式不满足当前的的需求&#xff0c;UI图&#xff0c;所以对el-tree进行增加了引导线 修改样式如下&am…

pytest简单使用

一&#xff1a;Mark 1.注册标记 在项目根目录下创建固定名为 pytest.ini 的配置文件&#xff0c;文件格式需要加上 [pytest] &#xff0c;然后通过 markers 注册自定义标记 2.贴上标记 通过pytest加上装饰器&#xff0c;然后pytest.mark.XX配置自定义的标记&#xff0c;一个…

【C++】——多态

一.多态的概念 1.多态 多态(polymorphism)的概念&#xff1a;通俗的来说&#xff0c;就是多种形态。多态分为静态多态(编译时多态)和动态多态(运行时多态)&#xff0c;而我们讲的多态大部分都是动态多态。 静态多态主要就是我们前面了解过的函数模板和函数重载&#xff0c;它…