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

Oracle Database 21c JSON - New Feature

oracle4engineer
April 09, 2021
640

Oracle Database 21c JSON - New Feature

Oracle Database 21cのJSON向け新機能をまとめた資料です。

oracle4engineer

April 09, 2021
Tweet

Transcript

  1. SQLによるアクセスとスキーマレス開発の柔軟性を両立 Oracle DatabaseをJSONドキュメント・ストアに Copyright © 2021, Oracle and/or its affiliates

    3 JSON SODA APIを使用して 開発されたアプリケーション Oracle Database使用した JSONドキュメントの保存と管理 SQL JSONに対するSQLベースの レポート作成と分析操作 SODA API • NoSQLスタイルのAPI Java, JavaScript/Node.js, Python, REST, PL/SQL, C… • JSONデータの管理に利用 Database In-Memory • インメモリ列ストアの活用で 高速検索 JSONクエリー • Oracle独自のシンプル構文 • SQL/JSONのサポート SQL> select JSON_VALUE(PO_DOCUMENT, ‘$.LineItems[0].Part.UnitPrice’ 2 returning NUMBER(5,3)) 3 from J_PURCHASEORDER p 4 where JSON_VALUE(PO_DOCUMENT, ‘$.PONumber’ 5 returning NUMBER(10)) = 1600 SQL/JSONの構文例
  2. 4 Copyright © 2021, Oracle and/or its affiliates | SODA

    (Simple Oracle Document Access) SODA APIs • NoSQLスタイルのAPI • Java, JavaScript/Node.js, Python, REST, PL/SQL, C… • JSONデータの管理に利用 • create collections • store documents in collections • retrieve documents • query documents
  3. MongoDB や AWS DocumentDB より 2倍高速 Oracle DatabaseにおけるJSONのパフォーマンス 8 OCPUの

    Autonomous JSON DatabaseとM60上のMongoDB Atlas, AWS DocumentDB on R4.4xlarge との比較 業界標準のYahoo Cloud Serving Benchmark (YCSB) MongoDBの結果の出典 : https://www.mongodb.com/atlas-vs-amazon-documentdb/performance 2020/8/12時点 秒間操作数 秒間操作数 0 10000 20000 30000 40000 50000 60000 70000 80000 YCSB-4M Documents Oracle MongoDB AWS 50% reads / 75% reads / 95% reads / 50% writes 25% writes 5% writes 0 10000 20000 30000 40000 50000 60000 70000 80000 YCSB-81M Documents 50% reads / 75% reads / 95% reads / 50% writes 25% writes 5% writes Oracle MongoDB AWS 5 Copyright © 2021 Oracle and/or its affiliates
  4. CREATE TABLE J_PURCHASEORDER ( id INTEGER PRIMARY KEY, po_document JSON

    ); Copyright © 2021, Oracle and/or its affiliates 6 Oracle Databaseプラットフォームと統合 • Parallel Query • RAC • GoldenGate • … • 高度なセキュリティ機能を利用可能 • VPD、暗号化など • JSONと他のデータを一度に管理可能 • Converged Databaseによる運用の簡素化 バイナリJSON型 • SQL、PL/SQLで利用可能な新しいデータ型 • OCI, JDBCでネイティブ・サポート • OSONをベース – 最適化されたバイナリ表現 • 自己完結型フォーマット • 高速フィールド・ルックアップ • 部分更新可能 • スキャンはテキストより最大10倍高速 • 更新はテキストより最大10倍高速 JSON型 JSONを最適化して保存する新しいデータ型 21c
  5. 従来の課題と背景 JSONドキュメント例 { "title":"mybook", "author":"ROGER" } ファンクション・インデックスとして、索引を作ることができます。 create index authindex1

    on mytable m (m.jsontext.author.string()) しかし、もしJSONに複数の著者が配列として含まれていたら? { "title":"mybook", "author": [ "ROGER", "JOHN" ] } そこで配列エレメントに対して、複数値インデックスが作成可能になりました。 JSON用複数値インデックス スカラー配列値のインデックス 7 Copyright © 2021, Oracle and/or its affiliates 21c
  6. create table mytable (jsoncol json); insert into mytable values (

    '{ "title":"mybook", "author": [ "ROGER", "JOHN" ] }'); create multivalue index authindex2 on mytable m(m.jsoncol.author.string()); select * from mytable m where json_exists(jsoncol, '$?(@.author == "JOHN")'); 複数値インデックス – 例 8 Copyright © 2021, Oracle and/or its affiliates 21c
  7. -------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows |

    Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 6104 | 2 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID BATCHED| MYTABLE | 1 | 6104 | 2 (0)| 00:00:01 | | 2 | HASH UNIQUE | | 1 | 6104 | | | |* 3 | INDEX RANGE SCAN (MULTI VALUE) | AUTHINDEX2 | 1 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------------------- • インデックスはデータ型が一致するときのみ使用されます。 • インデックスとしてstring(), number(), stringOnly()またはnumberOnly()を利 用できます。 • 最初の2つは型変換を自動的に行います。続く2つはされません。 複数値インデックス– 実行計画の出力例 9 Copyright © 2021, Oracle and/or its affiliates 21c
  8. { "empno" : 7839, "name" : "KING", "salary" : 5000,

    "department" : { "name" : "ACCOUNTING", "loc" : "NEW YORK" } } SELECT JSON { 'empno' : empno, 'name' : ename, 'salary' : sal, 'department' : ( SELECT JSON { 'name' : dname, 'loc' : loc } FROM dept d WHERE d.deptno = e.deptno ) } FROM emp e WHERE e.empno = 7839; Copyright © 2021, Oracle and/or its affiliates 10 JSONテキストに似た構文を使用してSQLにてJSON型の値を作成 SQLでJSON-likeな構築構文 SQL/JSON 機能拡張 21c
  9. JSON_Transform • 既存の構文とセマンティクス(述語など)に従った新たな SQL/JSON演算子 • 一度の処理に複数の演算子の使用可能 (SET, APPEND, REMOVEなど) •

    部分的な更新をサポート • JSON型 でのJSON_Transformはログサイズを削減することに最適化(ディスク上で部分的なアップ デート) • SELECT内でのJSON_Transformはクライアントに送信前にデータを変更 (プライベート・データを 削除) SQL/JSON 機能拡張 新しいJSON_TRANSFORM演算子 11 Confidential – © 2020 Oracle Internal 21c
  10. Copyright © 2021, Oracle and/or its affiliates 12 JSON_TRANSFORM サンプル

    SQL/JSON 機能拡張 UPDATE employees e SET e.jcol = JSON_TRANSFORM (e.jcol, SET '$.job' = 'Surfing Instructor', SET '$.salary' = (e.jcol.salary / 3), REMOVE '$.phones[*]?(@.type == "work")', APPEND '$.children' = 'Fiona’) WHERE e.jcol.id = 123; { "id” : 123, ”name” : "John Smith", "age” : 25, "job” : "Programmer", "salary” : 60000, "phones” : [ {"type” : "mobile", "number” : "555-123-4567"}, {"type” : "work", "number” : "555-999-1111"} ], "children” :["Sydney","Sierra"] } { "id” :123, "name" : "John Smith", "age " : 25, "job " : "Surfing Instructor", "salary” : 20000, "phones” : [ {"type” : "mobile", "number” : "555-123-4567"} ], "children” : ["Sydney","Sierra","Fiona"] }
  11. JSON in Oracle Database ケース・スタディ ケース1: 大手保険会社(北米) メリット: シンプル、迅速な開発、より高度 な分析

    • 各保険のポリシーがJSONドキュメントに なっていた • 様々なポリシーの形式を取ることが可能 • すべてのポリシーが1つのドキュメント • 分解や結合なし • データの入出力が低レイテンシ • Webアプリケーションに最適で顧客の体 験も向上 リレーショナル・ビュー • レポーティング • 毎日のリスク分析 ケース2: グローバルな証券取引所 メリット: 新たなデータ・ドリブン・アプリケーショ ン構築が劇的にシンプルに • 金融商品のメタデータ • 最大1600の属性 • 平均で100使用 • 必要に応じてアプリケーションはデータベース 操作なしで新しい属性を追加 • 属性はJSONカラム内に SQLでより高度なレポーティング • 銀行向けのカスタムレポート • SQL/JSON 操作 ケース3: グローバル展開の小売り業、 店舗およびオンラインショップ メリット: 開発の柔軟性向上、統一されたセキュ リティ、レポーティング セールス・アプリケーションの一部 • 注文状況のトラッキング • 支払いのトラッキング • ギフト・カード処理 • 開発者がドキュメント・ストアのモデルが使いや すかった • アジャイル、生産性向上、使いやすさ • DBAやIT運用管理の観点でも統一されたセ キュリティやデータ保護が実現でき望ましかった • SQLによるレポーティングと機械学習 Copyright © 2021, Oracle and/or its affiliates 13