※ 本記事は、Ranjan Priyadarshiによる”JSON Relational Duality: The Revolutionary Convergence of Document, Object, and Relational Models“を翻訳したものです。
2022年11月16日
JSONリレーショナル二面性は、Oracle Database 23cのランドマーク機能であり、Oracle Database開発者にとって革新的な柔軟性とシンプルさを提供します。この画期的なイノベーションにより、リレーショナル・モデルを使用する場合、またはドキュメント・モデルを使用する場合、開発者が直面した過去の課題が克服されます。
JSONリレーショナル二面性は、いずれのモデルのトレードオフもせずに、リレーショナル表とJSONドキュメントの両方のメリットを提供するソリューションを提供します。
リレーショナル・モデルおよびドキュメント・モデルを使用したアプリケーション開発の制限
リレーショナル・アプローチは非常に強力ですが、アプリケーション開発にとって常に最も簡単であるとは限りません。
リレーショナル・モデルは、データの重複を回避しながらデータの整合性を確保するためにデータの正規化を使用するため、非常に強力で効率的です。リレーショナル操作によって、データのモデリングとアクセスが非常に柔軟になりますが、場合によっては、開発者が常に最も簡単ではない場合があります。:
- 開発者は通常、app-tier言語オブジェクトの観点でアプリを構築し、リレーショナル・データベースはデータを表、行および列として格納します。多くの場合、個々のアプリケーション層オブジェクトを作成するには、複数の表へのアクセスが必要です。
- このような問題を回避するために、開発者は多くの場合、オブジェクト・リレーショナル・マッピング(ORM)フレームワークを使用します。ORMはアプリケーション開発を簡略化できますが、重要なオーバーヘッドも発生しています。: 通常、単一のアプリケーション層オブジェクトを操作するには、複数のデータベース・ラウンドトリップが必要ですが、これは非効率的です。データベース・エンジンの機能を最大限に活用せず、並行性制御をきわめて適切に管理せず、アプリケーションは言語ごとに異なるORMフレームワークを使用する必要があります。また、多くのアプリケーション層オブジェクトを挿入または変更する必要があるバッチ操作や一括操作では、きわめて不十分です。
- また、アプリケーション層ORMフレームワークでは、すべてのモジュールが同じマッピング情報を共有しないかぎり、モジュールおよびマイクロサービス間で異なるセマンティクスの可能性を導入します。
したがって、リレーショナル・モデルは非常に効率的なデータ・ストレージ・フォーマットですが、データ・アクセス・フォーマットとして使用すると開発者に問題が発生し、OMRでは非効率性とその他のトレードオフが発生する場合があります。
JSONのドキュメント型データベースには独自の欠点があります
ドキュメント・データベースは、app-tier言語オブジェクトに対応する階層的に編成されたデータの取得および格納が容易になるため、開発者に人気があります。JSONドキュメント・モデルを使用すると、アプリケーションはオブジェクトを階層型のJSON形式に直接マップでき、分解や再構成、および関連する複雑さを回避できます。ただし、次の理由から、JSONドキュメント・モデルは記憶域形式としてはまったく理想的ではありません。:
- ドキュメントには、重複したデータを格納することがよくあります。たとえば、異なるOrderドキュメントでは、同じCustomer情報を冗長的に格納できます。データが重複すると、共有情報(顧客の電話番号など)の更新で多数のOrderドキュメントを原子的に更新する必要があるため、非効率性と不整合が生じる可能性があります。
- この問題を回避するために、ドキュメント・データベースによっては、参照を使用してドキュメントを正規化することをお薦めします。: OrderドキュメントにCustomerドキュメントを含めるのではなく、OrderドキュメントにはそのCustomerドキュメントのIDが含まれる場合があります。ただし、文書を正規化すると、文書モデルのシンプル性が完全に失われ、実際には両方の世界で最悪のモデルになります。
- また、文書モデルを使用して多対多関係をモデル化することも非常に困難です。関係をモデル化しようとすると、データの重複が増加し、不整合が増える可能性があります。
そのため、ドキュメント/JSONは開発者が使いやすいデータ・アクセス・フォーマットであり、開発者が簡単に始められるようになりましたが、特にアプリケーションの複雑さが増すにつれて、データ・ストレージ・フォーマットとして大きな制限があります。
Oracle Database 23c JSONリレーショナル二面性がアプリ開発をどのように変革するか
Oracle Database 23c JSONリレーショナル二面性は、これまでに説明したトレードオフのいずれもなく、単一のデータベース内のリレーショナルおよびドキュメント世界のメリットを集約します。この収束を有効にするOracle Database 23cの新しい機能は、JSONリレーショナル二面性ビューと呼ばれます。

二面性ビューを使用すると、データは高度に正規化された形式でリレーショナル表に格納されますが、JSONドキュメントの形式でアプリケーションによってアクセスされます(図2)。そのため、開発者は、データ・アクセスのためのJSONドキュメントに関して考えると同時に、データ・ストレージに非常に効率的なリレーショナル・モデルを使用することで、簡易性や効率性を損なう必要がなくなります。これに加えて、二面性ビューでは、データベース・レベルの同時実行性制御のすべての複雑さがユーザーから隠され、ドキュメント・レベルのシリアライズ可能性が提供されます。

二面性ビューは、直感的なGraphQL構文を使用して、任意の数の表に対して宣言できます。たとえば、次の二面性ビューでは、order、orderitemおよびcustomer表で使用可能なリレーショナル・データが、app-tier Orderオブジェクトに対応するJSONドキュメントとしてレンダリングされます。:

開発者は、リレーショナル表の同じセットまたは重複セットに対して異なる二面性ビューを簡単に定義できるため、同じデータ(orderitemやcustomerなどの共通表を共有するOrderObjビューおよびShipmentObj二面性ビューなど)で複数のユースケースを簡単にサポートできます。
二面性ビューを使用することで、開発者の柔軟性が大幅に向上しました。
- SQL JSON拡張を使用した、JSON列のデータを含むすべてのデータへのSQLアクセス
- 二面性ビューを使用した、リレーショナル表に格納されたデータへのアクセスなど、すべてのデータへのJSONドキュメント・アクセス
開発者は、二面性ビューによって生成されたJSONドキュメントを、通常のドライバ、フレームワーク、ツールおよび開発方法を使用して操作できます。
開発者にとって非常にシンプルで柔軟
開発者は、単一のアプリケーション層オブジェクトに必要なすべてのデータを単一のデータベース操作で取得および格納できるというシンプルさから大きなメリットを得られます。二面性ビューを使用するアプリケーションは、単にビューからドキュメントを読み取り、必要な変更を加え、基礎となるリレーショナル構造を気にすることなくドキュメントを再作成できるようになりました。:
- 二面性ビューにより、ORMフレームワークの必要性を排除
- 二面性ビューの読取りおよび書込みでは、GET、PUT、POSTなどの使い慣れたHTTP操作を使用できます。
- APIをHTTPより優先するアプリケーションは、Simple Oracle Document Access API(SODA)、Oracle Database API for MongoDBまたはORDSを使用できます。
- 二面性ビューを使用するアプリケーション操作は、アプリケーション層オブジェクトのユースケースに必要なすべての行を1つのデータベース・アクセスにフェッチして格納できるようにするため、データベース内で最適に実行されます。これは、ORMによって生成される非効率的なデータベース・アクセス・コードとは異なります。
したがって、JSONリレーショナル二面性は、リレーショナル・モデルのストレージ、一貫性および効率性のメリットを提供し、JSONドキュメント・モデルのシンプルさと柔軟性も提供します。
Oracle Database 23cによるロックフリーの同時実行制御
二面性ビューでは、Oracle Database 23cの新しいロックフリーまたはオプティミスティックな同時実行性制御アーキテクチャのメリットもあります。これにより、開発者はステートレスな操作で一貫してデータを管理できます。
- ロックはステートフルであり、ステートレス・コール間で保持できないため、従来のロックはREST GETやPUTなどのステートレス操作では機能しません。
- Oracle Database 23cの新しいロックフリーの同時実行性制御アルゴリズムにより、ステートレス操作間で一貫した更新が可能になります。
- ロックフリー・スキームは、HTTPプロトコルからのエンティティ・タグ(ETAG)の概念をコア・データベースに拡張し、ETAGはハッシュまたは取得したWebページの内容の署名です。
- 二面性ビューに対してGETが実行されると、返されるJSONドキュメントには、ドキュメントの構成に使用される行のセットのETAGも含まれます。
- ドキュメントが変更され、後でデータベースに戻されると、指定されたETAGが行の現在のETAGと比較されます。ETAGが異なる場合、オブジェクトはGETとPUTの間で変更され、PUTは拒否されます。
- その後、アプリケーションは新しいETAGを使用してドキュメントをre-GETし、PUTを再試行できます。
- PUTが成功した場合、オブジェクトに対して介入する変更が発生せず、ドキュメント・レベルの原子性と一貫性が保証されます。
- ロックフリーの同時実行制御を使用したドキュメント・レベルのシリアライズ性により、開発者は、アプリケーション層内に同時実行性の制御とデータ整合性の問題をデバッグするのではなく、アプリケーションに集中できます。
まとめ: JSONリレーショナル二面性によりアプリ開発が簡素化
- 開発者は、JSONドキュメント・モデルの柔軟性とデータ・アクセスのメリット、およびリレーショナル・モデルのストレージ効率とパワーを手に入れるようになりました。
- 二面性ビューは、リレーショナル・データに対して完全に更新可能なJSONビューです。アプリケーションは、ベースとなるリレーショナル構造、タイプ・マッピングまたはデータの一貫性を考慮せずに、アプリケーション層オブジェクトに対応するドキュメントを読み取り、必要な変更を行い、ドキュメントを戻すことができます。
- 複数の二面性ビューが重複する表のグループに実装されるため、同じデータに対して複数のアプリケーション・ユースケースを柔軟に処理できます。
- 二面性ビューを使用したアプリケーション操作は、データベース内で最適に実行されます。
- 新しいオプティミスティックな同時実行性制御アルゴリズムにより、高同時実行性更新および対話型ユース・ケースが可能になり、強力なドキュメント・レベルのシリアライズ性を実現できます。
