※ 本記事は、Julian Dontcheff, Shashank Gugnaniによる”JSON-to-Duality Migrator“を翻訳したものです。

2025年6月19日


MongoDBなどのドキュメント・データベースからリレーショナル・データベースにデータを移動しようとしていますが、リレーショナル概念に馴染みがないのではありませんか?

JSONドキュメントをリレーショナル表としてモデル化する方法と、論理モデルの作成方法が不明ですか?

ドキュメント・データベースからOracleへの透過的かつ自動的なアプリケーション移行に関心がありますか?

上記のいずれかの質問に対する回答が「はい」の場合、あなたは正しい場所にいます。

JSONリレーショナル二面性とは?

JSONリレーショナル二面性は、各世界のトレードオフなしで、単一のデータベース内のリレーショナルおよびドキュメント世界のメリットを統合します。この機能を有効にするOracle Database 23aiの新機能を、JSONリレーショナル二面性ビューと呼びます。二面性ビューを使用すると、データは非常に効率的な正規化された形式でリレーショナル表に格納されますが、JSONドキュメントの形式でアプリケーションからアクセスされます。したがって、開発者は、データ・アクセスのためのJSONドキュメントに関して、データ・ストレージに高効率なリレーショナル・モデルを使用しながら、シンプルさや効率性を損なうことなく考えることができます。

まず、Oracle JSONリレーショナル二面性に移行する理由について説明

JSONリレーショナル二面性を使用すると、同じデータ・セット上のドキュメント・データベースとリレーショナル・データ・モデルのすべてのメリットを得ることができます。アプリケーションでデータ整合性制約を適用する必要はありません。データベースによって実行されます。データ整合性は、任意の数のドキュメントおよびコレクションで取得されます。ドキュメントAPI、RESTまたはSQLを使用して柔軟にデータにアクセスし、様々なワークロードをサポートします。

次に、ドキュメント・データベースから移行する理由について説明

ドキュメント・データベースは、シンプルなユース・ケースに最適です。ただし、ユース・ケースがより複雑になるにつれて、データの一貫性を確保することはより困難になります。これは、ドキュメント・データベースが共有データを複製するためです。そのため、データを更新して一貫性を確保することは非常に困難です。ドキュメント・データベースから移行すると、非正規化ストレージの負担から解放されます。

Oracleに移行するという素晴らしい決定を下したので、データとアプリケーションを簡単に移行する方法を説明します。

たとえば、ドキュメント・データベースで本番で実行されている既存のアプリケーションがあるとします。アプリケーションをOracle二面性ビューに移動する場合、移行をどのように行いますか?

まず、データに最も適合する正規化されたリレーショナル・スキーマを決定する必要があります。次に、リレーショナル・スキーマを作成し、アプリケーション・コレクションと一致するようにリレーショナル・データの上に二面性ビューを作成する必要があります。これが完了したら、結果の二面性ビューにデータをインポートし、それらを使用するようにアプリケーションを移行できます。

ですが、お待ちください… データに最も適した正規化されたリレーショナル・スキーマを見つけるにはどうすればよいですか? これは一般的な問題のように思えます。特に、最新のアプリケーションには、非簡易データ・モデルを含む複数のコレクションがある可能性があるためです。

OracleのJSON-to-Duality Migratorが登場! Migratorは、リレーショナル・スキーマでJSONドキュメント・セマンティクスを保持するという課題に対処します。ドキュメント・コレクションから暗黙的な関係を推測することで、元のJSON構造をミラー化する更新可能な二面性ビューが生成されます。この方法では、索引付けやACIDコンプライアンスなどのリレーショナル最適化を活用しながら、ドキュメントAPIに依存するアプリケーションの下位互換性が保証されます。このツールは反復的な絞込みをサポートしているため、開発者は移行後に推測スキーマを調整できます。移行では、次のことができます:

  1. 既存のJSONコレクション・セットから導出された、正規化された効果的なリレーショナル・スキーマを設計します。
  2. ドキュメント・データベースからOracle二面性ビューにデータを移行すると同時に、ターゲット・スキーマに自動的に変換されます。
  3. 最小限のコード変更でアプリケーションを透過的にリフト・アンド・シフトします。
JSON-to-Duality Migrator Overview
図1. JSON-to-Duality Migratorの概要

JSON-to-Duality Migratorは何を提供?

  1. リレーショナル・スキーマ(表、索引、制約および順序を含む)を作成するためのDDLスクリプトを生成
  2. 入力コレクション内のJSONドキュメントの形状を反映する二面性ビューを生成
  3. データの正規化と重複解除を自動的に行います
  4. オプションで、生成されたスキーマをファインチューニングおよび最適化

JSON-to-Duality Migratorはどのように機能しますか?

  1. 入力JSONコレクションのデータおよび構造を分析した後、正規化されたスキーマを決定
  2. 高度な無人の機械学習(ML)アルゴリズムを使用して正規化されたリレーショナル・スキーマを作成
  3. コレクション全体で共有データを識別することで、重複を排除
  4. 機能依存関係分析を使用して、識別されたエンティティ間の各エンティティおよび外部キーの主キーを自動的に識別

これはすごい; どう使えば?

Migratorは、スキーマ推論、スキーマ生成、スキーマ検証、データ・インポートおよびデータ検証を支援するために、使いやすい一連のPL/SQLファンクションおよびプロシージャ(dbms_json_dualityパッケージの一部)を公開します。

API 説明
infer_schema すべての入力コレクションを表すリレーショナル・スキーマを推測
generate_schema 二面性ビューごとに必要なデータベース・オブジェクトを作成するコードを生成
infer_and_generate_schema infer_schemaとgenerate_schemaの両方を実行
validate_schema_report 入力コレクションに対して推測スキーマを検証
import_all 既存のドキュメント・コレクションを二面性ビューにインポート(実際、基礎となるリレーショナル表に)
validate_import_report インポートされたデータを入力コレクションに対して検証

移行のためのハイレベルなステップ

次のステップを含む移行プロセスを想定します。

  1. MongoDBなどのドキュメントDBから、単一のJSON列(通常の表またはJSONコレクション表)を持つ一連の表にJSONコレクションをインポートします。これは、Oracleおよびドキュメント・データベースによって提供される既存のツール(外部JSON表やDBMS_CLOUD.COPY_COLLECTIONなど)を使用して実行できます。
  2. PL/SQLファンクション(infer_and_generate_schema、infer_schema、generate_schema)を実行して、入力コレクションのリレーショナル・スキーマを検索して作成します。a. infer_and_generate_schemaを使用して、これをワンショットで実行できます。 b. また、infer_schemaとgenerate_schemaを組み合せて使用して、スキーマを作成するためにDDLスクリプトを生成する前にスキーマを微調整する場合に備えて、これを2つのフェーズで実行することもできます。
  3. validate_schema_report APIを使用して、生成されたスキーマを検証します。
  4. import_all APIを使用して、JSON表から二面性ビューにデータを移動します。
  5. validate_import_report APIを使用して、インポートされたデータを検証します。
  6. 二面性ビューおよびOracleのコンバージド・データベースの多くの機能を利用するようにアプリケーションをファインチューニングします。

会議のスケジュールの例を見て、Migratorの使用方法を理解しましょう。infer_and_generate_schemaファンクションを起動してJSON-to-Duality Migratorを実行し、import_allプロシージャを起動してデータをインポートします。この例の完全なスクリプトはここにあります。

DECLARE
  schema_sql clob;
BEGIN 
  -- Infer relational schema + duality views
  schema_sql :=
    dbms_json_duality.infer_and_generate_schema(
    json('{"tableNames" : [ "ATTENDEE", "SPEAKER", "SESSIONS" ],
          "useFlexFields" : true,
          "updatability" : true,
          "minFieldFrequency" : 0,
          "minTypeFrequency" : 0,
          "sourceSchema" : "ADMIN"}'));

  -- Print DDL script
  dbms_output.put_line('DDL Script: ');
  dbms_output.put_line(schema_sql);

  -- Create relational schema + duality views
  execute immediate schema_sql;

  -- Import data into duality views
  DBMS_JSON_DUALITY.import_all(
          JSON('{"tableNames" : [ "SESSIONS", "ATTENDEE", "SPEAKER" ],
                 "viewNames" : [ "SESSIONS_DUALITY", "ATTENDEE_DUALITY",
  "SPEAKER_DUALITY" ]}'));
END;
/ 

超シンプルですね。Oracle Database 23ai Freeバージョンをダウンロードして、今すぐお試しください。

重要なポイント

  • JSON-To-Duality Migratorは、ドキュメント・データベースからOracle二面性ビューへの移行プロセスにおける最も困難なステップを自動化
    • つまり、データ検証、データ正規化およびスキーマ生成
  • Migratorは監視なし。つまり、動作するためにユーザー入力は必要ありません
    • ユーザーは、ツールによって提供される推奨事項を自由に上書きできます
  • Migratorは、MongoDBのようなドキュメントDBからOracleに移行するアプリケーション開発者の障壁を大幅に削減
    • ドキュメントDB間の移行を容易に