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

Oracle NoSQL Database Cloud Service 技術詳細

Oracle NoSQL Database Cloud Service 技術詳細

oracle4engineer

August 25, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. テーブル • KeyとColumnを持つRowを保持する • スキーマをあらかじめ定義する データの型 • STRING, LONG, BINARY,

    ARRAY, MAPなど多種 • JSON型の保持が可能 • JSONの一部変更やJSONフィールド内にインデックスの付与など、 柔軟な管理/操作が可能 キャパシティ • 読込み容量(RU)/書込み容量(WU)/ストレージ容量 • テーブル毎にモードを設定 • Provisioned: キャパシティを手動で設定 • On-Demand: キャパシティが動的にスケール Oracle NoSQL Database Cloud Serviceのコンセプト Copyright © 2023, Oracle and/or its affiliates 2 Integer (key) String (data) String (data) Json (data) num1 string1 string1 json1 num2 string2 string2 json2 num3 string3 string3 json3 num4 string4 string4 json4 DATA CAPACITY PROVISIONED STORAGE READ WRITE NoSQL Table
  2. データの分散配置とシャーディング • NoSQL CSでは、データのレプリケーションとシャーディングが内部的に行われている • どのように分散されているかはユーザからは見えない • 効果的にデータを分散/データにアクセスするためには以下の概念の理解が必要 Primary Key

    • テーブル内のデータを一意にするための1つまたは複数の(複合)キーのこと Shard Key • Primary Keyの中から(複数)選択する • データを効率的に分散するためのキーとなる • Shard Keyが同様のデータは物理的に同様の場所に保管されることになる Oracle NoSQL Database Cloud Serviceのコンセプト Copyright © 2023, Oracle and/or its affiliates 3
  3. Shard Keyによってデータは物理的に単一のShardに保管される • 物理的にデータをまとめることで、効率的なデータ操作が可能 • データの配置場所に偏りができるとパフォーマンスに悪影響 効果的に分散をするための、Shard Keyを選択する際の考慮すべき要素 • Cardinality

    • user_countryのようにCardinalityの低いフィールドでは、データ分散の偏りができてしま う恐れがある • user_idのように、各Shard Keyが高いCardinalityを持つことで、効率的にデータを分 散配置することが可能 • Atomicity • Shard Keyを共有するデータのみがトランザクション処理の対象となる 設計時は、これら「効率的な分散」と「トランザクション処理の必要性」を考慮して行う Shard Keyの設計 Copyright © 2023, Oracle and/or its affiliates 4 Client Shard Shard データの偏りによるアクセスの集中 をHot shard問題という
  4. 整合性優先/スループット 優先の選択 API/SDKを用いてデータを 読み込む際に、整合性を 優先するオプションがある その際に消費するRUは通 常の2倍となる Time-To-Live テーブル作成時、テーブル 内のデータ残存期間を指

    定できる 残存期間を過ぎたデータは ディスク上から削除される SQLクエリの実行 OnP製品と同様にSQLクエ リの実行が可能 子テーブル(子表)機能によ るJOINのサポート インデックス SQLクエリで利用可能な、 インデックスの付与が可能 JSON内のフィールドにも付 与できる Oracle NoSQL Database Cloud Serviceの機能 Copyright © 2023, Oracle and/or its affiliates 5 Client NoSQL 最新の結果を取得 Table created_at : 2020/11/11 created_at : 2020/11/12 TTL: 1DAY, 2020/11/12 SELECT id, firstname, lastname FROM Users WHERE firstname = "Taylor"; SELECT * FROM nosql where nosql.json.name = "Test"
  5. Copyright © 2023, Oracle and/or its affiliates 6 テーブルには階層構造を持たせることが可能 •

    LEFT OUTER JOINが可能になり、より柔軟にデータモデルの設計が可能 • テーブル同士のデータ結合のためにアプリケーションで操作を行う必要がなく、NoSQLデータベース上で完結 • 子テーブルは、親テーブルの主キーを継承 • 子テーブルにさらに子テーブルを持たせることが可能 • 親テーブル/子テーブルはそれぞれ独立してクエリ/APIの実行が可能 SQLクエリの実行 –子テーブル(子表) CREATE TABLE A ( ida INTEGER, a1 STRING, a2 INTEGER, PRIMARY KEY(ida)); -- ida が主キー CREATE TABLE A.B ( idb INTEGER, b1 STRING, a2 STRING, PRIMARY KEY(idb)); -- ida,idb が主キー CREATE TABLE A.B.C ( idc INTEGER, b1 STRING, c2 STRING, PRIMARY KEY(idc)); -- ida,idb,idc が主キー CREATE TABLE A.G ( idg INTEGER, g1 STRING, g2 DOUBLE, PRIMARY KEY(idg)); ▪子テーブルによるテーブル階層の構成
  6. Copyright © 2023, Oracle and/or its affiliates 7 Indexを利用しない場合にも、WHERE句、ORDER BY句、GROUP

    BY句などの利用は可能 • Indexを利用することで、SQLクエリのチューニングが可能 • query plan (問合せ実行計画の表示)によってチューニングを行う ※既存のレコードが変更(追加、更新または削除)されると、Indexの更新が走るので、追加で書込みユニットを消費 Index(索引)の利用 – query plan query planを表示し、検索実行時の 検索アルゴリズムを表示 https://docs.oracle.com/en/database/other-databases/nosql- database/22.2/sqlreferencefornosql/overview-query-plan.html
  7. OCI SDKとNoSQL Driverの2パターン OCI SDKで接続 • OCI IAMやポリシーを用いた接続 • 他のOCIリソースやサービスとの相互運用

    NoSQL Driverを用いた接続 • Config(APIキー)を用いた接続 • シミュレータやオンプレミス版との相互運用 アプリケーションとの接続 Copyright © 2023, Oracle and/or its affiliates 8
  8. 9 Copyright © 2023, Oracle and/or its affiliates データ追加時のサンプルコード (注)OCI

    SDKの場合 • 既存のRowはすべて上書きする(デフォルトの動作) • Rowが存在しないときのみデータを追加する場合 • Rowが存在するときのみデータを更新する場合 • Rowが存在し、指定したバージョンと一致するときのみデータを更 新する場合* *なぜバージョンの概念が必要か? • 更新や削除を行う場合、Rowの値が変更され ていない場合にのみ操作を行うことが必要に なる場面がある • 同時にRowを操作するスレッドやプロセスが 複数存在し得るアプリでは特に有用 • OCI SDKの場合はetagでバージョンを表現す る • Rowが最初に追加された際に一意のバージョ ンが割り当てられ、そのRowに更新があった 際にはバージョンも更新される • Key, Valueの指定の仕方
  9. 10 Copyright © 2023, Oracle and/or its affiliates データ読出し時のサンプルコード (注)OCI

    SDKの場合 • APIを利用したデータの読出し • SQLを利用したデータの読出し
  10. NoSQL CSは、シミュレータを用いて開発環境を構築することが可能 1. https://www.oracle.com/downloads/cloud/nosql-cloud-sdk-downloads.htmlよりダウンロード 2. unzipして起動 3. オプションは以下のようになる シミュレータを用いた開発 Copyright

    © 2023, Oracle and/or its affiliates 11 -host (default: localhost): allows control over the database host used -storePort (default: 5000): allows control over the database port used -httpPort (default: 8080): allows control over the HTTP port used -throttle (default: false): enables throttling based on declared throughput -verbose (default: false): adds verbosity to output. If set to true throttling exceptions will be thrown if throughput is exceeded.