すべてのプロダクト
Search
ドキュメントセンター

Lindorm:データモデルの作成

最終更新日:Mar 18, 2025

このトピックでは、LindormTSDB を使用してデータモデルを作成する方法について説明します。

Lindorm 時系列データベースの作成

Lindorm インスタンスを作成すると、default という名前のデータベースがインスタンスに自動的に作成されます。デフォルトでは、インスタンスに書き込まれたデータはこのデータベースに格納されます。 default データベースは削除できません。

LindormTSDB では、複数のデータベースを作成できます。異なるデータベースに格納されているデータは物理的に分離されています。異なるデータベースに対して、異なるデータの有効期間(TTL)、パーティション間隔、ホットデータとコールドデータの境界を設定することもできます。データベースの作成方法の詳細については、「CREATE DATABASE」をご参照ください。

  • DB1 という名前のデータベースを作成し、DB1 のデータが期限切れにならないように指定します。

    CREATE DATABASE DB1;
  • DB2 という名前のデータベースを作成し、DB2 のデータ TTL を 60 日に設定します。

    CREATE DATABASE DB2 WITH (ttl=60);
  • DB3 という名前のデータベースを作成し、DB3 のデータ TTL を 60 日、ホットデータとコールドデータの境界を 30 日に設定します。

    CREATE DATABASE DB3 WITH (cold_boundary=30, ttl=60);
    説明
    • データ TTL とホットデータとコールドデータの境界は日単位で測定されます。

    • ホットデータとコールドデータの境界の値は、データ TTL の値よりも小さくする必要があります。

時間に基づいてデータベースをパーティション化する

LindormTSDB データベースを時間ごとにパーティション化できます。異なる時間範囲内のデータは、異なるパーティションに格納されます。各パーティションには、時系列データと時系列のインデックスが含まれています。

定期的な時系列を作成し、多数の時系列が生成される場合は、同じパーティションのインデックスが大きくなりすぎないように、データベースを時間ごとにパーティション化することをお勧めします。デフォルトのパーティション間隔は 30 日です。パーティション間隔を 7 日または 30 日に設定することをお勧めします。時間に基づいてデータベースをパーティション化する方法の詳細については、「CREATE DATABASE」をご参照ください。

データベース内のデータをクエリする場合、指定された時間範囲内のデータが格納されているパーティションのみがクエリされます。

  • DB4 という名前のデータベースを作成し、パーティション間隔を 30 日に設定します。

    CREATE DATABASE DB4 WITH (partition_interval=30);
  • 既存のデータベースの場合、partition_interval パラメーターを変更することで、パーティション間隔を変更できます。

    ALTER DATABASE DB4 WITH (partition_interval=60);
    重要

    データベースのパーティション間隔を変更した後、新しいパーティション間隔はすぐに有効になりません。パーティション間隔が変更されると、LindormTSDB は、データが現在のパーティションに書き込まれた最後の日をパーティションの終了時刻として指定し、その日の後にデータベースに書き込まれたデータを格納するための新しいパーティションを作成します。新しいパーティション間隔は、間隔が変更された後に作成されたパーティションに対してのみ有効になります。既存のパーティションのパーティション間隔は変更されません。

    たとえば、データベース DB4 のパーティション間隔が 30 日から 60 日に変更されたとします。間隔が変更された時点で、50 日以内のデータは、DB4 内の Partition1 と Partition2 という名前の 2 つのパーティションに個別に格納されています。 Partition1 は、1 日目から 30 日目までに DB4 に書き込まれたデータを格納します。 Partition2 は、31 日目から 50 日目までに DB4 に書き込まれたデータを格納します。パーティション間隔が変更された後、51 日目以降に DB4 に書き込まれたデータは、パーティション間隔が 60 日である新しいパーティションに書き込まれます。 Partition1 と Partition2 のパーティション間隔は変更されません。

ホットデータとコールドデータの境界を指定する

LindormTSDB では、ホットデータとコールドデータを異なるストレージメディアに個別に格納できます。 cold_boundary パラメーターを設定することで、データベースのホットデータとコールドデータの境界を日単位で指定できます。境界よりも長い期間格納されているデータは、より費用対効果の高いコールドストレージに転送されます。

ホットデータとコールドデータを個別に格納するには、データベースのコールドストレージを有効にする必要があります。詳細については、「コールドストレージの有効化」をご参照ください。

重要
  • コールドストレージに転送されたデータは、ホットストレージに戻すことはできません。

  • データはバックグラウンドで非同期的にコールドストレージに転送されます。したがって、境界が設定または変更された後、コールドストレージのサイズが変更されるまでにある程度の時間がかかります。

  • DB5 という名前のデータベースを作成し、ホットデータとコールドデータの境界を 30 日に設定します。 DB5 に 30 日以上格納されているデータは、コールドストレージに転送されます。

    CREATE DATABASE DB5 WITH (cold_boundary=30);
  • 既存のデータベースの場合、cold_boundary パラメーターを変更することで、ホットデータとコールドデータの境界を変更できます。

    ALTER DATABASE DB5 WITH (cold_boundary=30);

時系列テーブルの作成

時系列テーブルを作成する前に、テーブルのデータモデルを作成し、テーブル内のタグ、タイムスタンプ、およびフィールド列を決定する必要があります。一般に、LindormTSDB はタグ列を使用してクエリ内の時系列を照合し、各タグ列の転置インデックスを作成します。

さらに、テーブルの主キーをパーティションキーとして使用できます。 LindormTSDB は、パーティションキーを使用してデータをパーティション化し、データのハッシュに基づいて異なるストレージノードにデータをルーティングします。クエリで指定された条件がパーティションキーと一致する場合、LindormTSDB はすべてのノードのデータをスキャンする代わりに、対応するノードのデータのみをクエリします。モノのインターネット(IoT)シナリオのデバイス ID など、一意の値を含む列を主キーとして使用することをお勧めします。

詳細については、「データモデル」および「時系列テーブルの設計」をご参照ください。

  • sensor という名前のサンプルテーブルを作成します。

    CREATE TABLE sensor (
        device_id VARCHAR TAG,
        region VARCHAR TAG,
        time   TIMESTAMP,
        temperature DOUBLE,
        humidity DOUBLE);
  • センサー情報を格納するテーブルを作成し、device_id 列を主キーとして指定します。

    CREATE TABLE sensor (
        device_id VARCHAR TAG,
        region VARCHAR TAG,
        time   TIMESTAMP,
        temperature DOUBLE,
        humidity DOUBLE,
        PRIMARY KEY(device_id));

テーブルの自動作成

LindormTSDB は、強い制約、弱い制約、制約なしの 3 種類のスキーマ制約ポリシーを提供します。Java 用 Lindorm ネイティブ SDK、InfluxDB ラインプロトコル、または TSDB API と互換性のある複数値データモデルを使用してデータを書き込むときに、スキーマ制約ポリシーを指定できます。弱い制約ポリシーが指定されているシナリオでは、データを書き込もうとするテーブルまたは列が存在しない場合、LindormTSDB はテーブルまたは列を自動的に作成するか、列が存在する場合は、データを書き込もうとする列のデータ型を検証します。詳細については、「スキーマの制約ポリシー」をご参照ください。

単一値データモデルと複数値データモデル

OpenTSDB プロトコルまたは TSDB API を使用してテーブルに書き込まれた単一値は、単一値モデルを使用して格納されます。 LindormTSDB は、単一値データのテーブルを作成しません。 LindormTSDB は、効率的なデータ読み取りのために複数値データの基になるストレージを最適化します。さらに、LindormTSDB は、弱い制約ポリシーが指定されている場合でも、複数値データのテーブルを自動的に作成します。したがって、複数値データモデルを使用してデータを格納することをお勧めします。