InfluxDBスキーマ を設計するときに、フィールドとタグのどちらにデータを格納するかを選択するための良いルールと例は何ですか?
私が持っているもの これまでに見つかった は:
時間とともに変化する測定値はフィールドであり、測定値に関するメタデータはタグである必要があります
タグとフィールドは、事実上、テーブルの列です。タグにはインデックスが付けられますが、フィールドにはインデックスが付けられません
非常に多様で、通常はWHERE句の一部ではない値がフィールドに入力されます
InfluxQL関数で使用する場合は、フィールドにデータを保存します
UUID、ハッシュ、ランダム文字列などの可変性の高い情報を含むタグは、データベースで大量のシリーズにつながります。高いシリーズのカーディナリティは、多くのデータベースワークロードにおけるメモリ使用量の主な要因です。
しかし、eコマースアプリケーションに注文を保存するとします。注文ID、販売価格、通貨です。
注文と通貨の両方をタグにすることをお勧めします。おそらく、WHERE order = orderidまたはWHERE currency = currencyidのようなクエリを実行する必要があるためです。この場合、順序と通貨をタグとして作成すると、暗黙的にインデックスが作成されるため、利点があります。
一般的に言えば、最初にアプリケーションがデータベースで実行するすべてのクエリを書き留めてから、タグの内容を確認します
fieldsはデータであり、tagsはメタデータであるというチュートリアルを読んだだけです。それは非常に直感的な定義です。
この例には、pressureおよびtemperatureフィールドと、weather stationタグ。繰り返しになりますが、非常に明確で説明と完全に一致しています。
残念ながら、pressureまたはtemperatureでクエリを実行すると、 気象ステーションではなく、フィールドとtag指定を囲んでいます。つまり、fieldおよびtagに提供されている定義は無意味です。
簡単な解決策は、フィールドにインデックスを付けるかどうかを指定することです。インデックスが付けられたフィールドはtagsと呼ばれます。フィールドのインデックスを作成する必要がある場合は、tagを使用します(たとえば、クエリ速度を大幅に向上させるため)。