IoTDB是一个用 Java编写的面向列的开源时序数据库(TSDB)管理系统。
Apache IoTDB是清华大学软件学院王建民教授团队发起的项目。2011年,团队在一个海量机器数据管理的项目中选择使用开源NoSQL技术代替Oracle ,并注意到NoSQL在工业物联网(IIoT)场景中的不足。团队开始开发数据管理系统,并于2016年3月正式提出TsFile,一种针对时间序列数据优化的柱状紧凑文件存储格式。随后在GitHub上开源了源代码。随后,团队基于TsFile开始开发支持实时读写和分析的工业物联网数据库IoTDB。
Web1.0:静态网页时代,是互联网的早期阶段,互联网主要由静态网页组成,网站内容的制作和发布主要由开发人员和内容提供者掌控。用户的角色主要是被动的浏览者,只能从网站获取信息,无法主动参与内容的创作和分享。
Web2.0:强调用户参与和互动,网站不再只是信息的发布者,而是为用户提供平台和工具,使用户可以生成、共享和讨论内容。网站更加动态、社交化,具有更强的用户个性化和交互性。
本文讲详细介绍IoTDB这一产品可能会涉及的基础概念,包括什么是NoSQL,为什么需要NoSQL,NoSQL中的时序数据库是什么以及其中涉及到的专业词汇,最后我们讲根据这些,来讲解IoTDB是什么,它的优势又是什么。
目录
NoSQL
定义
non-SQL / non-relational ,一种广义上的数据库分类,用于描述那些不遵循传统关系型数据库结构和查询语言(如SQL)的数据库管理系统。
关系型数据库的局限性(NoSQL产生的原因)
-
固定的表结构:关系型数据库需要预先定义表的结构(列和数据类型),并且表之间需要建立严格的关系约束。这限制了数据库的灵活性,难以应对数据结构频繁变化或半结构化数据的存储需求。
-
扩展性和性能限制:关系型数据库在面对大规模数据处理和高并发访问时,往往面临扩展性和性能瓶颈。传统的关系型数据库难以轻松实现水平扩展,增加更多的节点来应对高负载情况。
-
复杂查询性能:对于复杂的查询操作(如多表关联、嵌套查询等),关系型数据库的性能可能受到影响。由于需要执行复杂的关系代数操作和连接操作,这些查询可能需要较长的执行时间。
-
存储冗余:关系型数据库中的数据往往以规范化形式存储,这会导致数据冗余问题。当需要同时访问多个表的数据时,可能需要进行多次关联操作,导致性能下降。
-
不适合海量数据:当数据量达到海量级别时,传统的关系型数据库可能无法有效存储和管理这些数据。维护大规模的索引和数据一致性可能成为挑战。
-
高昂的成本:关系型数据库往往需要昂贵的商业许可证,同时还需要专业人员来进行数据库设计、管理和维护,这增加了使用关系型数据库的成本。
时序数据库
定义
随时间不断产生的一系列数据,简单来说,就是带时间戳的数据
时间戳(Timestamp):代表数据产生的时间点,可以写入时指定,也可由系统自动生成
重要性体现
传感器网络和物联网的兴起使得时序数据成为了重要的数据类型,主要可以体现在以下几点上
-
数据生成和收集:传感器网络和物联网的兴起导致了大量传感器设备的部署,这些设备可以实时收集和生成各种类型的时序数据。传感器网络可以收集环境、设备状态、人体生理参数等多种实时数据,而物联网连接了各种智能设备,如智能家居、智能工厂等,产生了大量的实时时序数据。
-
数据规模和复杂性:传感器网络和物联网的普及使得时序数据的规模和复杂性迅速增加。大量传感器节点和物联设备同时生成的时序数据需要高效的存储和处理,以应对海量数据的挑战。此外,时序数据的复杂性也增加,因为不同类型的传感器和设备可能具有不同的数据格式、频率和精度。
-
实时性和低延迟要求:传感器网络和物联网的应用通常需要实时的数据处理和决策。例如,智能交通系统需要实时监测车辆流量和交通状态;智能健康监护设备需要实时监测患者的生理参数。这些应用对时序数据的低延迟获取、传输和处理提出了更高的要求。
-
数据质量和准确性:时序数据在传感器网络和物联网中的应用通常需要具备较高的质量和准确性。传感器设备可能受到噪声、干扰或设备故障的影响,导致数据的不准确性。因此,需要采取有效的数据清洗、校准和异常检测等技术,以提高时序数据的质量和准确性。
-
数据存储和处理:由于传感器网络和物联网产生的时序数据量巨大,传统的存储和处理方法可能无法满足需求。因此,需要高效的时序数据库和数据处理技术,能够存储、查询和分析海量的时序数据,并支持实时的数据处理和决策。
IoTDB
如前文所述,IoTDB是一个时序数据库管理系统,因此它会拥有时序数据库所具备的特点,接下来讲详细介绍IoTDB的特点及实现。
架构
IoTDB 套件由若干个组件构成,共同形成“数据收集-数据写入-数据存储-数据查询-数据可视化-数据分析”等一系列功能。
如下图展示了使用 IoTDB 套件全部组件后形成的整体应用架构。下文称所有组件形成 IoTDB 套件,而 IoTDB 特指其中的时间序列数据库组件。
特点
-
灵活的部署方式
-
云端一键部署
-
终端解压即用
-
终端-云端无缝连接(数据云端同步工具)
-
-
低硬件成本的存储解决方案
-
高压缩比的磁盘存储(10 亿数据点硬盘成本低于 1.4 元)
-
-
目录结构的时间序列组织管理方式
-
支持复杂结构的智能网联设备的时间序列组织
-
支持大量同类物联网设备的时间序列组织
-
可用模糊方式对海量复杂的时间序列目录结构进行检索
-
-
高通量的时间序列数据读写
-
支持百万级低功耗强连接设备数据接入(海量)
-
支持智能网联设备数据高速读写(高速)
-
以及同时具备上述特点的混合负载
-
-
面向时间序列的丰富查询语义
-
跨设备、跨传感器的时间序列时间对齐
-
面向时序数据特征的计算
-
提供面向时间维度的丰富聚合函数支持
-
-
极低的学习门槛
-
支持类 SQL 的数据操作
-
提供 JDBC(Java DataBase Connectivity) 的编程接口
-
完善的导入导出工具
-
-
完美对接开源生态环境
-
支持开源数据分析生态系统:Hadoop、Spark
-
支持开源可视化工具对接:Grafana
-