Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Oracle Database 23ai Developer Tech Day : Think...

Oracle Database 23ai Developer Tech Day : Think Relational, Stay JSON:Oracleの二面性ビューによる革命

2025/9/10に実施されたOracle Database 23ai Developer Tech DayのJSON Relational Dualityに関するセッションのプレゼンテーションです。

Avatar for oracle4engineer

oracle4engineer PRO

September 11, 2025
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Kaoru Yamakawa ⽇本オラクル株式会社 クラウド事業統括 製品事業統括 AI Data Platform COE本部 Autonomous

    & Analytics ソリューション部 2025/9/10 Think Relational, Stay JSON: Oracleの⼆⾯性ビューによる⾰命
  2. Oracle JSON Relational Duality Oracle Database 23ai JSON Relational Dualityは、

    JSONのシンプルさと リレーショナルのマルチ・ユースケースのパワーを アーキテクチャー的に提供 2 Copyright©2025, Oracle and/or its affiliates
  3. リレーショナル表の正規化 5 Copyright©2025, Oracle and/or its affiliates セッション 出席者 スピーカー

    N M N 1 表 ATTENDEE AID NAME A1 Jill A2 Sanjay SESSION SID NAME ROOM SPID S1 JSON OSLO SP1 S2 SQL TOKYO SP2 SPEAKER SPID NAME PHONE SP1 Carla 650.. SP2 Pascal 408... ATT_SES_MAP AID SID A1 S1 A2 S2 PK PK PK FK FK FK
  4. 6 Copyright©2025, Oracle and/or its affiliates ⨁ データの重複なし、⼀貫性が保証される ⨁ ユースケースの柔軟性

    ⨁ 操作を表現する宣⾔型⾔語︓SQL ⊖ 事前にスキーマ定義が必要︓すべてのユースケースに対する"完全な"理解が必要 ⊖ "正規化"により、ビジネス・オブジェクトが複数の表に分割される ⊖ 通常、SQLはプログラミング⾔語に統合されない ATTENDEE AID NAME A1 Jill A2 Sanjay SESSION SID NAME ROOM SPID S1 JSON OSLO SP1 S2 SQL TOKYO SP2 SPEAKER SPID NAME PHONE SP1 Carla 650.. SP2 Pascal 408... ATT_SES_MAP AID SID A1 S1 A2 S2 リレーショナル︓利点と⽋点
  5. SQLを使⽤したアプリケーションの作成 7 Copyright©2025, Oracle and/or its affiliates 正規化された表を使⽤したアプリケーションの開発は 柔軟性は⾼いが、開発者にとっては必ずしも簡単ではない AT

    T E N D E E S P E A K E R S E S S I O N AT T _ S E S S _ M A P Jillのスケジュールを作成するには、開発者は4つの 各表に対してデータベース操作を実⾏する必要がある SQL SQL SQL SQL SESSION SCHEDULE FOR JILL ( AC M E I NC . ) Time 4 PM Room B405 Speaker Beda Time 2 PM Room A102 Speaker Adam SQL for Dummies JSON Intro
  6. JSON︓出席者のスケジュール 9 Copyright©2025, Oracle and/or its affiliates { "_id" :

    "3245", "name" : "Jill", "company" : "ACME Inc", "schedule" : [ { "code" : "DB12", "session" : "SQL", "time" : "14:00", "room" : "A102", "speaker" : "Adam" }, { "code" : "CODE3", "session" : "JSON", "time" : "16:00", "room" : "B405", "speaker" : "Beda" } ] } すべての必要な値は、出席者ごとに1つのJSONドキュメントに 埋込まれる。 SESSION SCHEDULE FOR JILL ( AC M E I NC . ) Time 4 PM Room B405 Speaker Beda Time 2 PM Room A102 Speaker Adam SQL for Dummies JSON Intro PUT/GET
  7. 出席者のスケジュール: 出席者ごとに1つのJSONオブジェクト 10 Copyright©2025, Oracle and/or its affiliates セッション 出席者

    スピーカー 出席者の階層 { "_id" : "3245", "name" : "Jill", "company" : "ACME Inc", "schedule" : [ { "code" : "DB12", "session" : "SQL", "time" : "14:00", "room" : "A102", "speaker" : "Adam" }, { "code" : "CODE3", "session" : "JSON", "time" : "16:00", "room" : "B405", "speaker" : "Beda" } ] }
  8. セッション・カタログ︓セッションごとに1つのJSONオブジェクト 11 Copyright©2025, Oracle and/or its affiliates { "code" :

    "DB12", "name". : "SQL", "time" : "14:00", "room" : "A102", "speaker" : "Adam", "numAtt" : 12, "roomCap" : 60 } { "code" : "CODE3", "name". : "JSON", "time" : "16:00", "room" : "B405", "speaker" : "Beda", "numAtt" : 75, "roomCap" : 75 } セッションの階層 セッション 出席者 スピーカー
  9. スピーカーのスケジュール︓スピーカーごとに1つのJSONオブジェクト 12 Copyright©2025, Oracle and/or its affiliates { "speakerId" :

    "S1", "name". : "Adam", "phone" : "650-392-000", "schedule" : [ { "code" : "DB12", "session" : "SQL", "time" : "14:00", "room" : "A102" } ] } セッション スピーカー スピーカーの階層
  10. JSON︓利点と⽋点 14 Copyright©2025, Oracle and/or its affiliates ⨁ JSONオブジェクトには、1つのユース・ケースに関するすべての情報が含まれている ⨁

    JSONオブジェクトを取得するには、シンプルな"GET"操作を使⽤する ⨁ JSONはスキーマ・フレキシブル(データが先、スキーマが後) ⊖ 1つの階層は、⾮常に単純なユースケースでのみ有効 ⊖ 実際のアプリケーションではデータの複製が必要 ⊖ JSONは、⼀貫性を保ちつつ、効率的にデータを更新することが⾮常に困難 è 開発者のための初期のシンプルさが⻑期的な複雑さを引き起こす
  11. 16 Copyright©2025, Oracle and/or its affiliates Yes! JSON Relational Duality

    (JSONとリレーショナルの⼆⾯性) (Oracle Database 23aiの新機能)
  12. JSON Relational Duality 17 Copyright©2025, Oracle and/or its affiliates リレーショナル・モデルおよびSQLアクセスの利点を

    提供するために、データは表に⾏として格納される ストレージ形式 テーブル 列1 列2 列3 … … … … … … … … … … … … テーブル 列1 列2 列3 … … … … … … … … … … … … 表 列1 列2 列3 … … … … … … … … … … … … データはJSONドキュメントとしてアクセスすることができ、 各ユースケースに対応したドキュメントをアプリケーション にシンプルに提供することが可能 アクセス形式 { "label1" : "String Anita", "label2" : 5678 "label3" : ”Physics 201", } { "label1" : ”Student Jill", "label2" : 5678 "label3" : ”Science 102", } { "name1" : "String Value1", "name2" : { "name3" : "14:00", "name4" : 1234 } } スキーマが動的または進化しているデータを格納する JSON列を⾏に含めることが可能
  13. 18 Copyright©2025, Oracle and/or its affiliates ビューの構造は⽬的のJSONの構造をミラー化し、簡単に定義可能 CREATE JSON DUALITY

    VIEW attendeeSchedule AS attendee { _id : aid name : name company : company schedule : attendee_sessions [ { session @unnest { code : sid session : sname time : time room : room speaker @unnest { speaker : sname } } } ] }; { "_id" : "3245", "name" : "Jill", "company" : "ACME Inc", "schedule" : [ { "code" : "DB12", "session" : "SQL", "time" : "14:00", "room" : "A102", "speaker" : "Adam" }, … ] } 使い慣れた GraphQL 構⽂を使⽤ スケジュール︓JILL
  14. 19 Copyright©2025, Oracle and/or its affiliates ビューでは、JSONドキュメントに含めるデータを含む表を指定するだけ CREATE JSON DUALITY

    VIEW attendeeSchedule AS attendee { _id : aid name : name company : company schedule : att_sess_map [ { session { code : sid session : sname time : time room : room speaker { speaker : sname } } } ] }; S P E A KE R S E S S I O N AT T E ND E E AT T _ S E S S _ M A P
  15. 20 Copyright©2025, Oracle and/or its affiliates CREATE JSON DUALITY VIEW

    attendeeSchedule AS attendee { _id : aid name : name company : company schedule : att_sess_map [ { session { code : sid session : sname time : time room : room speaker { speaker : sname } } } ] }; ビューでは、JSONドキュメントに含めるデータを含む表を指定するだけ AT T E N D E E AID NAME COMPANY PHONE 3245 Jill ACME Inc 650 … … … … … … … … … … … …
  16. 21 Copyright©2025, Oracle and/or its affiliates ビューでは、JSONドキュメントに含めるデータを含む表を指定するだけ CREATE JSON DUALITY

    VIEW attendeeSchedule AS attendee { _id : aid name : name company : company schedule : att_sess_map @delete @insert @update [ { session { code : sid session : sname time : time room : room speaker { speaker : sname } } } ] }; 更新ルール
  17. 22 Copyright©2025, Oracle and/or its affiliates JSONリレーショナル⼆⾯性ビューの使⽤例 ・SQLまたはドキュメントAPI、REST API等を使⽤してビューにアクセス可能 ・このドキュメントには、ユースケースに必要なすべてのデータが含まれている

    SELECT data FROM attendeeSchedule s WHERE s.data.name = 'Jill'; attendeeSchedule.find({"name":"Jill"}) { "_id" : "3245", "name" : "Jill", "company" : "ACME Inc", "schedule" : [ { "code" : "DB12", "session" : "SQL", "time" : "14:00", "room" : "A102", "speaker" : "Adam" }, { "code" : "CODE3", "session" : "JSON", "time" : "16:00", "room" : "B405", "speaker" : "Beda" } ] } スケジュール︓JILL ドキュメントAPI︓Oracle Database API for MongoDB • Autonomous Database • Oracle Database 21c以降 + ORDS 22.3以降
  18. Oracle Database API for MongoDB MongoDBのクライアント・ドライバやツールからOracle Databaseにシームレスにアクセス可能に • MongoDBの開発者は、同じスキル、ツール、フレームワークをそのまま利⽤可能 •

    追加費⽤なしで利⽤可能 • Oracle Database 21c以降+Oracle REST Data Services (ORDS) 22.3以降 • 全てのAutonomous Database 23 Copyright © 2025, Oracle and/or its affiliates Oracle Database MongoDB Application MongoDB Wire Protocol Oracle Net Oracle Database API for MongoDB { } 対応ドライバ/ツール 最低バージョン C 1.19.0 C# 2.13.0 Compass 1.28.1 Database Tools 100.5.0 Go 1.6.0 Java 4.3.0 MongoSH 0.15.6 Node.js driver 4.1.0 PyMongo 3.12.0 Ruby 2.16.0 Rust 2.1.0 ORDS
  19. 24 Copyright © 2025, Oracle and/or its affiliates 開発者にとって極めてシンプル JSONリレーショナル⼆⾯性ビューは⾮常に簡単にアクセス可能

    • ビューからJSONドキュメントをGET • JSONドキュメントに必要な変更を加える • ビューに対してJSONドキュメントをPUT • 同じデータを共有するすべての⼆⾯性ビューに この変更が即座に反映される • 開発者は不整合を⼼配する必要がない Database App GET Doc PUT Doc Change Doc
  20. ⾰新的なロックフリー同時実⾏制御 Copyright©2025, Oracle and/or its affiliates 25 JSONドキュメントの基礎となるデータベース内のデータが、 最初のドキュメントの読み取りと後続の書き込みの間で 変更された場合、データベースが⾃動的にそれを検出

    • 変更が発⽣していた場合、書込み操作は ⾃動的に拒否され、エラーが返される • アプリケーションは再度読み取りを実⾏し、 変更されたデータに基づいて書込みを再実⾏可能 「楽観的同時実⾏性制御」と呼ばれる Database App GET Doc PUT Doc Change Doc Reject if Stored Data Changed
  21. ⾰新的なロックフリー同時実⾏制御 仕組み 26 Copyright © 2025, Oracle and/or its affiliates

    SQL> SELECT JSON_SERIALIZE(data PRETTY) 2 FROM attendeeSchedule s 3 WHERE s.data.name = ‘Jill’; JSON_SERIALIZE(DATAPRETTY) ----------------------------------------------- { “_metadata” : { “etag” : “D341258911E06C5956538288BAC4CD91”, “asof” : “000000000026E1FC” }, “name” : “Jill”, “_id” : “3245”, “schedule” : [ ETAG︓JSONドキュメントのベースとなるデータベース内の各列の値から 算出されるハッシュ値
  22. 既存のJSONドキュメント・セットをJSON Relational Dualityに移⾏する JSON-to-Dualityマイグレータ(DBMS_JSON_DUALITYパッケージ) • JSON-to-Dualityマイグレータのコンポーネント • JSON-to-Dualityコンバータ • INFER_SCHEMAプロシージャ、GENERATE_SCHEMAプロシージャ、INFER_AND_GENERATE_SCHEMAプロシージャ

    • 既存のJSONドキュメント・セットをサポートするために必要な⼆⾯性ビューとその基礎となる表および索引などの データベース・オブジェクトのDDLを⽣成 • JSON-to-Dualityインポータ • IMPORTプロシージャ、IMPORT_ALLプロシージャ • 既存のJSONドキュメント・セットを⼆⾯性ビューにインポート 27 Copyright © 2025, Oracle and/or its affiliates { key1 : value1, key2 : value2 } { key1 : value1, key2 : value2 } { key1 : value1, key2 : value2 } 1. JSON-to-Dualityコンバータを実⾏して データベース・オブジェクトを作成 2. JSON-to-Dualityインポータを実⾏して JSONドキュメント・セットをインポート 列1 列2 列3 … … … … … … … … … … … … 列1 列2 列3 … … … … … … … … … … … … 列1 列2 列3 … … … … … … … … … … … … Dualityビュー 表 JSONドキュメント・セット
  23. 28 Copyright©2025, Oracle and/or its affiliates JSON Relational Duality︓データ管理の未来 JSONのシンプルさとリレーショナルのパワーを両⽴:

    • ⼀貫性が保証された、無制限のJSONドキュメント・シェイプ • 新規および既存のリレーショナル・データベース上にドキュメント中⼼のアプリケーションを構築 • ユースケースに応じて、リレーショナル・データとJSONデータの両⽅に対する効率的なCRUD • リレーショナル・システムと⾮リレーショナル・システムの間のJSONデータのシームレスなレプリケーション • 超⾼速分析、レポート、⼀括操作のための完全なパラレルSQL • バージョン管理された⼆⾯性ビューにより、データベースからアプリケーションを分離し、変更管理を簡素化 • プライバシー・クリティカルなワークロード向けにカスタマイズされ、⼀元化されたフィールド・レベルのJSONセキュリティ
  24. JSON Relational Duality導入前 DBの運⽤管理、DBストレージ、DBデータ、アプリケーション/ツールが全て別々、データ連携にはETLが必要 Copyright©2025 Oracle and/or its affiliates 29

    { name1 : value1, name2 : { name3 : 100, name4 : 14:00 } } { name1 : value1, name2 : { name3 : 100, name4 : 14:00 } } { name1 : value1, name2 : { name3 : 100, name4 : 14:00 } } SQL Interface リレーショナル (表) JSON (ドキュメント) ドキュメントDBを ベースとした アプリケーション リレーショナルDBを ベースとした アプリケーション SELECT INSERT UPDATE DELETE Oracle Database ドキュメントDB ETL REST API find() insertOne() updateOne() deleteOne() insertMany() updateMany() deleteMany() Query API GET PUT BIツール
  25. JSON Relational Duality導入後 DBの運⽤管理、DBデータ、DBストレージを⼀つに集約しETL不要、アプリケーションは⽤途によって使い分け Copyright©2025 ,Oracle and/or its affiliates 30

    REST API { name1 : value1, name2 : { name3 : 100, name4 : 14:00 } } { name1 : value1, name2 : { name3 : 100, name4 : 14:00 } } { name1 : value1, name2 : { name3 : 100, name4 : 14:00 } } リレーショナル (表) JSON (⼆⾯性ビュー) JSON Relational Duality ストレージ Oracle Database 23ai Query API Oracle Database API for MongoDB ドキュメントDBを ベースとした アプリケーション find() insertOne() updateOne() deleteOne() insertMany() updateMany() deleteMany() GET PUT ORDS SQL Interface リレーショナルDBを ベースとした アプリケーション SELECT INSERT UPDATE DELETE BIツール
  26. 31 Copyright©2025, Oracle and/or its affiliates Oracle Database 23ai JSON

    features Fast, refreshable JSON materialized views Oracle Database 23ai - the leading database for JSON JSON type domains Multivalue any-type index AI vector support in JSON type JSON in property graphs JSON / Relational Duality JSON data type PL/SQL record/collection JSON mappers JSON Schema validation and describe { } ✓ ✗ JSON collection tables JSON search index sync auto Support for MongoDB’s aggregation pipeline Augmentation for JSON Relational Duality $sql command Improved Exadata smart scans SQL Boolean to JSON mapping JSON external tables Indexes in MongoDB API: singleton index, array index, TTL index, search index $match $match $match
  27. 32 Copyright©2025, Oracle and/or its affiliates 参考情報 Try Oracle Database

    23ai for Free oracle.com/database/free/ Oracle Autonomous Database Free oracle.com/autonomous-database/free-trial/ LiveLabs ivelabs.oracle.com Oracle Database 23ai for Free Try the “SQL Meets JSON in Oracle Database: Unify Data with Duality Views, JSON Collections & MongoDB API” Live Lab