2023年4月12日 (水)開催、Oracle Database World Tokyo [DBWT] セッション4の資料です。
昨今のアプリケーションデータの保存と管理には、ドキュメントデータベースとJSONが使われ始めています。このセッションでは、Oracle DatabaseでのJSONデータの保存と処理がいかに簡単か、またMongoDB互換APIの使用方法、SQLとドキュメントAPIを併用してさまざまなJSONユースケースを解決する方法について紹介します。
Oracle Database WorldTokyoJSONドキュメントのサポートとMongoDB APIによるモダンアプリの開発田中 隆三郎⽇本オラクル株式会社事業戦略統括 事業開発本部担当ディレクター辻井 由佳⽇本オラクル株式会社テクノロジーコンサルティング事業本部プロフェッショナルサービス本部 第三デジタルインテグレーション部プリンシパルコンサルタント2023年4⽉12⽇
View Slide
Copyright © 2023, Oracle and/or its affiliates2SQLのパワーとJSONの スキーマの柔軟性の融合
Copyright © 2023, Oracle and/or its affiliates3コンバージド・データベースアーキテクチャ単⼀⽬的データベースOLTPOLAPグラフ空間ドキュメントML検索データタイプやワークロードごとに複数のセキュリティモデル、⾔語、スキル、ライセンス等どのようなデータタイプやワークロードにも対応Oracle Converged Database
Copyright © 2023, Oracle and/or its affiliates4• スキーマの柔軟性• 事前のスキーマ設計が少なくて済む• アプリケーション・コントロールの進化• アプリケーションでの容易な活⽤• ネストされた構造体• アプリケーション内でオブジェクトへのマッピング• 結合(JOIN)を伴わない読み書きが可能• 共通フォーマット• ほとんどのプログラミング⾔語でサポート• ⾼い可読性• アプリ、サーバー、データベースの各階層での データ交換をシンプルに{"name" : "Thomas Anderson","job" : "Programmer","addresses" : [{"street" : "123 Main","city" : "Santa Cruz","zip" : 95041}]}JSONを使⽤する理由
Copyright © 2023, Oracle and/or its affiliates5{"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 cast;Movie() {...}スキーマの柔軟性• 事前のスキーマ設計の必要なし• アプリケーション内でスキーマを制御• シンプルなデータモデル少ないインピーダンス・ミスマッチ• アプリケーション内でオブジェクトへのマッピング• ネストされた構造体をサポート• 結合(JOIN)を伴わない読み書きが可能データ交換• 階層をまたいで統⼀された表現• ⾼い可読性• REST、JSONは汎⽤性が⾼いJSONで保存する理由
Copyright © 2023, Oracle and/or its affiliates6• 低レイテンシでスケーラブルなJSONのストレージ• MongoDB APIまたはSQL• データベース管理不要• Always-Free サービス• Autonomous Databaseの全機能マネージドのクラウド・サービスとしてのコンバージド・データベースAutonomous JSON Database
Copyright © 2023, Oracle and/or its affiliates7Autonomous JSON Database弾力的なコンピュートと ストレージ伸縮するコンピュートとストレージ$⾼可⽤性247⼀桁のレイテンシ読み書き低価格Always Free Tier
Copyright © 2023, Oracle and/or its affiliates8• JSONに対して直接SQLを実⾏• 分析• レポーティング• キャッシュ• 索引付け、全⽂検索• デフォルトのセキュリティ (Secure by default)NoSQLを超えるドキュメント・ストアSQLRESTAutonomous JSON Database
Copyright © 2023, Oracle and/or its affiliates9JSONコレクション
Copyright © 2023, Oracle and/or its affiliates10• 関連する複数の「フラット」表• 表は⾏を含む• スキーマは表を含む• ⾏は構造化されている(SQLの「S」)• データへのアクセスはSQLを使⽤• 関連するエンティティが結合されている select e.id, e.namefrom employee ewhere e.job = 'Programmer'SQLでアクセス正規化された表id name job123 Anderson Programmer345 Smith Agentリレーショナルモデル
Copyright © 2023, Oracle and/or its affiliates11ドキュメントはJSONの値• 柔軟な構造• ⼀意のキー(_id)を持つコレクションはドキュメントを含む• 挿⼊、取得、更新、フィルタをサポートデータベースはコレクションを含むプログラムからデータへのアクセス-SQLは不要MongoDB Javaの例MongoClient mongoClient = MongoClients.create(connString);MongoDatabase database = mongoClient.getDatabase("admin");MongoCollection coll = database.createCollection("employees");Document po = Document.parse(json);coll.insertOne(po);Bson filter = eq("job", "Programmer");MongoCursor cursor = coll.find(filter).cursor();Document doc = cursor.next();JSONコレクション
Copyright © 2023, Oracle and/or its affiliates12データベース => スキーマデータベース「admin」に作成されたコレクションは「ADMIN」スキーマに含まれるMongoDB Javaの例MongoClient mongoClient = MongoClients.create(connString);MongoDatabase database = mongoClient.getDatabase("admin");MongoCollection coll = database.createCollection("employees");Document po = Document.parse(json);coll.insertOne(po);Bson filter = eq("job", "Programmer");MongoCursor cursor = coll.find(filter).cursor();Document doc = cursor.next();JSONコレクション
Copyright © 2023, Oracle and/or its affiliates13MongoDB Javaの例MongoClient mongoClient = MongoClients.create(connString);MongoDatabase database = mongoClient.getDatabase("admin");MongoCollection coll = database.createCollection("employees");Document po = Document.parse(json);coll.insertOne(po);Bson filter = eq("job", "Programmer");MongoCursor cursor = coll.find(filter).cursor();Document doc = cursor.next();コレクション => テーブルコレクションは、1つのJSON列を持つテーブルを抽象化・表現したものCREATE TABLE employee(ID VARCHAR2,DATA JSON)JSONコレクション
Copyright © 2023, Oracle and/or its affiliates14ドキュメント => ⾏コレクションにドキュメントを挿⼊すると、テーブルに1⾏が挿⼊されるINSERT INTOemployees (data)VALUES (:1);MongoDB Javaの例MongoClient mongoClient = MongoClients.create(connString);MongoDatabase database = mongoClient.getDatabase("admin");MongoCollection coll = database.createCollection("employees");Document po = Document.parse(json);coll.insertOne(po);Bson filter = eq("job", "Programmer");MongoCursor cursor = coll.find(filter).cursor();Document doc = cursor.next();JSONコレクション
Copyright © 2023, Oracle and/or its affiliates15フィルタ => クエリフィルタ式はテーブル上でSQLクエリとして実⾏される。インデックス作成、コストベース・オプティマイザなど、OracleDatabaseのコア機能をフル活⽤SELECT dataFROM employee eWHERE e.data.job = 'Programmer'MongoDB Javaの例MongoClient mongoClient = MongoClients.create(connString);MongoDatabase database = mongoClient.getDatabase("admin");MongoCollection coll = database.createCollection("employees");Document po = Document.parse(json);coll.insertOne(po);Bson filter = eq("job", "Programmer");MongoCursor cursor = coll.find(filter).cursor();Document doc = cursor.next();JSONコレクション
Copyright © 2023, Oracle and/or its affiliates16• データ・モデル: 表ではなく、JSONコレクション• 開発者は既存スキルを活かし、MongoDBのツール・ドライバなどを引き続き使⽤可能• MongoDBのワークロードをOracleに簡単に移⾏• SQLを有効活⽤• より⾼度でより速い分析機能、機械学習• JSONと他のデータモデル(リレーショナル、XML、空間など)を同時にクエリ実⾏可能• リレーショナルデータ、レポーティング、問合せ結果をMongoDBコレクションとして公開Oracle Database API for MongoDB
Copyright © 2023, Oracle and/or its affiliates17デモ
クラウド側環境と端末側環境デモ環境Copyright © 2023, Oracle and/or its affiliates18端末︓PCクラウド︓OCI① OCIコンソールでAJD起動 ② MongoDB CompassにてJSONファイルのデータをインポート③ SQLにてデータを参照および追加SQL クエリ実⾏※ MongoDB APIを背後で呼び出し
Copyright © 2023, Oracle and/or its affiliates19事例
ビジネス課題:Oracle Sauce Videoは、企業が社員や顧客、ファンなどと協⼒してデジタル動画コンテンツを作成できる、動画コンテンツ作成・ソーシング・ソリューションです。動画作成の複雑さとコストを低減し、Red Bull Racingなどのお客様が、さまざまなユースケースに対応した動画の撮影、収集、作成を容易に⾏えるようにします。当初のインフラストラクチャは、AmazonやGoogleのサービス、MongoDB Atlasなど複数のベンダーのサービスが、複数のMicrosoft Azureクラウド・リージョンに分散して配置されていました。使⽤した製品︓Oracle Autonomous JSON Database (AJD)Oracle Container Engine for KubernetesOCI Object StorageCopyright © 2023, Oracle and/or its affiliates「Autonomous JSON DatabaseとOCIは、MongoDB Atlasやその他のクラウド・サービスで稼働していたソリューションを置き換えるために必要なすべてを備えています。移⾏は⾮常にスムーズで、お客様は切り替えに気づかないほどです。」Jon Girvenオラクル、ソフトウェア開発担当シニア・マネージャー結果:現在、Oracle Sauce Videoソリューションは、動画プロジェクトのメタデータ⽤のAutonomousJSON Database(AJD)、動画⽤のOCI Object Storage、Kubernetes上で動作する30以上のマイクロサービスなど、OCIサービスのエコシステム上で動作しています。機能を失うことなく、インフラストラクチャをOCIベースのソリューションに統合MongoDB AtlasからAJDへのデータとアプリケーションのリアルタイム移⾏では、OracleGoldenGateがデータ移⾏とMongoDBとAJD間のリアルタイム・データ同期を⾏い、業務を中断させることなく約1時間で完了AJDのエンタープライズ・データベース機能(マテリアライズド・ビューなど)により、これまでMongoDB上で複雑なマニュアル・コーディングを必要としていたデータベース操作を簡素化パッチ適⽤、インデックス作成、バックアップなどのデータ管理作業を、AJDが⾃律的に⾏うため、開発チームはアプリ開発に専念できるSauce Video、MongoDB Atlasの代わりにAutonomous JSONDatabaseを使⽤OCI NotificationOCI Speech
ビジネス課題:アパレル、フットウェア、ジュエリーのファッション・ブランドのサステナブル・ソーシングを⾏うドイツのスタートアップは、お客様がアプリ内のデータが信頼でき、検証されたものであると安⼼できるよう、低コストで使いやすいプラットフォームを必要としていました。使⽤した製品︓Oracle Autonomous Database(ATP)Oracle Autonomous Database for analytics and data warehouse (ADW)Oracle Autonomous JSON Database (AJD)Oracle Blockchain Platform Cloud ServiceOracle Container Engine for KubernetesOracle Analytics Cloud (OAC)「インフラストラクチャ、データベース、およびブロックチェーン・アプリケーションを1つのプラットフォームで実⾏して、プラットフォームを⾮常に迅速かつ⼤規模に拡張することが、はるかに簡単になりました。」Peter Merkert⽒retraced、共同設⽴者兼CEO結果:データベースの管理者を必要とせず、データベースの容量を⾃動スケーリングし、バックアップを実⾏AJDとKubernetes Engineにより、従業員はビジネス・ソリューション開発に集中できるように注⽂書のコピー、製品に関連する画像、部品、ブランド、⼯場、農場など、さまざまなJSONドキュメントを保存ブロックチェーンが、各顧客のサプライチェーンの各ステップで収集されたデータの信頼性を確保OACが、サプライチェーンの主要業績評価指標に関するインサイトを迅速に提供事例を読むretraced、エシカル・ファッションを確実に提供Copyright © 2023, Oracle and/or its affiliates21
地図制作業務におけるデジタル変⾰推進を⽀える基盤をOracle Cloud Infrastructure(OCI)で刷新企業・システム概要• 全国の道路、建築物や施設、地形の変化を詳細に調査し、その変化を随時データベースに反映し、⾼鮮度・⾼精度な地図制作を⾏う• オンプレミスで利⽤してきた既存システムでは、業務毎に追加された数百のツールやデータベースにより⽣じる地図編集者の業務のサイロ化、ITの運⽤管理の負荷やデータの増加に伴うデータベースの追加に係るコストが課題に採⽤ポイント• オープンソース・ベースの機能専⽤型クラウド・データベースを複数連携させた構成など複数のパブリック・クラウドを⽐較しOCIを採⽤• 地図制作に必要な空間データおよびグラフ・データベースなどのあらゆるデータ・モデルやデータ・ワークロードに対応する、Oracle Database Cloud Serviceのコンバージド・データベース・エンジン• オラクルのコンサルティング部⾨の⾼い技術や知⾒顧客事例︓トヨタマップマスター様Copyright © 2023, Oracle and/or its affiliates22システム構成イメージ利⽤サービス・製品• Database Cloud Service (DBCS)• Container Engine for Kubernetes• Oracle Consulting Service
辻井 由佳Copyright © 2023, Oracle and/or its affiliates |23⽇本オラクル株式会社テクノロジーコンサルティング事業本部プロフェッショナルサービス本部第三デジタルインテグレーション部プリンシパルコンサルタント研究機関における IoT データ基盤Oracle Consulting Service 事例紹介
本システムの⽬的ユースケース︓研究機関におけるIoTデータ基盤Copyright © 2023, Oracle and/or its affiliates24• 施設(ライブ会場など)の各種センサーから混雑情報を収集し、混雑緩和などの施策を打つシステムの構築ü 複数の施設が対象となるü 蓄積されたデータは複数の研究機関/企業が活⽤する施設利⽤者データ基盤研究機関/企業データ格納 デバイスデータセンシング情報提供/レコメンド各種デバイス予測結果外部情報外部情報データソースデータ取得予測結果格納
基盤構築するうえでの課題ユースケース︓研究機関におけるIoTデータ基盤Copyright © 2023, Oracle and/or its affiliates25複数の研究機関/企業が利⽤し、複数の施設を対象とするため、様々なデバイスが存在する• 各データソースごとに処理を⽤意するのは困難• 各デバイスごとにデータ項⽬が異なるü デバイスごとに必要な表定義(属性/列数)が異なる取得できる情報• 作成⽇• 通過⼈数• 配置場所取得できる情報• 作成⽇• カメラ名• 配置場所• 画⾯内⼈数取得できる情報作成⽇ 通過⼈数 配置場所• ⽇時• エリア• 天気• 気温• ⼀時間後の予報複数デバイスを扱える汎⽤的な仕組みが必要︕作成⽇ カメラ名 配置場所 画⾯内⼈数⽇時 エリア 天気 気温 ⼀時間後の予報データソースは頻繁に増減する
アーキテクチャ概要ユースケース︓研究機関におけるIoTデータ基盤Copyright © 2023, Oracle and/or its affiliates26⼊⼒層データソース予測サーバOracle Autonomous DatabaseOracle Cloud Infrastructure (OCI)APIGatewayObject StorageEvent検知API GatewayOCIStreamingID JSON1 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により、データ連携を容易化
①JSONを使ったデータ⼀元管理ユースケース︓研究機関におけるIoTデータ基盤Copyright © 2023, Oracle and/or its affiliates27!!!表構造で管理した場合ID ID1 2023/4/17 CAM1 area12 2023/4/17 CAM2 area2ID1 2023/4/17 A 16:302 2023/4/17 B 16:30ID1 2023/4/16 30%2 2023/4/17 60%データソース追加のたびにスキーマ定義検討&表追加が必要取得したいデータごとにSQLを作成する必要がある表構造+JSON型を利⽤した場合!!!ID Value1 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でデータ取得可能データソース追加時もスキーマ定義検討&表追加不要
①JSONを使ったデータ⼀元管理︓JSONデータの利⽤イメージユースケース︓研究機関におけるIoTデータ基盤Copyright © 2023, Oracle and/or its affiliates28Oracle DatabaseCREATE TABLE <表名> (ID NUMBER GENERATED BY DEFAULT ON NULL ASIDENTITY,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 VALUE1 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.CameraIDFROM datatbl aWHERE c. VALUE.Area = ʻarea1';ドット記法によりJSONのキー構造を指定して検索CAMERAID---------------------------------------------------------------------CAM1
②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 affiliates29クライアント層中間層( Oracle REST Data Services )データベース層(Oracle Autonomous Database)URI Map and Bind SQL、PLSQL結果セット変換取得Autonomous DatabaseORDSアプリケーションセンサID 時刻 ⾃由記述102 11:23 {“タイプ”: 流量,“始点X": XXX,“始点Y":YYY}103 11:24 …リアルタイムデータ等の格納表SELECT *FROM RESTTBLWHEREdatetime > 指定開始⽇時 ANDdatetime < 指定終了⽇時curl -X GEThttps://XXXX/ords/ocstest/data/period?BEGIN=指定開始⽇時&END=指定終了⽇時センサID 時刻 ⾃由記述102 11:23 {“タイプ”: 流量,“始点X": XXX,“始点Y":YYY}103 … …結果セットを取得Oracle APEX様々な研究機関/企業とのデータ連携が容易に⾏えるように︕
データの⼀元管理を実現する統合型データベース (Converged Database)Copyright © 2023, Oracle and/or its affiliates30堅牢なデータシステムはもちろん、新規性の⾼い流動的なデータの格納にもOracle Databaseが利⽤できます︕リレーショナルJSONKeyValueGraphSpatialファイルOracleDatabase複数のデータストアの管理が不要ü コスト的メリットü SQLでデータ操作可能なので、Oracle DBAのナレッジが⽣かせるデータ連携が容易ü APEX/ORDSを使って簡単にAPIを作成できるデータの整合性が保たれるü 内部的にOracle DBのトランザクション管理が利⽤されているOracle Databaseでデータの⼀元管理
Copyright © 2023, Oracle and/or its affiliates31まとめ
Copyright © 2023, Oracle and/or its affiliates32JSONとRDBの世界のギャップを埋める同じデータの2つの側⾯すべてがオブジェクトに⾒えるすべてが⾏と列に⾒えるあなたのデータSQLSODA、REST、MongoDB API
Copyright © 2023, Oracle and/or its affiliates33JSON Document Relational DualityJSONドキュメントとリレーショナルの⼆⾯性Oracle Database 23cJSON Relational Dualityは、JSONのユースケースのシンプルさと、リレーショナルのマルチユースケースのパワーを兼ね備えたアーキテクチャを提供
Copyright © 2023, Oracle and/or its affiliates34oracle.com/23cfreeDeveloper ReleaseOracle Database 23cがデータ・ドリブン・アプリケーションの開発と運⽤をどれだけ劇的に簡素化するかをお試しください。Oracle Database 23c FREE今すぐダウンロード提供開始
JSONドキュメントのサポートとMongoDB APIによるモダンアプリの開発Copyright © 2023, Oracle and/or its affiliates35
Oracle Database WorldTokyoご清聴ありがとうございました