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

[DBWT-4] 開発: JSONドキュメントのサポートとMongoDB APIによるモダンアプリの開発

[DBWT-4] 開発: JSONドキュメントのサポートとMongoDB APIによるモダンアプリの開発

2023年4月12日 (水)開催、Oracle Database World Tokyo [DBWT] セッション4の資料です。

昨今のアプリケーションデータの保存と管理には、ドキュメントデータベースとJSONが使われ始めています。このセッションでは、Oracle DatabaseでのJSONデータの保存と処理がいかに簡単か、またMongoDB互換APIの使用方法、SQLとドキュメントAPIを併用してさまざまなJSONユースケースを解決する方法について紹介します。

oracle4engineer

April 19, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Oracle Database World Tokyo JSONドキュメントのサポート とMongoDB APIによるモダンアプリの開発 田中 隆三郎 ⽇本オラクル株式会社

    事業戦略統括 事業開発本部 担当ディレクター 辻井 由佳 ⽇本オラクル株式会社 テクノロジーコンサルティング事業本部 プロフェッショナルサービス本部 第三デジタルインテグレーション部 プリンシパルコンサルタント 2023年4⽉12⽇
  2. Copyright © 2023, Oracle and/or its affiliates 3 コンバージド・データベース アーキテクチャ

    単⼀⽬的データベース OLTP OLAP グラフ 空間 ドキュメント ML 検索 データタイプやワークロードごとに 複数のセキュリティモデル、⾔語、スキル、ライセンス等 どのようなデータタイプやワークロードにも対応 Oracle Converged Database
  3. Copyright © 2023, Oracle and/or its affiliates 4 • スキーマの柔軟性

    • 事前のスキーマ設計が少なくて済む • アプリケーション・コントロールの進化 • アプリケーションでの容易な活⽤ • ネストされた構造体 • アプリケーション内でオブジェクトへのマッピング • 結合(JOIN)を伴わない読み書きが可能 • 共通フォーマット • ほとんどのプログラミング⾔語でサポート • ⾼い可読性 • アプリ、サーバー、データベースの各階層での データ交換をシンプルに { "name" : "Thomas Anderson", "job" : "Programmer", "addresses" : [ { "street" : "123 Main", "city" : "Santa Cruz", "zip" : 95041 } ] } JSONを使⽤する理由
  4. Copyright © 2023, Oracle and/or its affiliates 5 { "movie_id"

    : 1652, "title" : "Iron Man 2", "date" : "2010-05-07", "cast" : [ "Robert Downey Jr.", "Larry Ellison", .. ] } class Movie { int movie_id; String title; LocalTime date; List<String> cast; Movie() { ... } スキーマの柔軟性 • 事前のスキーマ設計の必要なし • アプリケーション内でスキーマを制御 • シンプルなデータモデル 少ないインピーダンス・ミスマッチ • アプリケーション内でオブジェクトへの マッピング • ネストされた構造体をサポート • 結合(JOIN)を伴わない読み書きが 可能 データ交換 • 階層をまたいで統⼀された表現 • ⾼い可読性 • REST、JSONは汎⽤性が⾼い JSONで保存する理由
  5. Copyright © 2023, Oracle and/or its affiliates 6 • 低レイテンシでスケーラブルなJSONのストレージ

    • MongoDB APIまたはSQL • データベース管理不要 • Always-Free サービス • Autonomous Databaseの全機能 マネージドのクラウド・サービスとしての コンバージド・データベース Autonomous JSON Database
  6. Copyright © 2023, Oracle and/or its affiliates 7 Autonomous JSON

    Database 弾力的なコンピュートと ストレージ 伸縮するコンピュートと ストレージ $ ⾼可⽤性 24 7 ⼀桁のレイテンシ 読み書き 低価格 Always Free Tier
  7. Copyright © 2023, Oracle and/or its affiliates 8 • JSONに対して直接SQLを実⾏

    • 分析 • レポーティング • キャッシュ • 索引付け、全⽂検索 • デフォルトのセキュリティ (Secure by default) NoSQLを超えるドキュメント・ストア SQL REST Autonomous JSON Database
  8. Copyright © 2023, Oracle and/or its affiliates 10 • 関連する複数の「フラット」表

    • 表は⾏を含む • スキーマは表を含む • ⾏は構造化されている(SQLの「S」) • データへのアクセスはSQLを使⽤ • 関連するエンティティが結合されている select e.id, e.name from employee e where e.job = 'Programmer' SQLでアクセス 正規化された表 id name job 123 Anderson Programmer 345 Smith Agent リレーショナルモデル
  9. Copyright © 2023, Oracle and/or its affiliates 11 ドキュメントはJSONの値 •

    柔軟な構造 • ⼀意のキー(_id)を持つ コレクションはドキュメントを含む • 挿⼊、取得、更新、フィルタをサポート データベースはコレクションを含む プログラムからデータへのアクセス- SQLは不要 MongoDB Javaの例 MongoClient mongoClient = MongoClients.create(connString); MongoDatabase database = mongoClient.getDatabase("admin"); MongoCollection<Document> coll = database.createCollection("employees"); Document po = Document.parse(json); coll.insertOne(po); Bson filter = eq("job", "Programmer"); MongoCursor<Document> cursor = coll.find(filter).cursor(); Document doc = cursor.next(); JSONコレクション
  10. Copyright © 2023, Oracle and/or its affiliates 12 データベース =>

    スキーマ データベース「admin」に作成されたコレ クションは「ADMIN」スキーマに含まれる MongoDB Javaの例 MongoClient mongoClient = MongoClients.create(connString); MongoDatabase database = mongoClient.getDatabase("admin"); MongoCollection<Document> coll = database.createCollection("employees"); Document po = Document.parse(json); coll.insertOne(po); Bson filter = eq("job", "Programmer"); MongoCursor<Document> cursor = coll.find(filter).cursor(); Document doc = cursor.next(); JSONコレクション
  11. Copyright © 2023, Oracle and/or its affiliates 13 MongoDB Javaの例

    MongoClient mongoClient = MongoClients.create(connString); MongoDatabase database = mongoClient.getDatabase("admin"); MongoCollection<Document> coll = database.createCollection("employees"); Document po = Document.parse(json); coll.insertOne(po); Bson filter = eq("job", "Programmer"); MongoCursor<Document> cursor = coll.find(filter).cursor(); Document doc = cursor.next(); コレクション => テーブル コレクションは、1つのJSON列を持つ テーブルを抽象化・表現したもの CREATE TABLE employee ( ID VARCHAR2, DATA JSON ) JSONコレクション
  12. Copyright © 2023, Oracle and/or its affiliates 14 ドキュメント =>

    ⾏ コレクションにドキュメントを挿⼊すると、 テーブルに1⾏が挿⼊される INSERT INTO employees (data) VALUES (:1); MongoDB Javaの例 MongoClient mongoClient = MongoClients.create(connString); MongoDatabase database = mongoClient.getDatabase("admin"); MongoCollection<Document> coll = database.createCollection("employees"); Document po = Document.parse(json); coll.insertOne(po); Bson filter = eq("job", "Programmer"); MongoCursor<Document> cursor = coll.find(filter).cursor(); Document doc = cursor.next(); JSONコレクション
  13. Copyright © 2023, Oracle and/or its affiliates 15 フィルタ =>

    クエリ フィルタ式はテーブル上でSQLクエリとして 実⾏される。インデックス作成、コストベ ース・オプティマイザなど、Oracle Databaseのコア機能をフル活⽤ SELECT data FROM employee e WHERE e.data.job = 'Programmer' MongoDB Javaの例 MongoClient mongoClient = MongoClients.create(connString); MongoDatabase database = mongoClient.getDatabase("admin"); MongoCollection<Document> coll = database.createCollection("employees"); Document po = Document.parse(json); coll.insertOne(po); Bson filter = eq("job", "Programmer"); MongoCursor<Document> cursor = coll.find(filter).cursor(); Document doc = cursor.next(); JSONコレクション
  14. Copyright © 2023, Oracle and/or its affiliates 16 • データ・モデル:

    表ではなく、JSONコレクション • 開発者は既存スキルを活かし、MongoDBのツール・ドライバなどを引き続き使⽤可能 • MongoDBのワークロードをOracleに簡単に移⾏ • SQLを有効活⽤ • より⾼度でより速い分析機能、機械学習 • JSONと他のデータモデル(リレーショナル、XML、空間など)を同時にクエリ実⾏可能 • リレーショナルデータ、レポーティング、問合せ結果をMongoDBコレクションとして公開 Oracle Database API for MongoDB
  15. クラウド側環境と端末側環境 デモ環境 Copyright © 2023, Oracle and/or its affiliates 18

    端末︓PC クラウド︓OCI ① OCIコンソールでAJD起動 ② MongoDB Compass にてJSONファイルのデータ をインポート ③ SQLにてデータを参照 および追加 SQL クエリ実⾏ ※ MongoDB API を背後で呼び出し
  16. ビジネス課題: Oracle Sauce Videoは、企業が社員や顧客、ファンなどと協⼒してデジタル動画コンテンツを 作成できる、動画コンテンツ作成・ソーシング・ソリューションです。動画作成の複雑さとコストを 低減し、Red Bull Racingなどのお客様が、さまざまなユースケースに対応した動画の撮影、 収集、作成を容易に⾏えるようにします。 当初のインフラストラクチャは、AmazonやGoogleのサービス、MongoDB

    Atlasなど複数の ベンダーのサービスが、複数のMicrosoft Azureクラウド・リージョンに分散して配置されていま した。 使⽤した製品︓ Oracle Autonomous JSON Database (AJD) Oracle Container Engine for Kubernetes OCI Object Storage Copyright © 2023, Oracle and/or its affiliates 「Autonomous JSON DatabaseとOCIは、 MongoDB Atlasやその他のクラウド・サービスで稼 働していたソリューションを置き換えるために必要なす べてを備えています。移⾏は⾮常にスムーズで、お客 様は切り替えに気づかないほどです。」 Jon Girven オラクル、ソフトウェア開発担当シニア・マネージャー 結果: 現在、Oracle Sauce Videoソリューションは、動画プロジェクトのメタデータ⽤のAutonomous JSON Database(AJD)、動画⽤のOCI Object Storage、Kubernetes上で動作する30 以上のマイクロサービスなど、OCIサービスのエコシステム上で動作しています。 機能を失うことなく、インフラストラクチャをOCIベースのソリューションに統合 MongoDB AtlasからAJDへのデータとアプリケーションのリアルタイム移⾏では、Oracle GoldenGateがデータ移⾏とMongoDBとAJD間のリアルタイム・データ同期を⾏い、業務を 中断させることなく約1時間で完了 AJDのエンタープライズ・データベース機能(マテリアライズド・ビューなど)により、これまで MongoDB上で複雑なマニュアル・コーディングを必要としていたデータベース操作を簡素化 パッチ適⽤、インデックス作成、バックアップなどのデータ管理作業を、AJDが⾃律的に⾏うため 、開発チームはアプリ開発に専念できる Sauce Video、MongoDB Atlasの 代わりにAutonomous JSON Databaseを使⽤ OCI Notification OCI Speech
  17. ビジネス課題: アパレル、フットウェア、ジュエリーのファッション・ブランドのサステナブル・ソーシングを⾏うドイツ のスタートアップは、お客様がアプリ内のデータが信頼でき、検証されたものであると安⼼でき るよう、低コストで使いやすいプラットフォームを必要としていました。 使⽤した製品︓ Oracle Autonomous Database(ATP) Oracle Autonomous

    Database for analytics and data warehouse (ADW) Oracle Autonomous JSON Database (AJD) Oracle Blockchain Platform Cloud Service Oracle Container Engine for Kubernetes Oracle Analytics Cloud (OAC) 「インフラストラクチャ、データベース、およびブロックチェ ーン・アプリケーションを1つのプラットフォームで実⾏し て、プラットフォームを⾮常に迅速かつ⼤規模に拡張 することが、はるかに簡単になりました。」 Peter Merkert⽒ retraced、共同設⽴者兼CEO 結果: データベースの管理者を必要とせず、データベースの容量を⾃動スケーリングし、バッ クアップを実⾏ AJDとKubernetes Engineにより、従業員はビジネス・ソリューション開発に集中 できるように 注⽂書のコピー、製品に関連する画像、部品、ブランド、⼯場、農場など、さまざまな JSONドキュメントを保存 ブロックチェーンが、各顧客のサプライチェーンの各ステップで収集されたデータの信頼性 を確保 OACが、サプライチェーンの主要業績評価指標に関するインサイトを迅速に提供 事例を読む retraced、エシカル・ファッションを 確実に提供 Copyright © 2023, Oracle and/or its affiliates 21
  18. 地図制作業務におけるデジタル変⾰推進を⽀える基盤をOracle Cloud Infrastructure(OCI)で刷新 企業・システム概要 • 全国の道路、建築物や施設、地形の変化を詳細に調査し、 その変化を随時データベースに反映し、⾼鮮度・⾼精度な 地図制作を⾏う • オンプレミスで利⽤してきた既存システムでは、業務毎に追

    加された数百のツールやデータベースにより⽣じる地図編集 者の業務のサイロ化、ITの運⽤管理の負荷やデータの増 加に伴うデータベースの追加に係るコストが課題に 採⽤ポイント • オープンソース・ベースの機能専⽤型クラウド・データベースを 複数連携させた構成など複数のパブリック・クラウドを⽐較し OCIを採⽤ • 地図制作に必要な空間データおよびグラフ・データベースな どのあらゆるデータ・モデルやデータ・ワークロードに対応する、 Oracle Database Cloud Serviceのコンバージド・デー タベース・エンジン • オラクルのコンサルティング部⾨の⾼い技術や知⾒ 顧客事例︓トヨタマップマスター様 Copyright © 2023, Oracle and/or its affiliates 22 システム構成イメージ 利⽤サービス・製品 • Database Cloud Service (DBCS) • Container Engine for Kubernetes • Oracle Consulting Service
  19. 辻井 由佳 Copyright © 2023, Oracle and/or its affiliates |

    23 ⽇本オラクル株式会社 テクノロジーコンサルティング事業本部 プロフェッショナルサービス本部 第三デジタルインテグレーション部 プリンシパルコンサルタント 研究機関における IoT データ基盤 Oracle Consulting Service 事例紹介
  20. 本システムの⽬的 ユースケース︓研究機関におけるIoTデータ基盤 Copyright © 2023, Oracle and/or its affiliates 24

    • 施設(ライブ会場など)の各種センサーから混雑情報を収集し、 混雑緩和などの施策を打つシステムの構築 ü 複数の施設が対象となる ü 蓄積されたデータは 複数の研究機関/企業が活⽤する 施設 利⽤者 データ基盤 研究機関/企業 データ格納 デバイスデータ センシング 情 報 提 供 /レコメンド 各種デバイス 予測結果 外部情報 外部情報 データソース データ 取得 予測結果 格納
  21. 基盤構築するうえでの課題 ユースケース︓研究機関におけるIoTデータ基盤 Copyright © 2023, Oracle and/or its affiliates 25

    複数の研究機関/企業が利⽤し、複数の施設を対象とするため、様々なデバイスが存在する • 各データソースごとに処理を⽤意するのは困難 • 各デバイスごとにデータ項⽬が異なる ü デバイスごとに必要な表定義(属性/列数)が異なる 取得できる情報 • 作成⽇ • 通過⼈数 • 配置場所 取得できる情報 • 作成⽇ • カメラ名 • 配置場所 • 画⾯内⼈数 取得できる情報 作成⽇ 通過⼈数 配置場所 • ⽇時 • エリア • 天気 • 気温 • ⼀時間後の 予報 複数デバイスを扱える 汎⽤的な仕組みが必要︕ 作成⽇ カメラ名 配置場所 画⾯内⼈数 ⽇時 エリア 天気 気温 ⼀時間後の予報 データソースは頻繁に増減する
  22. アーキテクチャ概要 ユースケース︓研究機関におけるIoTデータ基盤 Copyright © 2023, Oracle and/or its affiliates 26

    ⼊⼒層 データソース 予測サーバ Oracle Autonomous Database Oracle Cloud Infrastructure (OCI) API Gateway Object Storage Event 検知 API Gateway OCI Streaming ID JSON 1 2022/9/10 11:53:25 corpA flow CAM1 { direction":"up","result":1} 2 2022/9/10 11:54:28 corpA simulator SIM1 { area": T1", predicate":3, } 3 2022/9/10 11:54:56 corpB weather Weatherjp { 1h": rain", 30min": rain , } 4 2022/9/10 12:01:05 corpA flow CAM1 { direction": down","result":4} データ格納層 データ処理層 データ変換 (Functions) データ変換/集計 (Apex/ORDS) フォーマット 変換層 データ活⽤層 結果の 格納 HP での表⽰ 等 ⼊⼒の 取得 特徴量 ①IDや⽇付等の共通項⽬以外は JSON型で柔軟に管理 Streamingの利⽤により、 データ処理量の増加時にも 安定稼働可能 ②REST APIにより、 データ連携を容易化
  23. ①JSONを使ったデータ⼀元管理 ユースケース︓研究機関におけるIoTデータ基盤 Copyright © 2023, Oracle and/or its affiliates 27

    ! ! ! 表構造で管理した場合 ID ID 1 2023/4/17 CAM1 area1 2 2023/4/17 CAM2 area2 ID 1 2023/4/17 A 16:30 2 2023/4/17 B 16:30 ID 1 2023/4/16 30% 2 2023/4/17 60% データソース追加のたびに スキーマ定義検討&表追加が必要 取得したいデータごとに SQLを作成する必要がある 表構造+JSON型を利⽤した場合 ! ! ! ID Value 1 2023/4/17 {“カメラID”:“CAM1”,“エリア":”area1”} 2 2023/4/17 {“カメラID”:“CAM2”,“エリア":”area2”} 3 2023/4/17 {“販売店”:“A店”,“開始時刻":”16:30”} 4 2023/4/17 {“販売店”:“B店”,“開始時刻":”16:30”} 5 2023/4/16 {“天気”:“晴れ”,“降⽔確率":”30%”} 6 2023/4/17 {“天気”:“曇り”,“降⽔確率":”60%”} カメラ情報 チケット情報 天気情報 どのデータソースでも 共通して取得する情報は 共通列として定義 データソースごとに異なる形式の情報を もたせるために、 Oracle Database の JSON 型の列を使⽤して 種々の情報をスキーマレスで格納する 同じSQLで データ取得可能 データソース追加時も スキーマ定義検討&表追加不要
  24. ①JSONを使ったデータ⼀元管理︓JSONデータの利⽤イメージ ユースケース︓研究機関におけるIoTデータ基盤 Copyright © 2023, Oracle and/or its affiliates 28

    Oracle Database CREATE TABLE <表名> ( ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, CREATED_AT TIMESTAMP DEFAULT sysdate, DATATYPE VARCHAR2(200), VALUE VARCHAR2(4000) CONSTRAINT <制約名> CHECK (VALUE IS JSON) ) Oracle Databaseのテーブルの⽂字列型(※) のカラムに”IS JSON”制約を付与 ü 各種JSON機能を利⽤可能に+対象カラムの値がJSON形式であることをチェック ※ 21c〜 はJSONデータに対する処理を最適化するバイナリ形式のデータ型(JSON)が追加 ID CREATED_AT DATATYPE VALUE 1 2023/4/12 { "CameraID":"CAM1", "Area":"area1" } 2 2023/4/12 {“CameraID”:“CAM2”,“Area":”area2”} 6 2023/4/13 {“weather”:“曇り”,“降⽔確率":”60%”} INSERT INTO datatbl (created_at, datatype, value) VALUES( 2023/4/12, ʻʼカメラ, '{ "CameraID":"CAM1", "Area":"area1" }' ); データ投⼊ SELECT a.VALUE.CameraID FROM datatbl a WHERE c. VALUE.Area = ʻarea1'; ドット記法によりJSONのキー構造を指定して検索 CAMERAID ---------------------------------------------------------------- ----- CAM1
  25. ②Oracle REST Data Services(ORDS)及び Oracle APEXとの連携 Oracle Databaseの表として⼀元管理したことで、 Oracle REST

    Data Services(ORDS)及び Oracle APEXでREST APIが簡単に作成できる ユースケース︓研究機関におけるIoTデータ基盤 Copyright © 2023, Oracle and/or its affiliates 29 クライアント層 中間層 ( Oracle REST Data Services ) データベース層 (Oracle Autonomous Database) URI Map and Bind SQL、PLSQL 結果セット 変換 取得 Autonomous Database ORDS アプリケーション センサID 時刻 ⾃由記述 102 11:23 { “タイプ”: 流量, “始点X": XXX, “始点Y":YYY } 103 11:24 … リアルタイムデータ等の格納表 SELECT * FROM RESTTBL WHERE datetime > 指定開始⽇時 AND datetime < 指定終了⽇時 curl -X GET https://XXXX/ords/oc stest/data/period?BEG IN=指定開始⽇時&END= 指定終了⽇時 センサID 時刻 ⾃由記述 102 11:23 { “タイプ”: 流量, “始点X": XXX, “始点Y":YYY } 103 … … 結果セットを取得 Oracle APEX 様々な研究機関/企業とのデータ連携が容易に⾏えるように︕
  26. データの⼀元管理を実現する統合型データベース (Converged Database) Copyright © 2023, Oracle and/or its affiliates

    30 堅牢なデータシステムはもちろん、 新規性の⾼い流動的なデータの格納にもOracle Databaseが利⽤できます︕ リレーショナル JSON Key Value Graph Spatial ファイル Oracle Database 複数のデータストアの管理が不要 ü コスト的メリット ü SQLでデータ操作可能なので、 Oracle DBAのナレッジが⽣かせる データ連携が容易 ü APEX/ORDSを使って 簡単にAPIを作成できる データの整合性が保たれる ü 内部的にOracle DBの トランザクション管理が利⽤されている Oracle Databaseでデータの⼀元管理
  27. Copyright © 2023, Oracle and/or its affiliates 32 JSONとRDBの世界のギャップを埋める 同じデータの2つの側⾯

    すべてが オブジェクトに⾒える すべてが ⾏と列に⾒える あなたのデータ SQL SODA、REST、 MongoDB API
  28. Copyright © 2023, Oracle and/or its affiliates 33 JSON Document

    Relational Duality JSONドキュメントとリレーショナルの⼆⾯性 Oracle Database 23c JSON Relational Dualityは、 JSONのユースケースのシンプル さと、リレーショナルのマルチユー スケースのパワーを兼ね備えた アーキテクチャを提供
  29. Copyright © 2023, Oracle and/or its affiliates 34 oracle.com/23cfree Developer

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