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

Lindorm:スキーマの制約ポリシー

最終更新日:Apr 07, 2025

スキーマの制約ポリシーを設定して、テーブルへのデータ書き込み時に、テーブルの存在、テーブルスキーマ間の一貫性、およびフィールドデータ型の一貫性をチェックするかどうかを指定できます。サポートされているスキーマの制約ポリシーは、データの書き込み方法によって異なります。このトピックでは、LindormTSDB のスキーマの制約ポリシーと、これらのポリシーの使用方法について説明します。

Lindorm 時系列モデルのスキーマ

LindormTSDB は、時系列シナリオにおけるビジネスデータモデルの情報に基づいて、時系列テーブルの概念を抽象化します。 LindormTSDB に基づいてアプリケーションを開発する場合、従来のリレーショナルデータベースでリレーショナルテーブルにアクセスするのと同じような方法で時系列テーブルにアクセスできます。

ただし、時系列モデルはリレーショナルデータモデルとは異なります。 時系列モデルは、指定された構造に基づくデータクエリをサポートし、アプリケーションパフォーマンス管理(APM)、IoT、または従来の産業シナリオで列を動的に追加または削減できる、半構造化データモデルに似ています。 半構造化データモデルの構造は、リレーショナルデータベースに関連付けられたデータモデルの表形式の構造とは異なります。 実際のビジネスシナリオでは、デバイスの改良、アップグレード、または反復が継続されるため、デバイスによって生成されるデータモデルは頻繁に変更される可能性があります。 たとえば、デバイスによって生成されるフィールドの数が増加し、フィールドタイプが変更されます。

LindormTSDB は、時系列テーブルを変更できるように ALTER TABLE ステートメントを提供します。 ただし、一部の時系列シナリオでは、テーブルスキーマの制約がリレーショナルデータベースのテーブルのスキーマの制約と同じくらい厳密な場合、アプリケーション開発がより困難になる可能性があります。

この場合、LindormTSDB は、ユーザーがテーブルスキーマに制約を適用するためのより柔軟なポリシーを提供します。

スキーマ制約

ほとんどの場合、スキーマ制約は、データがテーブルに書き込まれるときに有効になります。 スキーマ制約は、書き込まれたフィールドが事前定義されたテーブルスキーマに含まれるフィールドと一致するかどうか、書き込まれたフィールドのデータ型が事前定義されたデータ型と一致するか互換性があるかどうか、またはデータが書き込まれるテーブルが存在するかどうかを定義できます。 従来のリレーショナルデータベースでは、厳密な制約が適用されます。

LindormTSDB のスキーマ制約に基づいて、システムは次の検証操作を実行します。

  • データの書き込み先のテーブルが存在するかどうかを確認します。

  • データの書き込み先の TAG 列または FIELD 列が事前定義されているかどうかを確認します。

  • 書き込まれるデータの型が、事前定義されたデータ型と一致するかどうかを確認します。

  • 返されるフィールドのデータ型が、テーブルの作成時に指定されたデータ型と一致するかどうかを確認します。

サポートされているスキーマ制約ポリシー

LindormTSDB は、強制制約弱制約制約なしの 3 つのタイプのスキーマ制約ポリシーを提供します。 ビジネス要件に基づいてポリシーを選択できます。

  • 強制的約

    LindormTSDB は、事前定義されたテーブルスキーマに基づいて、データの書き込み先のテーブルの名前、書き込まれるデータのフィールド名、および書き込まれるデータの型を厳密に検証します。 このプロセスは、従来のリレーショナルデータベースの検証プロセスに似ています。 テーブル名、フィールド名、またはデータ型がテーブルスキーマで事前定義されたものと一致しない場合は、エラーが報告されます。

  • 弱制約

    • データの書き込み先のテーブルが存在しない場合、LindormTSDB はエラーを報告しません。 代わりに、LindormTSDB は自動的にテーブルを作成します。

    • 書き込まれるデータにタグまたはフィールドが追加された場合、LindormTSDB はエラーを報告しません。 代わりに、LindormTSDB は時系列テーブルに TAG 列または FIELD 列を自動的に追加します。

    • データの書き込み先のフィールドのデータ型が変更された場合、LindormTSDB はフィールドのデータ型が事前定義されたデータ型と一致しないことを検出するため、データの書き込みは失敗します。 この場合、ALTER TABLE ステートメントを実行して、フィールドのデータ型を手動で変更する必要があります。

    説明

    弱制約ポリシーを使用する場合でも、一部の検証操作は引き続き実行されます。 たとえば、文字列以外の値を TAG 列に書き込もうとしたり、タイムスタンプ型以外のデータをタイムスタンプ列に書き込もうとしたりすると、検証は失敗します。

  • 制約なし

    制約は適用されません。 このポリシーを使用すると、データの書き込み先のテーブルが存在しない場合でもエラーは報告されません。 時系列データベース(TSDB)と互換性のあるインターフェースを呼び出して、書き込まれたデータをクエリできます。 データの書き込み先のテーブルが存在しない場合に手動でテーブルを作成すると、SQL ステートメントを実行して書き込まれたデータをクエリできます。 ただし、フィールドデータ型が一致しない場合でもエラーは報告されません。

    説明

    制約なしポリシーは、TSDB との互換性を確保するためにシステムによって予約されています。 詳細については、「開発者ガイド」をご参照ください。

データ書き込み方法に基づいてスキーマ制約ポリシーを選択する

LindormTSDB では、データの書き込み時に使用されるスキーマ制約ポリシーは、データの書き込みに使用される方法と密接に関連しています。 次の表に、さまざまなデータ書き込み方法に対応するスキーマ制約ポリシーを示します。

データ書き込み方法

スキーマ制約ポリシー

スキーマ制約ポリシーの変更に使用されるサンプルコード

JDBC ドライバー

強制的約のみがサポートされています。

該当なし

Java ネイティブ SDK

サポートされている制約ポリシー:

  • 強制的約(デフォルト)

  • 弱制約

  • 制約なし

// エンドポイントを指定します。
String url = "http://ld-bp1489gr5t*****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242";
// LindormTSDB クライアントを作成します。LindormTSDB クライアントはスレッドセーフであり、再利用できます。スレッドごとにクライアントを作成し、操作の完了後にクライアントをシャットダウンする必要はありません。
ClientOptions options = ClientOptions
        .newBuilder(url)
        .setSchemaPolicy(SchemaPolicy.WEAK) // 弱制約を指定
        .build();
LindormTSDBClient lindormTSDBClient = LindormTSDBFactory.connect(options);

HTTP SQL API

強制的約のみがサポートされています。

該当なし

InfluxDB ラインプロトコル

サポートされている制約ポリシー:

  • 強制的約

  • 弱制約(デフォルト)

  • 制約なし

curl -X POST 'http://ld-bp1489gr5t*****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242/api/v2/write?db=default&schema_policy=WEAK' -d 'sensor,device_id=F07A1260,region=north-cn temperature=12.1,humidity=45 1619076780000'

複数値データ書き込み

サポートされている制約ポリシー:

  • 弱制約

  • 強制的約

  • 制約なし(デフォルト)

 curl -X POST http://ld-bp1489gr5t*****-proxy-tsdb.lindorm.rds.aliyuncs.com:8242/api/config -d'{"schema.policy.opentsdb":"WEAK"}'

制約なしのみがサポートされています。

該当なし