スキーマの制約ポリシーを設定して、テーブルへのデータ書き込み時に、テーブルの存在、テーブルスキーマ間の一貫性、およびフィールドデータ型の一貫性をチェックするかどうかを指定できます。サポートされているスキーマの制約ポリシーは、データの書き込み方法によって異なります。このトピックでは、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 では、データの書き込み時に使用されるスキーマ制約ポリシーは、データの書き込みに使用される方法と密接に関連しています。 次の表に、さまざまなデータ書き込み方法に対応するスキーマ制約ポリシーを示します。
データ書き込み方法 | スキーマ制約ポリシー | スキーマ制約ポリシーの変更に使用されるサンプルコード |
強制的約のみがサポートされています。 | 該当なし | |
サポートされている制約ポリシー:
| | |
強制的約のみがサポートされています。 | 該当なし | |
サポートされている制約ポリシー:
| | |
サポートされている制約ポリシー:
| | |
制約なしのみがサポートされています。 | 該当なし |