Schema

了解如何在 InfluxDB 中的欄位和標籤之間進行選擇

  • April 5, 2021

在設計InfluxDB 模式時,如何在欄位和標籤中儲存數據之間進行選擇有哪些好的規則和範例?

到目前為止我發現的是:

隨時間變化的度量應該是一個欄位,有關度量的元數據應該在標籤中

標籤和欄位實際上是表中的列。標籤被索引,欄位沒有

高度變異且通常不屬於 WHERE 子句的值被放入欄位中

如果您計劃將數據與 InfluxQL 函式一起使用,請將數據儲存在欄位中

包含高度可變資訊(如 UUID、雜湊和隨機字元串)的標籤將導致數據庫中出現大量系列,俗稱高系列基數。高系列基數是許多數據庫工作負載高記憶體使用的主要驅動因素。

但是,假設您在電子商務應用程序中儲存已完成的訂單:訂單 ID、銷售價格、貨幣。

  • 訂單 ID 應該是標籤還是欄位?
  • 貨幣應該是標籤還是欄位?

我剛剛閱讀了一個教程,說欄位是數據,標籤是元數據。這是一個非常直覺的定義。

該範例具有壓力溫度場以及氣象站標籤。再一次,水晶般清晰,完全符合描述。

不幸的是,他們接著說,如果您查詢的是壓力溫度而不是氣象站,您應該翻轉欄位標籤名稱。換句話說,為欄位標籤提供的定義是沒有意義的。

簡單的解決方案是規定欄位可以被索引或不被索引。被索引的欄位稱為標籤。當您需要索引欄位時使用標籤(例如,顯著提高查詢速度)。

我建議訂單和貨幣都是標籤。因為您可能需要進行諸如 WHERE order = orderid 或 WHERE currency = currencyid 之類的查詢。在這種情況下,將訂單和貨幣作為標籤具有優勢,因為它們將被隱式索引。

一般來說,首先寫下你的應用程序將在數據庫上執行的所有查詢,然後你會看到應該是什麼標籤

引用自:https://dba.stackexchange.com/questions/163292