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類型的時間戳比較合適。

原創文章,作者:GMVNG,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/315639.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GMVNG的頭像GMVNG
上一篇 2025-01-09 12:13
下一篇 2025-01-09 12:13

相關推薦

  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • Think-ORM數據模型及數據庫核心操作

    本文主要介紹Think-ORM數據模型建立和數據庫核心操作。 一、模型定義 Think-ORM是一個開源的ORM框架,用於簡化在PHP應用中(特別是ThinkPHP)與關係數據庫之…

    編程 2025-04-27
  • 如何使用Python將CSV文件導入到數據庫

    CSV(Comma Separated Values)是一種可讀性高、易於編輯與導入導出的文件格式,常用於存儲表格數據。在數據處理過程中,我們有時需要將CSV文件導入到數據庫中進行…

    編程 2025-04-27
  • Python批量導入數據庫

    本文將介紹Python中如何批量導入數據庫。首先,對於數據分析和挖掘領域,數據庫中批量導入數據是一個必不可少的過程。這種高效的導入方式可以極大地提高數據挖掘、機器學習等任務的效率。…

    編程 2025-04-27
  • Activiti 6自動部署後不生成數據庫act_hi_*的解決方法

    本文將從多個方面詳細闡述Activiti 6自動部署後不生成數據庫act_hi_*的問題,並提供對應的代碼示例。 一、問題分析 在使用Activiti 6部署流程後,我們發現act…

    編程 2025-04-27
  • Python更新數據庫數據

    Python更新數據庫數據是一個非常實用的功能。在工作中,我們經常需要從外部獲取數據,然後將這些數據保存到數據庫中,或者對現有數據庫中的數據進行更新。Python提供了許多庫和框架…

    編程 2025-04-27

發表回復

登錄後才能評論