您的位置:

IoTDB数据库详解

一、IoTDB数据库怎么念

IoTDB是指互联网物联网设备管理数据库,发音为[aiəʉti: di:bi:]。

二、IoTDB数据库源码分析

IoTDB数据库使用Java语言编写,是一个开源的、高性能的、稳定的、可靠的、分布式的时间序列数据库管理系统,主要针对大数据场景,满足业务发展需要,可以存储海量的时间序列数据,支持多种常见的数据格式。

IotDB架构采用分层结构,如下图所示:

┌───────────────────┐                  
│  IoTDB Cluster   │                  
├───────────────────┤                  
│    ZooKeeper      │                  
└─────────────┬───┬─┘                  
              │   │         ┌────────────────────────┐
┌─────────────▼───▼───┐     │    Query & Storage UI   │
│ Query and Storage  │     ├────────────────────────┤
│     Engine        ├──►  │Data API (Sync & ASync)   │
└───────────────────┘     ├────────────────────────┤
                           │    Schema API            │
                           └────────────────────────┘

在IoTDB的架构中,ZooKeeper作为分布式协调服务,提供了协调服务,有利于IoTDB的分布式集群管理。

Query and Storage Engine是IoTDB的核心部分,提供SQL查询引擎和存储引擎。SQL查询引擎支持多种查询语句,存储引擎支持多种存储格式,如BYTE, SHORT, INT, LONG, BOOLEAN, FLOAT, DOUBLE, TEXT, BSON, , BITMAP, VECTOR, ENUMS等。

IoTDB数据库的API包括Data API和Schema API,Data API支持同步和异步操作,Schema API是IotDB数据库内置了数据模型,确保存储的数据正确性。

三、IoTDB数据库双活部署

Real time处理和异地容灾需求下,IoTDB数据库需要双活部署,在数据一致性和数据可用性之间平衡。

因此,IoTDB推荐的双活部署架构如下:

┌───────────────────┐                  
│   IoTDB Cluster 1 │                  
├───────────────────┤                  
│    ZooKeeper      │                  
└─────────────┬───┬─┘                  
              │   │         ┌────────────────────────┐
┌─────────────▼───▼───┐     │    Query & Storage UI 1 │
│ Query and Storage  │     ├────────────────────────┤
│     Engine        ├──►  │Data API (Sync & ASync)   │
└───────────────────┘     ├────────────────────────┤
                           │    Schema API            │
                           └────────────────────────┘
                                                    .
                                                    .
                                                    .
┌───────────────────┐                  
│   IoTDB Cluster n │                  
├───────────────────┤                  
│    ZooKeeper      │                  
└─────────────┬───┬─┘                  
              │   │         ┌────────────────────────────┐
┌─────────────▼───▼───┐     │ Query & Storage UI (n-1)   │
│ Query and Storage  │     ├────────────────────────────┤
│     Engine        ├──►  │ Data API (Sync & ASync) n-1  │
└───────────────────┘     ├────────────────────────────┤
                           │    Schema API               │
                           └────────────────────────────┘

主要实现思路是:构建一个集群,每个集群都有自己的数据库和ZooKeeper实例。ZooKeeper实例用于管理集群成员的信息,而数据则由IoTDB存储引擎存储。

四、数据库dblink

IoTDB的dblink是它最强大的功能之一,因为它可以把不同类型、布局、格式和模式的数据集成在一起。

使用dblink需要配置连接参数,如下所示:

CREATE WRAPPER dblink_wrapper 
  DRIVER = 'org.apache.iotdb.jdbc.IoTDBDriver'
  URL_SPEC 'iotdb://localhost:6667/';

通过IoTDB驱动,可以访问IotDB上的数据,如下所示:

SELECT * FROM TABLE (dblink('iotdb', 'SELECT * FROM root.group1.device1.sl*') 
AS t (timestamp INT, measurement FLOAT));

五、IoTDB数据库基本操作

IoTDB数据库支持多种基本操作,如下所示:

1、创建时间序列存储空间

CREATE TIMESERIES root.group1.device1.temperature WITH DATATYPE=FLOAT,ENCODING=RLE;

2、插入数据

insert into root.group1.device1(timestamp, temperature) values(1587466433101, 18.1)

3、查询数据

select temperature from root.group1.device1 where time > 1587466433100 and time <1587468433101

4、删除时间序列存储空间

delete timeseries root.group1.device1.temperature

六、IoTDB数据库怎么访问

IoTDB数据库有多种方式可以进行访问,如下所示:

1、IoTDB-client

基于很小的“SQL语句”以及二进制协议构建一个IoTDB客户端,从而通过IoTDB进行数据读写。

2、JDBC

IoTDB提供官方的JDBC驱动程序,以便与主流的数据分析和处理工具(如SQL Workbench,Jupyter Notebook,SQL client)进行交互。

3、API

IoTDB提供Data API和Schema API,可以编写Java程序从IoTDB中读取和写入数据。

七、IoTDB数据库单表最大记录

IoTDB数据库的单表最大记录数量是按照存储节点来定义的,每个维度上最大可以存储2^64个数据点,即使是在单个节点的聚合数据操作中也能够保持易于扩展和高性能。因此,IoTDB的单表最大记录数量非常大。

八、数据库dateTime类型选取

在IoTDB数据库中,数据类型的选择对于性能的影响是非常大的,时间戳通常被设计为有单独的字段类型,可以使用long、datetime或timestamp类型。这些时间戳类型都可以用于索引,但是它们在存储格式和索引支持方面不同。

选择时间戳类型的另一个重要因素是性能。与标准时间戳不同,使用long作为时间戳的类型会导致更少的空间占用,并且更容易支持高级索引。

因此,在IoTDB数据库中,使用long类型的时间戳比较合适。