一、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類型的時間戳比較合適。
原創文章,作者:GMVNG,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/315639.html