一、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类型的时间戳比较合适。