OpenSearch コンソールでは、アプリケーションスキーマを定義する方法が 4 つ用意されています。OpenSearch Industry Algorithm Edition は複数のテーブルをサポートしており、複雑なビジネスシナリオでの呼び出しが容易になります。
プライマリテーブルとセカンダリテーブルを関連付けるルール
アプリケーションのスキーマを設定するために複数のテーブルを手動で作成する場合は、次のルールに注意してください。
プライマリテーブルのレコードとセカンダリテーブルのレコードの比率は、N:1 または 1:1 である必要があります。1:N の比率はサポートされていません。これは、1 つのプライマリテーブルレコードを複数のセカンダリテーブルレコードに関連付けることができないことを意味します。
セカンダリテーブルは、セカンダリテーブルの主キーをプライマリテーブルの外部キーに関連付けることで、プライマリテーブルに関連付けることができます。プライマリテーブルの外部キーは、セカンダリテーブルの主キーにのみ関連付けることができます。
最大 3 レベルの関連付けがサポートされています。アプリケーションには最大 10 個のセカンダリテーブルを作成できます。
プライマリテーブルは 1 つだけ設定できます。
プライマリテーブルとセカンダリテーブル | 関連付けロジック | サポート |
テーブル A(プライマリテーブル)、テーブル B | テーブル A(プライマリテーブル)-> テーブル B | はい |
テーブル A(プライマリテーブル)、テーブル B、テーブル C | テーブル A(プライマリテーブル)-> テーブル B -> テーブル C | はい |
テーブル A(プライマリテーブル)、テーブル B、テーブル C、テーブル D | テーブル A(プライマリテーブル)-> テーブル B、テーブル A(プライマリテーブル)-> テーブル C、テーブル A(プライマリテーブル)-> テーブル D。2 レベル以下の関連付けが設定されています。セカンダリテーブルは 10 個以下作成されています。 | はい |
テーブル A(プライマリテーブル)、テーブル B、テーブル C、テーブル D | テーブル A(プライマリテーブル)-> テーブル B -> テーブル C -> テーブル D。3 レベル以上の関連付けが設定されています。 | いいえ。ただし、3 レベルの関連付けをサポートする専用アプリケーションは除きます。 |
テーブル A(プライマリテーブル)、テーブル B | テーブル A(プライマリテーブル)-> テーブル B、テーブル B -> テーブル A。テーブルは循環的な関連付けの形式で関連付けられています。 | いいえ |
テーブル A(プライマリテーブル)、テーブル B、テーブル C、...、テーブル K | テーブル A(プライマリテーブル)-> テーブル B、テーブル A(プライマリテーブル)-> テーブル C、テーブル A(プライマリテーブル)-> テーブル D。2 レベル以下の関連付けが設定されています。10 個を超えるセカンダリテーブルが作成されています。 | いいえ。ただし、10 個を超えるセカンダリテーブルをサポートする専用アプリケーションは除きます。 |
データモデル
プライマリテーブルとセカンダリテーブルの関連付けの例
使用上の注意
フィールドは、同じタイプのフィールドの場合にのみ、テーブル間でマッピングできます。たとえば、セカンダリテーブルの主キーが INT タイプの場合、主キーはプライマリテーブルの INT タイプのフィールドにのみマッピングできます。
オフラインテーブルは、次のロジックに基づいて結合されます。インデックス作成プロセス中に、プライマリテーブルとセカンダリテーブルに対して LEFT JOIN 操作が実行され、ワイドテーブルが生成されます。インデックスは、検索サービスのためにワイドテーブルに基づいて構築されます。プライマリテーブルのレコードとセカンダリテーブルのレコードの比率が N:1 であり、N の値が大きいと仮定します。セカンダリテーブルのデータレコードが更新されると、プライマリテーブルで更新する必要があるデータレコードの数は、セカンダリテーブルの N 倍になります。これにより、プライマリテーブルとセカンダリテーブルの両方で更新の遅延が発生する可能性があります。この場合、N の値を 10 以下にすることをお勧めします。
JOIN 操作後、生成されたワイドテーブルの行数は、プライマリテーブルの行数と同じになります。セカンダリテーブルで空のフィールドは、ワイドテーブルのデフォルト値で自動的に埋められます。INT タイプのフィールドのデフォルト値は 0 です。STRING タイプのフィールドのデフォルト値は null です。
ベストプラクティス:複数テーブル結合によるデータ同期レイテンシ