QuestDB簡介
一、概述
在本教程中,我們將簡要介紹QuestDB ,這是一個用於時間序列和事件數據的面向列的關係數據庫。然後,我們將學習如何將數據從 Java 應用程序發送到數據庫。
2.什麼是QuestDB?
QuestDB 是一個快速的開源時間序列數據庫,具有高性能攝取和 SQL 分析。簡而言之,QuestDB 在管理基於時間的數據的高吞吐量時解決了困難,並使通過簡單的 SQL 查詢分析攝取的數據變得容易。
它與 InfluxDB 線路協議、PostgreSQL 有線協議和 HTTP REST API 兼容。此外,它還有一個漂亮的 Web 控制台應用程序,我們可以使用它直接與數據庫交互。然而,我們將只關注InfluxDB Line Protocol ,這是一種文本格式,包括測量、標籤、字段和每個數據點的時間戳。在這種情況下,我們將使用一個易於使用的 Java 客戶端庫來發送數據並抽像出其中的大部分細節。
QuestDB 的一些優點是:
- 它易於使用並提供高性能
- 它使用時間序列數據的關係模型
- 數據的攝取是非常可擴展的
- 提供即時一致性
接下來,我們將使用 Docker 容器創建一個本地數據庫實例。或者,我們可以為雲中不需要維護的完全託管實例付費。
三、安裝
讓我們開始使用使用 docker 安裝的容器化版本:
$ docker run -p 9000:9000 \
-p 9009:9009 \
-p 8812:8812 \
-p 9003:9003 \
-v "$(pwd):/var/lib/questdb" \
-d --name questdb questdb/questdb:7.0.0
這將在我們的機器上創建一個 QuestDB 的本地實例。要檢查它是否啟動,我們可以訪問暴露在端口 9000 的 Web 應用程序:
QuestDB 網絡應用程序的用戶界面
或者,QuestDB 還在端口 9003 公開了一個端點,我們可以使用它來檢查數據庫的健康狀況。
4.在Java項目中使用QuestDB
4.1.連接到數據庫
首先,我們必須從我們的應用程序中與數據庫對話。為此,QuestDB 提供了幾種在以下端口上公開的連接方法:
- InfluxDB線路協議:9009端口
- PostgreSQL 有線協議:端口 8812
- HTTP REST API:端口 9000
- Web 控制台:端口 9000
例如,我們將只使用 InfluxDB 線路協議,這是推薦的方法,並使用Java 客戶端插入數據:
<dependency>
<groupId>org.questdb</groupId>
<artifactId>questdb</artifactId>
<version>7.0.0</version>
</dependency>
然後,我們將向數據庫發送一些數據。
4.2.發送數據
簡而言之,我們想要創建一個溫度跟踪系統,將數據發送到我們的數據庫到sensors
表。因此,我們需要創建一個向構建器提供數據庫正確地址的Sender
對象:
Sender sender = Sender.builder().address("localhost:9009").build();
Sender 是可關閉的,因此我們在 try-with 結構中使用它。
然後,我們可以參考sensors
表並通過為每一列提供值來簡單地添加數據:
sender.table(SENSORS_TABLE_NAME)
.stringColumn("id", "KTC")
.stringColumn("name", "Kitchen temperature (Celsius)")
.doubleColumn("currentValue", 20)
.atNow();
特別是,我們不需要事先創建表,因為庫會根據我們發送到數據庫的數據來創建表。
4.3.查詢數據
一旦我們有了一些數據,我們就可以在 Web 應用程序上使用 SELECT 語句來查詢數據。例如,我們可以使用以下方法查看廚房傳感器的讀數:
SELECT * from 'sensors' WHERE id = 'KTC'
我們可以在 Web 應用程序中看到這一點:
4.4.刪除行
QuestDB 不允許刪除單行,但可以通過創建沒有所需行的表副本、刪除表,然後將副本重命名為原始表名來解決此問題。
雖然可以使用此解決方法,但我們建議盡可能避免使用它,因為它的成本很高。
5。結論
在本文中,我們學習瞭如何安裝和連接到 QuestDB、執行查詢以及從我們的應用程序與其交互。
本文中的所有代碼示例都可以在 GitHub 上找到。