MySQL HeatWaveは、トランザクション、分析、機械学習、生成AIサービスを組み合わせた唯一のフルマネージドのMySQLデータベース・サービスです。また、MySQL HeatWave Lakehouseも含まれており、ユーザーはオブジェクト・ストレージ、MySQLデータベース、またはその両方の組合せに格納されているデータを分析できます。ユーザーは、MySQL HeatWaveを利用したアプリケーションを、Oracle Cloud Infrastructure (OCI)、Amazon Web Services (AWS)およびMicrosoft Azureのいずれかのパブリック・クラウドにデプロイできます。

 

アプリケーション開発者は、フロントエンド・コンポーネントとバックエンド・コンポーネント間でデータを通信または交換するために、JSONを使用してドキュメントベースのワークフローを実装する必要があります。これらの処理には、JSONコレクションの抽象化を使用します。JSON Relational Duality Viewは、リレーショナル・データベースの長所を放棄することなく、ドキュメント中心のアプリケーションを操作する革新的な方法を導入しています。これにより、ハイブリッド・ワークロード(SQLおよびドキュメント処理)、よりスムーズな相互運用性および簡略化された開発プロセスの新たな可能性が開き、参照整合性や強力なトランザクション一貫性など、MySQLの堅牢な機能からメリットを得ることができます。

この記事では、バージョン9.4で導入され、MySQL HeatWaveマネージド・クラウド・サービスやMySQL Enterprise Editionで利用可能になったJSON Relational Duality Viewのサポートについて解説しています。

JSON Relational Duality Viewとは

簡単に言えば、新しいJSON Relational Duality View機能を使用すると、構造化(リレーショナル)データと半構造化(JSON)データの両方を統合できます。二面性ビューを使用すると、どちらのデータ・モデルを使用しても、アプリケーションで読取りおよび書込みを実行できます。信頼できる唯一の情報源(従来のSQLと豊富なREST対応JSONの両方からアクセス可能)を想像してみてください。MySQLを使用すると、データの一貫性、正規化、管理が容易になります。これまでのようなトレードオフやデータが同期していない問題に悩む必要もありません。

A JSON duality view maps a relational table to a JSON document and vice-versa
JSON Relational Duality Viewとは

なぜJSON Relational Duality Viewが「ゲームチェンジャー」とされているのか

従来型のリレーショナルなデータモデルの利点(と悩み)を再確認します:

  JSON データモデル リレーショナルなデータモデル
強み:
  • 簡単に始められる、厳格なスキーマなし、データの追加のみ

  • REST APIおよびJavaScriptを多用するWebアプリケーションとの完全な相乗効果

  • 複雑なオブジェクト・リレーショナル・マッピング(ORM)の悩みを排除

  • データ更新時の参照関係の一貫性、参照整合性を保証
  • 効率的なストレージ、正規化、重複のないデータ

 

 

弱み:
  • アプリの拡張によって正規化が困難となり、データの重複を起こしやすい
  • データ更新時に一貫性が担保されない (参照データが同期しなくなる可能性)
  • あらかじめスキーマを用意する必要がある。アジャイルなチームには課題となり得る
  • 開発エンジニアがORMかマッピングのロジックを用意する必要がある

 

Problems with the JSON model: duplication and referential integrity
Potential problems with the JSON data model

MySQL JSON Duality Viewsを利用すると、もう妥協する必要はありません。両方の強みを利用することができます。そしてトレードオフは一切ありません!

アプリケーション・スタックの簡素化

  • 統合されたアクセス、ETLやデータ同期にさよならを多くのデータベース・システムでは、(APIおよびアプリケーション開発者が愛用している)柔軟なJSONドキュメント・モデルか、リレーショナル表の構造と信頼性(レポートおよびビジネス・ロジックに不可欠)のいずれかを選択する必要があります。開発者とDBAは、多くの場合、複雑な同期レイヤーを構築したり、これらのモデルの同期を維持するために複雑なETLジョブを実行したりします。JSON Duality Viewsを使用すると、JSON表とリレーショナル表の両方として一貫してアクセスできる、データの単一のリアルタイム表現を取得できます。1つのインタフェースを介して行われた変更は、即座に他のインタフェースに反映されるため、アプリケーション、レポートおよびAPIは常に同じページに表示されます。

  • ORMやデータのマッピングの仕組みが不要に: 最新のWebおよびAPIプロジェクト、特にJavaScriptで構築されたプロジェクトでは、JSONと直接連携するのが一般的です。一方で、従来のリレーショナル・データには、通常、オブジェクト・リレーショナル・マッピング(ORM)レイヤーが必要です。ORMは、複雑さを増し、バグを導入し、アプリとデータの間に障壁を感じることがあります。JSON Duality Viewsは、データベース内からオブジェクト・リレーショナル・マッピングの役割を担います。したがって、アプリケーション固有のデータ・マッピングがなくなり、シームレスで直感的なデータ・アクセスのみになります。

  • シームレスなデータ構造の拡張と移行: 開発者は、スキーマレスなJSONを使用して迅速に開発を進めることができますが、製品の成熟に伴い、拡張性がネックになります。JSONからリレーショナル・データ・モデルへの移行は、大きな工数を要する可能性があります。そこで、JSON Duality Viewを使用すると、より簡単にで移行できます。JSONから始めて、それがもたらす俊敏性を享受し、要件の拡大に応じて正規化されたリレーショナル設計に移行すると同時に、両方のモデルをアプリケーション、API、分析に提供し続けることができます。大規模な移行やダウンタイムは不要で、ビジネスとともにデータが進化します。

MySQL JSON Duality Viewの主な機能

  • InnoDBの表またはレイクハウスの表を使用してJSON Duality Viewを作成するための新しいDDL構文
  • SELECT文を使用してJSON Duality Viewに問い合せると、結果はJSONドキュメントを生成するだけでなく、変更トラッキングのETAGも計算
  • JSONオブジェクトを使用して、JSON Duality Viewに対してDML操作(INSERT、UPDATE、DELETE)を直接実行
  • データベース内で新しい「ロックレス・オプティミスティック・コンカレント制御」を導入し、ステートレス(REST)操作を介して実行される読取り/書込み操作の競合を回避します
  • JSON Duality Viewのメタデータにアクセスするための新しいInformation_SchemaのView

スタート・ガイド: 機能概要の確認

まず2つのテーブルを用意します。主キーと外部キーで関連付いています。

CREATE TABLE customers (
  customer_id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100)
);
CREATE TABLE orders (
  order_id INT PRIMARY KEY AUTO_INCREMENT,
  customer_id INT,
  product VARCHAR(100),
  amount DECIMAL(10,2),
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

ここにJSON Duality Viewを作成します。 customers をJSONのルートオブジェクトとし、 orders をネストします。

CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW customers_orders_dv AS
SELECT JSON_DUALITY_OBJECT( WITH(INSERT,UPDATE,DELETE)
    '_id': customer_id,
    'customer_name': name,
    'orders': (
        SELECT JSON_ARRAYAGG(
            JSON_DUALITY_OBJECT( WITH(INSERT,UPDATE,DELETE)
                'order_id': order_id,
                'product': product,
                'amount': amount
            )
        )
        FROM orders
        WHERE orders.customer_id = customers.customer_id
    )
)
FROM customers;

いくつかのデータをJSONオブジェクトとしてこの空のビューに直接追加します。

mysql> INSERT INTO customers_orders_dv VALUES (
'{  "customer_name": "Alice",
    "_id": 1,
    "orders": [
      {"order_id": 1, "product": "Laptop", "amount": 1299.99},
      {"order_id": 2, "product": "Mouse", "amount": 19.99}
    ]
}');

正規化されたテーブルを確認します。先程追加したJSONデータが展開されて格納されています。

mysql> SELECT * FROM customers;
+-------------+-------+
| customer_id | name  |
+-------------+-------+
|           1 | Alice |
+-------------+-------+
 
mysql> SELECT * FROM orders;
+----------+-------------+---------+---------+
| order_id | customer_id | product | amount  |
+----------+-------------+---------+---------+
|        1 |           1 | Laptop  | 1299.99 |
|        2 |           1 | Mouse   |   19.99 |
+----------+-------------+---------+---------+

最後に、JSON Duality Viewに対してSELECT文を実行します。JSONドキュメントと計算されたETAGが返ってきます。

mysql> SELECT * FROM customers_orders_dv;
+--------------------------------------------------+
| data                                             |
+--------------------------------------------------+
| {                                                |
|    "_id": 1,                                     |
|    "orders": [                                   |
|      {                                           |
|        "amount": 1299.99,                        |
|        "product": "Laptop",                      |
|        "order_id": 1                             |
|      },                                          |
|      {                                           |
|        "amount": 19.99,                          |
|        "product": "Mouse",                       |
|        "order_id": 2                             |
|      }                                           |
|    ],                                            |
|    "_metadata": {                                |
|      "etag": "e6d40eabf2e070ffd2719c6755d50f1a"  |
|    },                                            |
|    "customer_name": "Alice"                      |
| }                                                |
+--------------------------------------------------+

まとめ

MySQLのJSON Duality Viewは、開発の柔軟性とデータの一貫性の保証を両立する真に統合されたデータ管理および開発体験への大きな一歩です。 

お客様のアプリケーションが成長しても、データモデルを作り換える必要はなく、またデータの重複やETLに悩まされる心配もありません。

詳しくはMySQL JSON Duality Viewドキュメント

アプリケーション開発を強化するシンプルかつ一貫性のあるデータ管理を実現するMySQL 9.4をぜひお試しください。: