什麼是時序資料庫
時序資料
所有時序資料就是基於時間而產生的一系列資料,在有時間座標的座標體系中,按照時間將這些資料點連成線,可以揭示其趨勢與規律,如果對這些時序資料加以分析處理,可以用以訓練機器學習模型,從而實現對未來的預測與預警。
時序資料庫
瞭解了時序資料,時序資料庫也就不難理解,就是用來存放時序資料的資料庫。因為時序資料具有實時性與體量大的特點,所有時序資料庫也就必須具備寫入快的特性,同時為了方便查詢,也就必須具備持久化與多維度聚合查詢的特性。
核心概念
資料點(point)
度量(measurement)
時間戳(timestamp)
度量欄位(field)
標籤(tag)
在 Mac 系統中安裝 influxDB 還是比較簡單的
安裝
- 在 Mac OS 系統中可以通過
brew
來進行安裝
brew install influxdb
複製程式碼
- 安裝成功後,我們可以註冊開機啟動
ln -sfv /usr/local/opt/influxdb/*.plist ~/Library/LaunchAgents
複製程式碼
更多關於
launchd
可以檢視 Mac OSX的開機啟動配置
啟動
我們可以通過 launchctl
來使用上面非同步新增的定時任務來啟動
launchctl load load ~/Library/LaunchAgents/homebrew.mxcl.influxdb.plist
複製程式碼
更多關於
lanuchctl
可以檢視 Mac中的定時任務利器:launchctl
也可以直接讀取安裝好的配置檔案來啟動
influxd -config /usr/local/etc/influxdb.conf
複製程式碼
啟動後,influxdb 會監聽兩個埠:
-
8086 用來提供 client/server 的互動(通過 http api)
-
8088 用來提供備份和還原的 RPC 服務使用
啟動好 influxdb
後,我們就可以在終端通過 influx
命令來與資料庫來進行互動了 (預設連線到 8086 埠)
玩起來
到目前為止沒有還沒有對 influxDB 有更深入的瞭解,什麼 measurement
, 什麼 point
, 但是就算如此,我們也可以先玩起來,看看 influxdb 到底是何物?
連線 influxdb OSS
influx -precision rfc3339
複製程式碼
-precision
用來自定 timestamp 的格式標準rfc3339
(YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ)
其實現在我們就可以按照 influxQL
語法,輸入查詢語句與 influx 資料儲存服務進行互動了。
建立資料庫
CREATE DATABASE logdb
複製程式碼
這裡我們將建立一個名叫
logdb
的資料庫, 需要注意的是在 cli 中操作成功後並不會有什麼反饋,但是失敗了肯定會有提示,用官方的描述來形容就是沒有訊息就是好訊息
。
檢視資料庫
SHOW DATABASES
複製程式碼
結果如下圖
其中
logdb
就是我們建立的資料庫,_internal
則是 influxDB 內部使用的資料庫。
選擇資料庫
influxDB 執行的每條語句都必須指定一個固定的資料庫作為其執行的上下文,所以我們要不就是在編寫每條語句的時候都顯示的選擇一個資料庫,要不就先選擇一個資料庫後續的語句都預設在這個資料庫上執行操作。
USE logdb
複製程式碼
執行結果如下:
打臉總是來的那麼快,上面還說任何操作成功後都沒有反饋 ~~ 也許 USE 指令是一個特例吧 ~~
概念實踐
從前面的概念介紹我們可以瞭解到,influxdb 是通過時間序列(time series)
來組織儲存資料的。那這個時間序列到底長什麼樣呢?
Time series
其實就是一個概念,是儲存在 influxdb 中所有資料集合的概念,可以包含 0 ~ ∞ 條資料,在 influxDB 中一條資料又叫一條 point
。
point
一條 point 代表了一個度量維度的一組雜湊樣本 measurement
, 所以 point = measurement + time
measurement 度量維度
一個 measurement
由至少一個 key-value 對的 field
和 0 ~ ∞ 個 tag
組成。
-
field
表示都是measurement
的一個具體的值。 -
tag
表示的是measurement
的後設資料,具體在查詢的時候的過濾條件。
所以 point 的組成語法如下
<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
複製程式碼
舉個例子?
實踐 insert & select
接下來就是開始實踐 ~
插入資料
INSERT cpu,host=serviceA,region=us_west value=0.64
複製程式碼
結果如下:
注意空格在 influxql 中是具有特殊意義的,所以,在書寫時
,
逗號後面是不可以再包含空格的,上圖第一次執行插入的時候cpu,
後面有一個空格,所以插入失敗。
從上面的執行語句我們可以看到,我們在執行的時候並沒有新增任何時間戳,知識後資料庫是會為我們自動插入執行資料庫的系統的本地時間戳的。
查詢資料
SELECT "host", "region", "value" from cpu
複製程式碼
執行結果如下:
OK! 大功告成 ~ 接下來我們就可以開始學習 influxQL 的語法,進行更多高階操作了 ~