Schema
了解如何在 InfluxDB 中的欄位和標籤之間進行選擇
在設計InfluxDB 模式時,如何在欄位和標籤中儲存數據之間進行選擇有哪些好的規則和範例?
到目前為止我發現的是:
隨時間變化的度量應該是一個欄位,有關度量的元數據應該在標籤中
標籤和欄位實際上是表中的列。標籤被索引,欄位沒有
高度變異且通常不屬於 WHERE 子句的值被放入欄位中
如果您計劃將數據與 InfluxQL 函式一起使用,請將數據儲存在欄位中
包含高度可變資訊(如 UUID、雜湊和隨機字元串)的標籤將導致數據庫中出現大量系列,俗稱高系列基數。高系列基數是許多數據庫工作負載高記憶體使用的主要驅動因素。
但是,假設您在電子商務應用程序中儲存已完成的訂單:訂單 ID、銷售價格、貨幣。
- 訂單 ID 應該是標籤還是欄位?
- 貨幣應該是標籤還是欄位?
我剛剛閱讀了一個教程,說欄位是數據,標籤是元數據。這是一個非常直覺的定義。
該範例具有壓力和溫度場以及氣象站標籤。再一次,水晶般清晰,完全符合描述。
不幸的是,他們接著說,如果您查詢的是壓力或溫度而不是氣象站,您應該翻轉欄位和標籤名稱。換句話說,為欄位和標籤提供的定義是沒有意義的。
簡單的解決方案是規定欄位可以被索引或不被索引。被索引的欄位稱為標籤。當您需要索引欄位時使用標籤(例如,顯著提高查詢速度)。
我建議訂單和貨幣都是標籤。因為您可能需要進行諸如 WHERE order = orderid 或 WHERE currency = currencyid 之類的查詢。在這種情況下,將訂單和貨幣作為標籤具有優勢,因為它們將被隱式索引。
一般來說,首先寫下你的應用程序將在數據庫上執行的所有查詢,然後你會看到應該是什麼標籤