Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Oracle NoSQL Database Cloud Service 技術詳細
Search
oracle4engineer
PRO
August 25, 2023
Technology
840
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Oracle NoSQL Database Cloud Service 技術詳細
oracle4engineer
PRO
August 25, 2023
More Decks by oracle4engineer
See All by oracle4engineer
OracleTechnologyNight101_Oracle_Backup_Recovery_Strategy_from_REDO_UNDO
oracle4engineer
PRO
1
330
Oracle Cloud Infrastructure:2026年7月度サービス・アップデート
oracle4engineer
PRO
0
330
Lakehouseの要!Open Table Format深掘り(OCHaCafe Season 11 #6)
oracle4engineer
PRO
1
84
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
[JPOUG Tech Talk Night #16]1歩踏み込むSQLの結合方法
oracle4engineer
PRO
4
230
『モデル + ハーネス』で読み解く AIエージェント入門
oracle4engineer
PRO
2
260
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.6k
Deep Data Security 機能解説
oracle4engineer
PRO
2
400
Oracle Cloud Infrastructure:2026年6月度サービス・アップデート
oracle4engineer
PRO
1
860
Other Decks in Technology
See All in Technology
コンポーネント名には何を含めるべきなのか? / what-should-be-included-in-component-names
airrnot1106
0
250
plamo-3-translateの開発
pfn
PRO
0
270
Cursor Meetup Sapporo - Cursor物語 続編
cocacola917
0
110
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.5k
SmartHR Engineering Team Deck
smarthr
0
180
データエンジニアこそ組織のオントロジーに向き合うべき — 問いに答えるAIから、事業を動かすAIへ
gappy50
7
3.2k
[MIRU26] Open-Vocabulary Intention-Guided Object Detection in Diverse Scenes
keio_smilab
PRO
0
130
Digitization部 紹介資料
sansan33
PRO
2
7.7k
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
1
140
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
200
変化の早いClaude Codeを 書籍に落とし込む
oikon48
6
1.2k
AIが自社のTableauを操作する世界へ:Tableau MCP超入門
tbtykk
0
110
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
460
Unsuck your backbone
ammeep
672
58k
Skip the Path - Find Your Career Trail
mkilby
1
180
30 Presentation Tips
portentint
PRO
1
360
Rails Girls Zürich Keynote
gr2m
96
14k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
820
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
How to Ace a Technical Interview
jacobian
281
24k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
Side Projects
sachag
455
43k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
Transcript
Oracle NoSQL Database Cloud Service 技術詳細 日本オラクル株式会社 May. 2023
テーブル • 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
データの分散配置とシャーディング • NoSQL CSでは、データのレプリケーションとシャーディングが内部的に行われている • どのように分散されているかはユーザからは見えない • 効果的にデータを分散/データにアクセスするためには以下の概念の理解が必要 Primary Key
• テーブル内のデータを一意にするための1つまたは複数の(複合)キーのこと Shard Key • Primary Keyの中から(複数)選択する • データを効率的に分散するためのキーとなる • Shard Keyが同様のデータは物理的に同様の場所に保管されることになる Oracle NoSQL Database Cloud Serviceのコンセプト Copyright © 2023, Oracle and/or its affiliates 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問題という
整合性優先/スループット 優先の選択 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"
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)); ▪子テーブルによるテーブル階層の構成
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
OCI SDKとNoSQL Driverの2パターン OCI SDKで接続 • OCI IAMやポリシーを用いた接続 • 他のOCIリソースやサービスとの相互運用
NoSQL Driverを用いた接続 • Config(APIキー)を用いた接続 • シミュレータやオンプレミス版との相互運用 アプリケーションとの接続 Copyright © 2023, Oracle and/or its affiliates 8
9 Copyright © 2023, Oracle and/or its affiliates データ追加時のサンプルコード (注)OCI
SDKの場合 • 既存のRowはすべて上書きする(デフォルトの動作) • Rowが存在しないときのみデータを追加する場合 • Rowが存在するときのみデータを更新する場合 • Rowが存在し、指定したバージョンと一致するときのみデータを更 新する場合* *なぜバージョンの概念が必要か? • 更新や削除を行う場合、Rowの値が変更され ていない場合にのみ操作を行うことが必要に なる場面がある • 同時にRowを操作するスレッドやプロセスが 複数存在し得るアプリでは特に有用 • OCI SDKの場合はetagでバージョンを表現す る • Rowが最初に追加された際に一意のバージョ ンが割り当てられ、そのRowに更新があった 際にはバージョンも更新される • Key, Valueの指定の仕方
10 Copyright © 2023, Oracle and/or its affiliates データ読出し時のサンプルコード (注)OCI
SDKの場合 • APIを利用したデータの読出し • SQLを利用したデータの読出し
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.
NoSQLのSDKをダウンロード(https://www.oracle.com/downloads/cloud/nosql-cloud-java-driver- downloads.html)して、サンプルアプリをシミュレータの上で動かしてみる • localhost:8080で動作していることが分かる シミュレータを用いた開発 Copyright © 2023, Oracle and/or
its affiliates 12
None