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

[DBWT-Keynote] 基調講演: データ・セントリックなAppDevの未来像

[DBWT-Keynote] 基調講演: データ・セントリックなAppDevの未来像

2023年4月12日 (水)開催、Oracle Database World Tokyo [DBWT] 基調講演の資料です。

DX世代のアプリケーションにより、最新のデータ・テクノロジーを使って、多彩な体験やインサイトから高い価値が生み出されています。その一方で、採用されるデータ・テクノロジーの広がりとともに、アプリ開発の複雑化とコスト負担が膨らみ、課題となっていることも否めません。

オラクルのデータおよびインメモリ技術担当シニア・バイス・プレジデントであるティルタンカー・ラヒーリが、完全かつシンプルなデータベース戦略を活用して複雑さを解消し、課題やチャンスに迅速に対応できるアプリケーションを構築・実行する方法について説明します。また、データベースの今後の展望をお伝えします。

oracle4engineer

April 19, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. 従来の業務アプリケーション 従来のアプリケーション Copyright © 2023, Oracle and/or its affiliates 2

    • OLTPをリレーショナル・データベースで実⾏ • 分析をリレーショナル・データウェアハウスで実⾏ 新しいデータタイプ 従来の分析 データ ウェアハウス 新しいデータタイプ 従来のトランザクション リレーショナル
  2. 最新のデータドリブン・アプリケーションは新世代のデータテクノロジーを使⽤ • ユーザーにはより魅⼒的なエクスペリエンスを、企業にはより⼤きな価値を提供 最新のアプリケーション Copyright © 2023, Oracle and/or its

    affiliates 3 新しいタイプのワークロード 地理的に 分散 マイクロ・ サービス ブロック チェーン IoT 新しいデータタイプ 新しいタイプの分析 グラフ レイクハウス データ ウェアハウス 機械学習 ドキュメント 空間 リレーショナル { JSON } 新しいタイプのデータ テキスト
  3. 最新のアプリケーションが基盤とするさまざまなデータ技術が拡がるにつれ、最新のアプリ開発と運⽤が ますます複雑化 複雑化する最新のアプリケーション Copyright © 2023, Oracle and/or its affiliates

    4 新しいタイプのワークロード 地理的に 分散 マイクロ・ サービス ブロック チェーン IoT 新しいデータタイプ 新しいタイプの分析 グラフ レイクハウス データ ウェアハウス 機械学習 ドキュメント 空間 リレーショナル { JSON } 新しいタイプのデータ テキスト
  4. 最新のアプリケーションを構築するアプローチの1つは、アプリケーションごとに⽬的別データベースを⽤意する • 各⽬的別データベースは、アプリケーションの特定の要件に対して優れている ⽬的別データベースを使⽤するアプローチ Copyright © 2023, Oracle and/or its

    affiliates 5 MongoDB ドキュメント 空間 新しいタイプのデータ Elastic Search Neo4j グラフ 新しいタイプのワークロード 地理的に分散 マイクロ・ サービス AWS QLDB ブロックチェーン DynamoDB IoT 新しいタイプの分析 Databricks レイクハウス ウェアハウス 機械学習 PostgreSQL リレーショナル さまざまなアプリケーションで、複数のデータベース間での 分散実⾏ と データの移動 が必要 • 開発者とIT部⾨はインテグレーション作業に時間を費やすことに
  5. Copyright © 2023, Oracle and/or its affiliates 6 あらゆる規模で あらゆるユースケースに対応する

    最新アプリケーションと分析を 簡単に開発・実⾏できるようにします オラクルのデータベース・ビジョン
  6. Copyright © 2023, Oracle and/or its affiliates 7 あらゆるデータ管理ニーズに対応する完全かつシンプルなプラットフォーム ビジョンを実現する⽅法

    コンバージド・データベース 最新のあらゆるデータ・タイプ、ワークロード、 開発スタイルを完全サポート データ⼀貫性、スケーラビリティ、 可⽤性やセキュリティーに対し盤⽯ 完全 Autonomous Database Exadata CloudのコンバージドDBは、⾃⼰稼働、 ⾃⼰保護、および⾃⼰修復サービスを提供 あらゆる 規模のあらゆるアプリケーションの 開発や分析を実⾏するための 最もシンプルなデータベース シンプル * コンバージド = 統合型
  7. Copyright © 2023, Oracle and/or its affiliates 8 コンバージド・データベースは新製品ではありません •

    最新のアプリケーションのあらゆるデータニーズに対応するために進化したOracle Databaseが、 最⾼のサポートを提供 • 何千⼈ものエンジニアが何⼗年にもわたって取り組んできた進化が、Oracle DB 19cに集約 オプションは不要 - すべてが揃っています オラクルのコンバージド・データベース 地理的に 分散 マイクロ ・サービス ブロック チェーン IoT グラフ レイクハウス データ ウェアハウス 機械学習 ドキュメント 空間 リレーショナル テキスト 新しいタイプのワークロード 地理的に分散 マイクロ ・サービス ブロック チェーン IoT 新しいデータタイプ 新しいタイプの分析 グラフ レイクハウス データ ウェアハウス 機械学習 ドキュメント 空間 リレーショナル { JSON } 新しいタイプのデータ テキスト
  8. Copyright © 2023, Oracle and/or its affiliates 9 インテグレーション作業に代わってイノベーション推進にフォーカス 開発者とIT部⾨はインテグレーション作業の代わりに

    イノベーションに注⼒ • 開発者はアプリケーションに合わせてSQL⽂で対応 - アーキテクチャに応じたデータベースを個別に選択する必要はない 地理的に 分散 マイクロ ・サービス ブロック チェーン IoT グラフ レイクハウス データ ウェアハウス 機械学習 ドキュメント 空間 リレーショナル テキスト 新しいタイプのワークロード 地理的に分散 マイクロ ・サービス ブロック チェーン IoT 新しいデータタイプ 新しいタイプの分析 グラフ レイクハウス データ ウェアハウス 機械学習 ドキュメント 空間 リレーショナル { JSON } 新しいタイプのデータ テキスト
  9. Copyright © 2023, Oracle and/or its affiliates 10 オラクルのコンバージド・データベースは顧客に選択肢を提供 コンバージドとは、データが1か所に集約されたデータベースでなければならないという意味ではありません

    • コンバージド・データベースでは、アプリケーションごとにデータ・アーキテクチャを選択可能 新しいタイプのデータ 新しいタイプのワークロード 新しいデータタイプ 新しいタイプの分析 グラフ 地理的に分散 マイクロ ・サービス ブロック チェーン IoT レイクハウス データ ウェアハウス 機械学習 ドキュメント 空間 テキスト 検索 選択 選択 選択 選択 選択 選択 選択 選択 選択 選択 選択 リレーショナル 選択
  10. シンプルな トランザクション・ マイクロサービス シンプルな アプリケーション層 キャッシュ Oracle Database 23c Copyright

    © 2023, Oracle and/or its affiliates 12 すべてのデータドリブン・アプリケーションの開発・実⾏をシンプルにするというミッションを推進 シンプルに リレーショナルと JSONの統合 シンプルに グラフとしての データにアクセス シンプルな データドリブンの JavaScript
  11. アプリケーション開発の例︓学⽣スケジュール Copyright © 2023, Oracle and/or its affiliates 15 このアプリケーションで使⽤するデータは、4つの正規化されたリレーショナル表に格納することができます

    学⽣ 学⽣ID 学⽣名 学⽣情報 S3245 Jill … S8524 John … S1735 Jane … S3409 Jim … 講師 講師ID 講師名 講師情報 T123 Anika … T543 Adam … T789 Anita … T612 Alex … コース コースID コース名 教室 時間 講師ID C12 MA_01 A102 14:00 T543 C34 SCI_02 B405 16:00 T789 C56 HS_02 A102 14:00 T612 C78 LA_01 A256 12:00 T543 学⽣_コース 学⽣ID コースID S3245 C123 S8524 C567 S3245 C345 S3409 C123
  12. アプリケーション開発の例︓学⽣スケジュール Copyright © 2023, Oracle and/or its affiliates 16 開発者は、

    Jillのスケジュールを読み書きするのに 理想的には、 ⼀回のデータベース操作で アプリケーションに必要なすべてのデータを受け取りたい JILLの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 2:00 PM 教室 A102 講師 Adam 数学 101 サイエンス 102 4つの表それぞれから、読み取りと 書き込みを⾏うSQLを記述する代わりに…
  13. アプリケーション開発の例︓学⽣スケジュール Copyright © 2023, Oracle and/or its affiliates 17 Jillのスケジュールを、正規化された表の代わりにJSONドキュメントとして保存することで

    シンプルなGET/PUT APIでスケジュールの読み書きが可能 JILLの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 2:00 PM 教室 A102 講師 Adam 数学 101 サイエンス 102 単⼀のJSONドキュメント PUT GET { student : Jill, schedule : [ { time : 14:00, course : Math 101, room : A102, teacher : Adam }, { time : 16:00, course : Science 102, room : B405, teacher : Anita } ] }
  14. Oracleはドキュメント・データベース Copyright © 2023, Oracle and/or its affiliates 18 Oracleは元々、JSONドキュメントを保存するための

    最適なデータベース ドキュメントネイティブAPIの提供 • Simple Document Access API (SODA) • MongoDB互換API ドキュメントへの標準SQLアクセスも提供 • パラレルSQLを含む ドキュメント間の完全なACIDの⼀貫性 JILLの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 2:00 PM 教室 A102 講師 Adam 数学 101 サイエンス 102 JACKの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 6:00 PM 教室 A115 講師 Alex 物理 サイエンス 102
  15. JILLの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 2:00

    PM 教室 A102 講師 Adam 数学 101 サイエンス 102 JACKの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 6:00 PM 教室 A115 講師 Alex 物理 サイエンス 102 ドキュメント・データベースの限界 Copyright © 2023, Oracle and/or its affiliates 19 しかし、ドキュメントを保存形式として使⽤する場合、 データの重複の問題が発⽣ 各⽣徒のスケジュールにコースや講師の情報が重複 して保存される 重複データの問題点 • 保存効率が悪い • 更新コストが⾼い • ⼀貫性を保つことが困難
  16. JILLの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 2:00

    PM 教室 A102 講師 Adam 数学 101 サイエンス 102 JACKの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 6:00 PM 教室 A115 講師 Alex 物理 サイエンス 102 同じデータで複数のユースケースに対応 Copyright © 2023, Oracle and/or its affiliates 20 成功したアプリケーションは、時間の経過とともに 必然的にユースケースが増えていく 同じデータを他の新しいユースケースでも使⽤す るためデータの重複がさらに増えていく 例えば、講師のスケジュールアプリケーションでは、 講師をリーフではなく、ドキュメントのルートとして 配置 • また、学⽣ドキュメントと同じコースデータの⼀部を 共有します。 ANITAの講師スケジュール 時間 2:00 PM 教室 A312 時間 4:00 PM 教室 B405 時間 6:00 PM 教室 A151 サイエンス 102
  17. データ重複の問題をリレーショナルが回避 Copyright © 2023, Oracle and/or its affiliates 21 リレーショナル・データベースは、

    データを正規化することで、データの重複を回避 しかし、この場合、1つの論理的なアプリケーション 操作を実⾏するために、複数のSQL⽂を書いて実 ⾏しなければならないというトレードオフが発⽣ JILLの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 2:00 PM 教室 A102 講師 Adam 数学 101 サイエンス 102 JACKの学⽣スケジュール 時間 4:00 PM 教室 B405 講師 Anita 時間 6:00 PM 教室 A115 講師 Alex 物理 サイエンス 102 ANITAの講師スケジュール 時間 2:00 PM 教室 A312 時間 4:00 PM 教室 B405 時間 6:00 PM 教室 A151 サイエンス 102
  18. 理想は、JSONとリレーショナルの両⽅の利点を得ること Copyright © 2023, Oracle and/or its affiliates 22 JSON

    • アプリケーション操作への簡単な マッピング • アジャイルなスキーマレス開発 • 階層型データ形式 • アプリケーション・データ・クラスへの 簡単なマッピング プラス リレーショナル • データ重複なし • ユースケースへの柔軟な対応 • 問合せ機能 • ⼀貫性
  19. Copyright © 2023, Oracle and/or its affiliates 23 JSON Document

    Relational Duality JSONドキュメントとリレーショナルの⼆⾯性 提供開始 Oracle Database 23c
  20. JSON Document Relational Duality Copyright © 2023, Oracle and/or its

    affiliates 25 データは表の⾏として保存され、リレーショナルモデルや SQLアクセスの利点を提供 ⾏にJSON列を含めることができ、スキーマが動的に 変化・進化するデータを格納することができます ストレージ形式 表 Col 1 Col 2 Col 3 … … … … … … … … … … … … 表 Col 1 Col 2 Col 3 … … … … … … … … … … … … 表 Col 1 Col 2 Col 3 … … … … … … … … … … … … JSONドキュメントとリレーショナルの⼆⾯性
  21. Copyright © 2023, Oracle and/or its affiliates 26 データの読み書きを JSONドキュメントで⾏えるの

    で、アプリケーションの開発でドキュメントのシンプル さを活かすことが可能 ストレージ形式 表 Col 1 Col 2 Col 3 … … … … … … … … … … … … 表 Col 1 Col 2 Col 3 … … … … … … … … … … … … 表 Col 1 Col 2 Col 3 … … … … … … … … … … … … アクセス形式 { 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 } } GET/PUT Doc JSON Document Relational Duality JSONドキュメントとリレーショナルの⼆⾯性
  22. JSON Relational Duality Viewの定義 - GraphQL の⽂法を利⽤ Copyright © 2023,

    Oracle and/or its affiliates 27 JSON Duality Views(JSON⼆⾯性ビュー)を使い、正規化された⾏をJSONドキュメントに組み⽴てる レシピを宣⾔ CREATE JSON DUALITY VIEW student_schedule AS { student : student_id : schedule : [ { { time : course : course_id : room : teacher : } } ] }; ビューの構造は、⽬的のJSON オブジェクトの構造を反映 学 ⽣ ス ケ ジ ュ ー ル : J I L L { student : Jill, student_id : S3245, schedule : [ { time : 14:00, course : Math 101, course_id : C12, room : A102, teacher : Adam }, …. ] }
  23. JSON Relational Duality Viewの定義 – GraphQL の⽂法を利⽤ Copyright © 2023,

    Oracle and/or its affiliates 28 JSONドキュメントの データを含む表を指定 講師 コース 学⽣ 学⽣_コース CREATE JSON DUALITY VIEW student_schedule AS student { student : student_id : schedule : student_courses [ { course { time : course : course_id : room : teacher @unnest { teacher : } } } ] };
  24. JSON Relational Duality Viewの定義 - GraphQL Syntaxの使⽤法 Copyright © 2023,

    Oracle and/or its affiliates 29 学⽣ 学⽣ID (STUID) 学⽣名 (SNAME) 学⽣情報 S3245 Jill … S8524 John … S1735 Jane … S3409 Jim … CREATE JSON DUALITY VIEW student_schedule AS student { student : sname student_id : stuid schedule : student_courses [ { course { time : course : cname course_id : cid room : teacher @unnest { teacher : tname } } } ] }; 各JSONプロパティ名と、その値を 取得する表の列を指定します
  25. 開発者向けに極限までシンプルに Copyright © 2023, Oracle and/or its affiliates 30 JSON

    Duality Views(JSON⼆⾯性ビュー)により、 RESTを使⽤して⾮常に簡単に読み取り可能 • ViewからドキュメントをGETするだけ データベース ドキュメントをGET GET school.edu/student_schedule?q={"student":{"$eq":"Jill"}} アプリケーション
  26. 開発者向けに極限までシンプルに Copyright © 2023, Oracle and/or its affiliates 31 JSON

    Duality Views(JSON⼆⾯性ビュー)により、 RESTを使⽤して⾮常に簡単に書き込み可能 • アプリケーションがドキュメントを編集し • PUTでドキュメントをViewに戻す データベースが⾃動的に新しいドキュメントの変更点を 検出し、元となる⾏を修正 • 同じデータを共有するすべての⼆⾯性ビューで、この変 更が直ちに反映 • データの重複や⽭盾が発⽣しない ドキュメントをPUT ドキュメントを 変更 データベース アプリケーション PUT school.edu/student_schedule/:stuid ドキュメントをGET
  27. オブジェクト・リレーショナル・マッピングツールと同じ? いえ、よりシンプルかつ強⼒です Copyright © 2023, Oracle and/or its affiliates 32

    JSONマッピングをデータベースにネイティブに 組込み • 表からJSONへのマッピングは⼀元化され、 アプリケーションの⾔語にも依存しない • データベースで強⼒なJSONクエリが可能 • すべてのユースケース・データを1往復で取得・送信 • アプリケーションから元となる表スキーマを隠す 宣⾔型 – どうやるかでなく、何がしたいか
  28. オブジェクト・リレーショナル・マッピングツールと同じ? いえ、よりシンプルかつ強⼒です Copyright © 2023, Oracle and/or its affiliates 33

    新たなロックフリーの同時実⾏性制御を実現 • RESTのようなステートレスプロトコルが可能 • GETとPUTの間でデータがロックされないので、 インタラクティブなアプリケーションに最適 • ⼈間が考えている間にロックされない • ⾏の直接更新とドキュメントの更新の間の⼀貫性 を⾃動的に確保 JSONマッピングをデータベースにネイティブに 組込み • 表からJSONへのマッピングは⼀元化され、 アプリケーションの⾔語にも依存しない • データベースで強⼒なJSONクエリが可能 • すべてのユースケース・データを1往復で取得・送信 • アプリケーションから元となる表スキーマを隠す
  29. JSON-Relational Duality は、両⽅のそれぞれの⻑所を提供 Copyright © 2023, Oracle and/or its affiliates

    34 開発者は、データをリレーショナルとして 保存することができます。 • 標準的なSQLを使⽤し、リレーショナルとしてアクセス • JSON⼆⾯性ビューを使⽤し、ドキュメントとしてアクセス 表 1 2 3 … … … … … … … … … … … … 表 1 2 3 … … … … … … … … … … … … 表 1 2 3 … … … … … … … … … … … … SQL API ドキュメント API データスキーマがわかっている場合に最適
  30. JSON-Relational Duality は、両⽅のそれぞれの⻑所を提供 Copyright © 2023, Oracle and/or its affiliates

    35 開発者は、データをドキュメントとして保存すること ができます。 • JSONドキュメントにリレーショナルビューを作成し JSON Data Guide を通じリレーショナルとして アクセス • SQL、SODA、MongoDB APIを使ってドキュメン トとしてアクセス 表 1 2 3 … … … … … … … … … … … … 表 1 2 3 … … … … … … … … … … … … 表 1 2 3 … … … … … … … … … … … … SQL API ドキュメント API スキーマが動的に変化・進化する場合に最適 { name1 : String Value1, name2 : { name3 : 14:00, name4 : 1234 } }
  31. パラダイム・シフト Copyright © 2023, Oracle and/or its affiliates 36 ドキュメントとリレーショナルが完全統合

    リレーショナルの利点プラスJSONの利点をすべて享受 ドキュメントDB 2.0 + リレーショナルDB 2.0 ドキュメントDB リレーショナルDB Document Relational Duality
  32. Copyright © 2023, Oracle and/or its affiliates Marc Staimer, Senior

    Analyst, Wikibon, says: ”Oracle Database 23c definitively ends the long-running ʻrelational vs. documentʼ debate with JSON Relational Duality delivering the best of both worlds” 37
  33. Copyright © 2023, Oracle and/or its affiliates Carl Olofson, Research

    VP, Data Management Software, IDC, says: ”JSON Relational Duality brings simplicity and flexibility to modern app dev … No other databases offer such a revolutionary solution” 38
  34. エンティティ間の接続はどこにでも存在 Copyright © 2023, Oracle and/or its affiliates 40 ソーシャル・ネットワーク

    銀⾏取引 顧客1 顧客2 外部組織1 外部組織3 所持 振 込 顧客N 輸送ネットワーク サプライチェーン・ネットワーク モノとモノ、⼈と⼈のインタラクション 振 込 グラフを使えば、つながりに内在する情報から簡単に価値を得ることが可能
  35. リレーショナル問合せ Copyright © 2023, Oracle and/or its affiliates 41 SQL

    JOINSは、エンティティ間に単純な静的接続がある場合に、 エンティティ間をナビゲートするのに最適 例えば、注⽂番号123のすべての注⽂⾏を検索 銀⾏⼝座BからEへの送⾦を検索 ID 残⾼ A B 20000 … … … E 35000 FROM_ACC TO_ACC AMOUNT … … … B E 1050 … … … 1050 BANK_ACCOUNTS BANK_TRANSFERS -- transfers directly from 'B' to 'E' SELECT … FROM bank_accounts fr_acc, bank_accounts to_acc, bank_txn trn WHERE trn.from_acc = fr_acc.id AND trn.to_acc. = to_acc.id AND fr_acc.id = 'B' AND to_acc.id = 'E';
  36. リレーショナル問合せ Copyright © 2023, Oracle and/or its affiliates 42 しかし、⼝座「B」から⼝座「E」まで、最⼤2つまでの中間⼝座

    を経由して資⾦が流れた送⾦の⼝座をすべて返すSQL JOINを書くのは、⾮常に複雑 • この場合、中間⼝座のすべての組み合わせを処理するた めに、12個の結合と3個の結合を持つSQL⽂が必要に • 中間⼝座が多くなると複雑さが急激に増加 -- transfers indirectly from 'B' to 'E' SELECT v1.id as account_id1 , v2.id as account_id2 FROM bank_accounts v1 , bank_txns btx, bank_accounts v2 WHERE (v1.id = btx.from_acc AND v2.id = btx.to_acc) AND v1.id= 'B' AND v2.id= 'E' UNION ALL SELECT v1.id as account_id1 , v2.id as account_id2, FROM bank_accounts v1 , bank_txns btx, bank_accounts bc2, bank_txns btx2 , bank_accounts v2 WHERE (v1.id = btx.from_acc AND bc2.id = btx.to_acc AND bc2.id = btx2.from_acc AND v2.id = btx2.to_acc ) AND v1.id= 'B' AND v2.id= 'E' UNION ALL SELECT v1.id as account_id1 ,v2.id as account_id2 FROM bank_accounts v1 , bank_txns btx, bank_accounts bc2, bank_txns btx2 , bank_accounts bac4, bank_txns btx5 , bank_accounts v2 WHERE (v1.id = btx.from_acc AND bc2.id = btx.to_acc AND bc2.id = btx2.from_acc AND bac4.id = btx2.to_acc AND bac4.id = btx5.from_acc AND v2.id = btx5.to_acc ) AND v1.id= 'B' AND v2.id= 'E' ;
  37. シンプルなグラフ Copyright © 2023, Oracle and/or its affiliates 43 エンティティ間のマルチホップ接続をナビゲートする場合、接続をグラフ

    として考える⽅が簡単 例えば、⼝座は頂点で、転送はエッジに B E ⼝座 ⼝座 振込 グラフの頂点とエッジは、それぞれプロパティ (列値)を持つことが可能 B E プロパティ ID= ʻBʼ 残⾼ = 2000 プロパティ ID = ʻZʼ 残⾼ = 3500 プロパティ Amount = 1050
  38. Oracle Databaseのグラフ機能 Copyright © 2023, Oracle and/or its affiliates 44

    Oracleはすでに、 SQLに似たPGQLというオープンソースの グラフ⾔語を使って、グラフ問合せを実装 インメモリでの並列グラフ処理と60以上の組込みのグラフ・アルゴ リズムを提供 • コミュニティ検出 • 構造体の評価 • ランキングとウォーキング • パス検索 • etc. D A C B Z E F H G
  39. Oracle Databaseのグラフ機能 Copyright © 2023, Oracle and/or its affiliates 45

    Oracle Database 23cで標準SQL を使⽤して プロパティ・グラフ問合せを記述可能に • SQL Property Graphs Queries (SQL/PGQ ) が ISO SQL 標準 (ISO/IEC 9075-16) の⼀部に SQLプロパティ・グラフは、既存のリレーショナル・データ またはJSONデータの上に定義されたビュー • グラフデータ表現を別途作成する煩雑さがない • リアルタイムのOLTPデータに対して問合せを実⾏可能に • OLTPレベルの並⾏性とデータ⼀貫性を維持 D A C B Z E F H G
  40. Oracle Databaseのグラフ機能 Copyright © 2023, Oracle and/or its affiliates 46

    グラフ問合せは、次のような質問に答えることが可能 • 「B」⼝座から「E」⼝座へ、3つ以下の中間⼝座を経由して資⾦が 流れたか︖ • ⼈物「A」と⼈物「F」は、ソーシャルネットワーク上の3⼈以下の友⼈ を通じてつながっているか︖ • この⼈に似た顧客が最近閲覧・購⼊したアイテムは何か︖ • 部品構成表はどう関連が構成されているか︖ D A C B Z E F H G
  41. プロパティ・グラフ・ビューの定義-頂点を指定 Copyright © 2023, Oracle and/or its affiliates 47 プロパティは頂点表の列

    グラフ名 頂点データを 格納する表 CREATE PROPERTY GRAPH bank_graph VERTEX TABLES ( bank_accounts as accounts PROPERTIES (id, balance) )
  42. プロパティ・グラフ・ビューの定義-エッジを指定 Copyright © 2023, Oracle and/or its affiliates 48 エッジの関係を定義するための構⽂

    エッジデータを格納する表 CREATE PROPERTY GRAPH bank_graph VERTEX TABLES ( bank_accounts as accounts PROPERTIES (id, balance) ) EDGE TABLES ( bank_transfers SOURCE KEY (from_acc) REFERENCES ACCOUNTS(ID) DESTINATION KEY (to_acc) REFERENCES ACCOUNTS(ID) PROPERTIES (amount, to_acc) );
  43. SQLプロパティ・グラフ問合せの例 Copyright © 2023, Oracle and/or its affiliates 50 ⼝座「B」から⼝座「E」まで、3ホップまでのパスをすべて検索

    開始および終了頂点(⼝座) 頂点は()内 bank_graph の頂点は⼝座 SELECT FROM GRAPH_TABLE ( bank_graph MATCH (v1)-[e is BANK_TRANSFERS]->{1,3} (v2) WHERE v1.id = ‘B’ AND v2.id = ‘E’ );
  44. SQLプロパティ・グラフ問合せの例 Copyright © 2023, Oracle and/or its affiliates 51 ⼝座「B」から⼝座「E」まで、3ホップまでのパスをすべて検索

    エッジは[]内 bank_graphでは、「銀⾏振込」 SELECT FROM GRAPH_TABLE ( bank_graph MATCH (v1)-[e is BANK_TRANSFERS]->{1,3} (v2) WHERE v1.id = ‘B’ AND v2.id = ‘E’ );
  45. SQLプロパティ・グラフ問合せの例 Copyright © 2023, Oracle and/or its affiliates 52 ⼝座「B」から⼝座「E」まで、3ホップまでのパスをすべて検索

    パスの⻑さは{}内 1ホップから3ホップまで SELECT FROM GRAPH_TABLE ( bank_graph MATCH (v1)-[e is BANK_TRANSFERS]-> {1,3} (v2) WHERE v1.id = ‘B’ AND v2.id = ‘E’ );
  46. SQLプロパティ・グラフ問合せの例 Copyright © 2023, Oracle and/or its affiliates 53 ⼝座「B」から⼝座「E」まで、3ホップまでのパスをすべて検索

    返す列 この場合は、⼝座BとEの間のパスにあ る銀⾏⼝座のカンマ区切りのリスト SELECT path FROM GRAPH_TABLE ( bank_graph MATCH (v1)-[e is BANK_TRANSFERS]-> {1,3} (v2) WHERE v1.id = ‘B’ AND v2.id = ‘E’ COLUMNS (LISTAGG(e.to_acc, ',') as path) );
  47. シンプルなデータドリブンのJavaScriptアプリケーション Copyright © 2023, Oracle and/or its affiliates 55 データベース内のJavaScriptストアドプロシー

    ジャは、広く使われるJavaScript⾔語を使⽤し て、ハイパフォーマンスなデータドリブン・アプリケー ションを簡単に作成することが可能に • PL/SQL、Javaに並ぶ、第⼀級のサーバーサイド 開発⾔語 JavaScriptのストアドプロシージャでデータベース への往復を減らす • 例えばブラウザのJavaScriptなど、クライアントから の往復を減らすことが可能 • GraalVMによる⾼速な多⾔語エンジン (MLE)で実⾏ JavaScript コード /* Add a personalized greeting to a table */ CREATE PROCEDURE insertGreeting ("name" varchar2) AS MLE LANGUAGE JAVASCRIPT q’~ session.execute(`INSERT INTO greetings VALUES ( “Hello ” || :name)` [ name ] ); ~’ ; /
  48. Copyright © 2023, Oracle and/or its affiliates 56 True Cache

    シンプルな アプリケーション層キャッシュ
  49. 中間層データ・キャッシュ Copyright © 2023, Oracle and/or its affiliates 57 ハイエンドのアプリケーションでは、アプリケーションのレスポンスタイムを向上さ

    せ、バックエンドのデータベースの負荷を軽減するために、中間層のキャッ シュを構成することがよくある 現在の中層データ・キャッシュは、キャッシュではない • ⼿動で管理する⽭盾したデータベースのサブセット これをキャッシュと呼ぶのは、ファイルシステムを データベースと呼ぶようなものです アプリケーション 中間層キャッシュ データベース
  50. True Cache Copyright © 2023, Oracle and/or its affiliates 58

    Oracle True Cacheは、キャッシュとしてデプロイされる、軽量 かつほぼディスクレスの Oracle Databaseインスタンス 任意のSQL問合せを、バックエンドのデータベースではなく、 簡単にキャッシュに誘導可能 • 独⾃の透過型フル機能データ・キャッシュ 問合せで要求されたデータのうち、True Cacheで⾒つからな かったものは、バックエンドのデータベースから⾃動的に取得 • データの変更はリアルタイムでTrue Cacheに⾃動的に伝播 • True Cacheは、ある時点における⼀貫性を維持 偽のキャッシュではなく、True(真の) Cache True Cacheインス タンス バックエンドの データベース 中間層
  51. True Cacheのユースケース Copyright © 2023, Oracle and/or its affiliates 59

    True Cacheは、次のケースでデプロイ可能 リージョン間 キャッシュ 中間層 キャッシュ エッジ・ キャッシュ クラウド間 キャッシュ
  52. Copyright © 2023, Oracle and/or its affiliates 60 アプリケーション マイクロサービス

    マイクロサービス マイクロサービス マイクロサービス データベース内 トランザクション・イベント・キュー イベント・プラットフォーム シンプルな トランザクション・マイクロサービス
  53. ⾮同期イベントを利⽤したマイクロサービス・アプリケーションの構築 Copyright © 2023, Oracle and/or its affiliates 61 最新のアプリケーションは多くの場合、マイクロサービスとして構築

    • ⾮同期イベントを利⽤してアクションを開始する、 複数の疎結合のサービスで構成 これらのイベントは、Kafkaなどのイベントプラットフォームを使って 公開されます。 アプリケーション マイクロサービス マイクロサービス マイクロサービス マイクロサービス マイクロサービス イベント・プラットフォーム
  54. ⾮同期イベントを利⽤したマイクロサービス・アプリケーションの構築 Copyright © 2023, Oracle and/or its affiliates 62 イベント・ハンドラがマイクロサービス間でデータ整合性を保つためには、

    以下のような問題を処理しなければならないため⾯倒 • プロセスやネットワークの障害 • 同時変更 • バックアップからの復元 • 災害時のフェイルオーバー コード化された イベント・ハンドラ
  55. ACIDとトランザクションのメリット Copyright © 2023, Oracle and/or its affiliates 63 原⼦性トランザクションとACIDの利点はよく知られていますが、忘れられがち…

    NoSQLデータベースは当初、トランザクションは不要で有害であると主張していた • しかし、NoSQLデータベースのユーザーは、アプリケーション側でデータ整合性をコーディングするのは、エラーが発⽣し やすく、時間がかかることを経験から学びました • 現在、ほぼすべてのNoSQLデータベースが、ある程度のトランザクションを実装 トランザクション 難易度が⾼く、 エラーが出やすい アプリケーション 簡単で信頼性の⾼い アプリケーション
  56. トランザクションとKafka Copyright © 2023, Oracle and/or its affiliates 64 Kafkaの新しいバージョンはトランザクションをサポート

    – 但し、イベント・プラットフォーム内でのみ Kafkaとデータベース間、またはデータベース間のトランザクションは提供なし トランザクション 難易度が⾼く、 エラーが出やすい アプリケーション 簡単で信頼性の⾼い アプリケーション
  57. マイクロサービスのトランザクション・イベントに対するOracle Databaseのサポート Copyright © 2023, Oracle and/or its affiliates 65

    Oracle Transactional Event Queues(TxEventQ)は、Oracleに組込済で無料のイベント・プラット フォーム アプリケーション マイクロサービス マイクロサービス マイクロサービス マイクロサービス マイクロサービス トランザクション・イベント アプリケーション・ コード化 イベント TxEventQはマイクロサービスの開発をよりシンプルに • イベントのPublish/Consumeは、データベースの変更とトランザクショ ン的に統合 • データベースの状態を変更しより多くのイベントを⽣成するイベントのよう な、複雑なケースを処理 • 2フェーズ・コミットおよび冪等性の問題がなく、1回限りのセマンティクスを 提供 • セキュリティ、バックアップ、リカバリなどにおける、イベントとデータが連動 スケールアウト・アーキテクチャにより、1秒間に100万件以上の イベントを処理することが可能
  58. TxEventQはどんなアプリケーションからもアクセス可能 Copyright © 2023, Oracle and/or its affiliates 66 TxEventQサポート:

    • REST APIs • JMS • Java/JDBC • Python • Node.js • C/C++ • .NET • PL/SQL • CLI Consumer Consumer Producer Producer ブローカー キュー表1 キュー表2 Oracle Database TxEventQ イベント・ストリーム 1 イベント・ストリーム 2 イベント・ストリーム 3 イベント・ストリーム 4 イベント・ストリーム 1 イベント・ストリーム 2 イベント・ストリーム 3 イベント・ストリーム 4
  59. TxEventQイベントをOracle Database間でトランザクションとして伝播 Copyright © 2023, Oracle and/or its affiliates 67

    ブローカー キュー表1 キュー表2 Oracle Database TxEventQ イベント・ストリーム 1 イベント・ストリーム 2 イベント・ストリーム 3 イベント・ストリーム 4 イベント・ストリーム 1 イベント・ストリーム 2 イベント・ストリーム 3 イベント・ストリーム 4 リモートOracle Database TxEventQ Consumer Consumer 伝播
  60. Confluent または Kafka JMS コネクタは、Kafka と TxEventQ の間で イベントを⾃動的に伝播可能 Copyright

    © 2023, Oracle and/or its affiliates 68 ブローカー キュー表1 キュー表2 Oracle Database TxEventQ イベント・ストリーム 1 イベント・ストリーム 2 イベント・ストリーム 3 イベント・ストリーム 4 イベント・ストリーム 1 イベント・ストリーム 2 イベント・ストリーム 3 イベント・ストリーム 4 Kafkaクラスタ Kafkaコネクタ
  61. TxEventQのAPIはKafkaと⾼い互換性がある Copyright © 2023, Oracle and/or its affiliates 69 ブローカー

    キュー表1 キュー表2 Oracle Database TxEventQ イベント・ストリーム 1 イベント・ストリーム 2 イベント・ストリーム 3 イベント・ストリーム 4 イベント・ストリーム 1 イベント・ストリーム 2 イベント・ストリーム 3 イベント・ストリーム 4 TxEventQは、Kafka互換の JavaおよびREST APIを サポート Consumer Consumer Producer Producer
  62. import org.apache.kafka.clients.producer.KafkaProducer; : public class SimpleProducerOKafka { public static void

    main(String[] args) { Properties props = new Properties(); props.put(bootstrap.servers, “kafka:9092); Kafka アプリケーションは TxEventQ を簡単に使⽤可能 Copyright © 2023, Oracle and/or its affiliates 70 Kafka Java API呼び出しで、ライブラリとブローカー・エンドポイントを切り替えるだけ Kafkaイベント Kafkaブローカー ライブラリ エンド・ポイント
  63. import org.oracle.okafka.clients.producer.KafkaProducer; : public class SimpleProducerOKafka { public static void

    main(String[] args) { Properties props = new Properties(); props.put(bootstrap.servers, database:1521); import org.apache.kafka.clients.producer.KafkaProducer; : public class SimpleProducerOKafka { public static void main(String[] args) { Properties props = new Properties(); props.put(bootstrap.servers, “kafka:9092); Kafka アプリケーションは TxEventQ を簡単に使⽤可能 Copyright © 2023, Oracle and/or its affiliates 71 Kafka Java API呼び出しで、ライブラリとブローカー・エンドポイントを切り替えるだけ Kafkaイベント Kafkaブローカー TxEventQ TxEventQイベント 新規ライブラリ 新規エンド・ポイント
  64. シンプルな トランザクション・ マイクロサービス シンプルな アプリケーション層 キャッシュ まとめ - Oracle Database

    23c Copyright © 2023, Oracle and/or its affiliates 72 すべてのデータドリブン・アプリケーションの開発・実⾏をシンプルにするというミッションを推進 シンプルに リレーショナルと JSONの統合 シンプルに グラフとしての データにアクセス シンプルな データドリブンの JavaScript
  65. Copyright © 2023, Oracle and/or its affiliates 73 oracle.com/23cfree Developer

    Release Oracle Database 23cが データ・ドリブン・アプリケーションの開発と運⽤を どれだけ劇的に簡素化するかをお試しください。 Oracle Database 23c FREE 今すぐダウンロード 提供開始
  66. Copyright © 2023, Oracle and/or its affiliates 74 Oracle Database

    23c Free – Developer Release • 23c App Devの機能を簡単に、いますぐ評価することができます。 • Oracle Database 23cの完全版がリリースされる前に、23c App Simpleの機能を活⽤したアプリケーションの構築を開始しましょう • ご提供⽅法 • Docker イメージ • VirtualBox VM • Linux RPM ファイル • Windows版 と Mac版 はまもなく