web-dev-qa-db-ja.com

InfluxDBでフィールドとタグのどちらを選択するかを理解する

InfluxDBスキーマ を設計するときに、フィールドとタグのどちらにデータを格納するかを選択するための良いルールと例は何ですか?

私が持っているもの これまでに見つかった は:

時間とともに変化する測定値はフィールドであり、測定値に関するメタデータはタグである必要があります

タグとフィールドは、事実上、テーブルの列です。タグにはインデックスが付けられますが、フィールドにはインデックスが付けられません

非常に多様で、通常はWHERE句の一部ではない値がフィールドに入力されます

InfluxQL関数で使用する場合は、フィールドにデータを保存します

UUID、ハッシュ、ランダム文字列などの可変性の高い情報を含むタグは、データベースで大量のシリーズにつながります。高いシリーズのカーディナリティは、多くのデータベースワークロードにおけるメモリ使用量の主な要因です。

しかし、eコマースアプリケーションに注文を保存するとします。注文ID、販売価格、通貨です。

  • 注文IDはタグにする必要がありますか、それともフィールドにする必要がありますか?
  • 通貨はタグかフィールドか?
5
Dan Dascalescu

注文と通貨の両方をタグにすることをお勧めします。おそらく、WHERE order = orderidまたはWHERE currency = currencyidのようなクエリを実行する必要があるためです。この場合、順序と通貨をタグとして作成すると、暗黙的にインデックスが作成されるため、利点があります。

一般的に言えば、最初にアプリケーションがデータベースで実行するすべてのクエリを書き留めてから、タグの内容を確認します

2
0x2207

fieldsはデータであり、tagsはメタデータであるというチュートリアルを読んだだけです。それは非常に直感的な定義です。

この例には、pressureおよびtemperatureフィールドと、weather stationタグ。繰り返しになりますが、非常に明確で説明と完全に一致しています。

残念ながら、pressureまたはtemperatureでクエリを実行すると、 気象ステーションではなく、フィールドtag指定を囲んでいます。つまり、fieldおよびtagに提供されている定義は無意味です。

簡単な解決策は、フィールドにインデックスを付けるかどうかを指定することです。インデックスが付けられたフィールドはtagsと呼ばれます。フィールドのインデックスを作成する必要がある場合は、tagを使用します(たとえば、クエリ速度を大幅に向上させるため)。

1
Rick O'Shea