※ 本記事は、Ranjan Priyadarshiによる”Oracle Announces General Availability of JSON Relational Duality in Oracle Database 23ai“を翻訳したものです。

2024年5月7日


JSONリレーショナル二面性 (JSON Relational Duality)は、リレーショナル・モデルとドキュメント・モデルの両方の利点を統合するOracle Database 23aiの新機能です。

なぜこのような機能が重要なのでしょうか? これは、開発者がアプリケーション・データの格納とアクセスの両方に、リレーショナル・モデルまたはJSONドキュメント・モデルのいずれかを使用する必要があったためです。そのため、選択したモデルのメリットとデメリットを理解した上で選択する必要がありました:

  • リレーショナル・データ・モデルは、データの重複を排除し、一貫性と効率性を実現する、正規化の力によるストレージ形式として理想的です。ただし、アプリケーションは階層オブジェクトに関してデータを処理するため、リレーショナル・モデルはアプリケーションを構築するためのアクセス形式ほど理想的ではありません。この問題に対処するために、開発者は複雑で非効率的なORM(オブジェクト・リレーショナル・マッピング)を使用して、アプリケーション・オブジェクトをリレーショナル・データにマップしています。

  • JSONなどのドキュメント・モデルは、階層的で自己完結型であるため、アクセス形式として理想的であり、アプリケーション・オブジェクトに簡単にマップできます。しかし、JSONドキュメントは、異なるドキュメントが同じデータを繰り返す可能性があるため、データの重複、複数のコピーの更新、つまり潜在的な不整合を引き起こす可能性があり、リレーショナル・モデルが正規化によって解決する問題そのものであるため、ストレージ形式としては不十分です。

JSONリレーショナル二面性は、リレーショナル・モデルまたはアプリケーション構築用のドキュメント・モデルのいずれかを選択する際に開発者が直面した過去の課題を克服する画期的なイノベーションです。開発者は、ドキュメント・モデルの柔軟性とデータ・アクセスのシンプルさに加え、同じ基礎となるデータに対するリレーショナル・モデルの効率性、一貫性およびユース・ケースの柔軟性を得ることができます。

概要

JSONリレーショナル二面性は、リレーショナル・モデルとドキュメント・モデルの両方の長所を使用する統合ソリューションを提供することで、ギャップを埋めます。アクセス形式とストレージ形式を分離し、データをリレーショナルとして格納するが、JSONとしてアクセスできるようにします。新機能である23aiのJSONリレーショナル二面性を使用すると、データは正規化されたリレーショナル表に残りますが、JSONドキュメントとしてアクセスできます。このアクセスとストレージの二面性により、アプリケーション開発用のリレーショナル・モデルとドキュメント・モデルのいずれかを選択する必要がなくなります。

Figure 1. JSON Relational Duality provides a unified solution.
図1.JSONリレーショナル二面性が統合ソリューションを提供

JSONリレーショナル二面性ビュー (または単に「二面性ビュー」)は、直感的なGraphQLのような構文を使用して定義できます。次に示す二面性ビューの目標は、各オーダーに対応するJSONドキュメントを生成することです。このビューでは、JSONドキュメントの意図した形状、データの取得元の表、およびドキュメントの個々のフィールドを取得する列を指定します:

Figure 2. Example defining JSON Relational Duality Views
図2.JSONリレーショナル二面性ビューの定義例

二面性ビューは、標準JSON拡張でSQLを使用して定義できますが、GraphQLは、よりシンプルで直感的な短縮構文を提供します。たとえば、GraphQLは、ビューのJSONドキュメントを生成するために必要な顧客ID (cid)列およびオーダーID (oid)列に基づく関係など、主キー/外部キー関係に基づいて相関条件を自動的に追加します。

二面性ビューは、定義方法に応じて、読取り専用または完全または部分的に更新できます。開発者は、お気に入りのアクセス方法、ドライバおよびフレームワークを使用して、二面性ビューによって生成されたJSONドキュメントを、使用された方法で変更できます。開発者は、REST、Simple Oracle Document Access (SODA)、MongoDB APIなどの標準ドキュメントAPIを使用して、標準のSQLまたはドキュメントを使用してリレーショナルと同じデータを操作することも、SQL/JSONを使用することもできます。

JSONリレーショナル二面性ビューは、本質的に、データに対する完全に更新可能でトランザクション的なJSONビューです。二面性ビュー内のドキュメントが更新または削除されると、ビューの基礎となる関連リレーショナル(表)データが自動的に更新されます。アプリケーションは、基礎となるデータ構造、マッピング、一貫性、パフォーマンス・チューニングを気にすることなく、ドキュメントを読み取り、必要な変更を行い、ドキュメントを書き戻すことができます。二面性ビューを使用すると、アプリケーションの様々なユースケースに基づいて、複数の階層を同じ基礎となるリレーショナル・データに定義できます。

JSONリレーショナル二面性を使用するメリット

リレーショナルとJSONの両方の長所

JSONリレーショナル二面性ビューを使用すると、データはリレーショナル形式で格納され、データ正規化のメリットは十分に得られますが、JSONドキュメントとしてデータにアクセスできるため、アプリケーションによるデータベースへのアクセスが容易になります。JSONリレーショナル二面性は、リレーショナル世界とドキュメント世界のメリットを単一のデータベース内の同じデータに統合します。開発者は、リレーショナル・データベースのデータ整合性とマルチユース・ケースの柔軟性、JSONの柔軟性、さらにはMongoDB互換のドキュメント・ストアAPIを選択する必要がなくなりました。

Figure 3. JSON Relational Duality unifies the benefits of both worlds
図3.JSONリレーショナル二面性、両者のメリットを統合

 

オブジェクト・リレーショナル・マッピング(ORM)に対するアーキテクチャの優位性

開発者の場合、リレーショナル・モデルでは、多くの場合、ORMレイヤーを使用してオブジェクト指向のプログラムとリレーショナル・データベースの間にブリッジを作成する必要があります。この追加のレイヤーにより、開発者はアプリケーション・オブジェクトと表間のカスタム・マッピングを負担し、データベースへの複数のラウンドトリップに対する複雑さ、非効率性およびパフォーマンス・ペナルティが増します。

  • 通常、ORMは複数のSQL文を発行してアプリケーション・オブジェクトの読取りと書込みを行い、パフォーマンスを低下させます。単一のデータベース・ラウンドトリップで読み書きできる二面性ビューは、はるかに効率的です。
  • ORMはプログラミング言語固有であり、1つのORM実装は多言語アプリケーションでは使用できません。たとえば、一部のマイクロサービスはJavaでコーディングされ、一部のマイクロサービスはPythonでコーディングされます。

二面性ビューは、ORMフレームワークの必要性を排除します。これらはデータベース常駐であり、ORMよりも大きなメリットをもたらします。二面性ビューを使用する場合、ドキュメントの読取りおよび書込みに必要な往復は1つのみです。アプリケーション・オブジェクトをリレーショナル表にマッピングすると、より簡単かつ効率的になります。二面性ビューはデータベースに集中配置され、複数のアプリケーションで使用できるため、アプリケーション間のデータの不整合も排除されます。

ドキュメント・データベースに対するアーキテクチャの優位性

ドキュメント・データベースは、特定のアプリケーションのユース・ケースに必要なすべてのデータを特定のドキュメントに含めることができるため、開発者が開始しやすくなる場合があります。ただし、同じコレクション内であっても、異なるドキュメントが同じデータを繰り返すことが多いため、一貫して管理することが徐々に難しくなります。

JSONリレーショナル二面性は、データを複数の表に正規化することで、データの整合性を確保し、データの保存中にデータの重複を排除します。基礎となるデータは、SQL APIまたはドキュメントAPIのどちらを使用しても、常にトランザクション整合性があります。アプリケーション間のこの一貫性は、複雑なエンタープライズ・アプリケーションにとって重要です。

超柔軟なデータ・アクセス: ユースケースに応じて、SQL、RESTまたはドキュメントAPI (MongoDB互換)を使用してデータにアクセスまたは更新

JSONリレーショナル二面性は、ドキュメントとリレーショナルの両方に対してSQLを発行する機能に加えて、ドキュメントとリレーショナルの両方に対してドキュメントAPIを使用する機能を提供します。ユース・ケースに応じて、標準SQL、JSON拡張機能付きのSQL、またはドキュメントAPIを自由に使用できます。

基礎となるリレーショナル表で二面性ビューが作成されると、REST、MongoDB互換API、Oracle Simple Object Data API (SODA)、およびJSONの拡張機能を持つANSI SQL (JSON_VALUE()など)など、様々なドキュメントAPIを介してJSONドキュメントとして透過的にアクセスできます。

また、格納されたデータのコピーは1つのみであるため、基礎となる表には、一貫性を失うことなく従来のSQLを使用して直接アクセスできます。直接SQLの使用は、多くの場合、一括操作、分析およびレポートにJSONよりも役立ちます。

スキーマに柔軟性のあるドキュメントをサポートする、超シンプルなアプリケーションの進化

二面性ビューは、データの新しいコピーを作成せずに新しいユース・ケースを追加することで、アプリケーションを非常に簡単に進化させることができます。アプリケーションによってユース・ケースが増えるにつれて、新しい各ユース・ケースを、データの重複なしに同じ基礎となるデータに対して新しい二面性ビューで処理できます。二面性ビューは、基礎となる表の共通セットに対する論理ビューです。異なるビューを使用して同じデータにアクセスした場合でも、物理的なデータの重複はなく、データの不整合もありません。

REST対応アプリケーションとキャッシュを簡単に構築

RESTはステートレス・プロトコルであり、RESTコール全体でトランザクション・ロックを保持できないため、従来のデータベース・ロックはRESTアプリケーションでうまく機能しません。同様に、アプリケーション層のデータベース・キャッシュおよびモバイル・アプリケーションは、キャッシュされたデータの有効性を保護するためにロックを保持できません。二面性ビューは、ロックフリーまたはオプティミスティックな同時実行性制御メカニズムを利用して、アクセス間でロックを必要とせずに、完全に一貫したデータベース読取りおよび書込みを可能にします。

二面性ビューを使用してアプリケーションのセキュリティ・ルールを一元化

二面性ビューでは、開発者にすべてのアプリケーションで強制させるのではなく、多数のセキュリティ・ルールをデータベースで集中化、検証および監査することもできます。

データ・アクセスとアクションをきめ細かくカスタマイズ

二面性ビューでは、同じデータを共有するアプリケーション・モジュールのデータ・アクセス・ルールと変更ルールを、シンプルかつきめ細かくフィールド・レベルでカスタマイズできます。二面性ビューでは、ビューごとに操作を制限するために使用できる更新性注釈がサポートされています。

ドキュメント・データベースからOracle Databaseへのアプリケーションの移行

JSONリレーショナル二面性のすべてのメリットを把握できたので、アプリケーションをドキュメント・データベースからOracleに簡単に移行したり、OracleでJSONリレーショナル二面性を使用して新しいアプリケーションを構築したりできます。

インテリジェントな移行アシスタントであるJSON-to-Duality Migratorは、アプリケーションをドキュメント・データベースからOracleに移行する際に役立ちます。この新機能では、JSONコレクションに基づいて、正規化されたリレーショナル・スキーマと二面性ビューのセットが自動的に推奨および作成されます。主キー、一意キーおよび外部キーの制約、索引およびデフォルト値とともに、作成する必要がある正規化されたリレーショナル表が自動的に識別されます。また、この機能は、JSONコレクションから結果の二面性ビューにデータをインポートします。

JSON-to-Duality Migratorを使用すると、いくつかの簡単なステップでアプリケーションをドキュメント・データベースから二面性ビューにすばやく移行し、JSONリレーショナル二面性とOracle Converged Databaseのすべてのメリットを活用できます。

まとめ: 23aiを使用してJSONリレーショナル二面性を使い始める

JSONリレーショナル二面性は、リレーショナル・モデルとドキュメント・モデルの両方の長所をまとめる統合ソリューションを提供することで、ドキュメント・リレーショナル不一致を橋渡しします。これにより、アプリケーション開発用のリレーショナル・モデルとドキュメント・モデルのいずれかを選択する必要がなくなります。開発者は、JSONドキュメント・モデルの柔軟性とデータ・アクセスのメリットに加え、リレーショナル・モデルのストレージ効率とパワーを得ることができます。JSONリレーショナル二面性は、アプリケーション開発を大幅に簡素化し、開発者の生産性を向上させます。Oracle Database 23aiと23ai Freeを使用して、JSONリレーショナル二面性を使い始めることができます。


その他のリソース: