Azure Cosmos DB Technical Deep Dive
~グローバル分散型マルチ モデル
データベース サービスを使いこなそう~
db tech showcase Tokyo 2018
#dbts2018 #E25
https://twitter.com/satonaoki
https://satonaoki.wordpress.com
http://aka.ms/weeklyazure
スピーカー
http://www.shuwasystem.co.jp/
products/7980html/4573.html
https://www.oreilly.co.jp/
books/9784873117140/
セッション概要
アジェンダ
TrustedProductiveIntelligentHybrid
Azure Cosmos DB 概要
世界中に分散されたデータの管理と同期
応答性の高いリアル タイムのパーソナライズの提
供
大規模で複雑なデータの処理と分析
グローバルの需要を基にしたスループット、ストレー
ジのスケーリング
グローバルのユーザーへの低レイテンシの提供
既存アプリ、データのモダナイゼーション
モダン アプリが
直面する新たな課題
Azure Cosmos DB
モダン アプリ向けに超低レイテンシ、
大規模なスケールを保証するために構築された
フル マネージド、グローバル分散データベース サービス
Azure Cosmos DB
SQL
MongoDB
Table API
ターンキー
グローバル分散
ストレージ、スループットの
エラスティック スケール アウト
99 パーセンタイルでの
低レイテンシ保証
包括的な SLA
5 つの明確に定義された
整合性モデル
ドキュメント列ファミリ
キー/値 グラフ
キー/値
Key Value
Key1 $3.05
Key2 9/22/1974
Key3 $4.99 Profile1.jpg
列指向
ドキュメント
グラフ
Azure Cosmos DB
SQL
MongoDB
Table API
ターンキー
グローバル分散
ストレージ、スループットの
エラスティック スケール アウト
99 パーセンタイルでの
低レイテンシ保証
包括的な SLA
5 つの明確に定義された
整合性モデル
ドキュメント列ファミリ
キー/値 グラフ
Azure Cosmos DB
ユースケース
アプリケーションを世界中に分散
IoT (Internet of Things)
パーソナライズ
小売業と EC
ゲーム
サーバーレス アプリ
Jet.com 在庫処理システム「Panther」
Event streams
(CosmosDB)
Raw sellable
inventory
(Kafka)
Commands
(Kafka)
Process command
Events
(Kafka)
Change Feed
Snapshot event
stream
Map raw sellable
inventory
Process command
(reservations only)
Commands
(HTTP)
Customer
front-end
checkout
Event stream
snapshots
(CosmosDB)
Inventory & order
updates (Kafka)
Marts
(Walmart.com,
Jet.com)
Filter available
inventory per mart
External to
Panther system
Communication
channel
Panther μs
Data
store
Map msg to
command
https://satonaoki.wordpress.com/2018/05/18/
azure-cosmos-db-customer-profile-jet-com/
Azure Cosmos DB
リソース モデル
リソース モデル
Account
DatabaseDatabaseDatabase
DatabaseDatabaseContainer
DatabaseDatabaseItem
Account
DatabaseDatabaseDatabase
DatabaseDatabaseContainer
DatabaseDatabaseItem
アカウント URI と資格情報
********.azure.com
IGeAvVUp …
アカウントの作成
Account
DatabaseDatabaseDatabase
DatabaseDatabaseContainer
DatabaseDatabaseItem
データベース
Account
DatabaseDatabaseDatabase
DatabaseDatabaseContainer
DatabaseDatabaseItem
DatabaseDatabaseContainer
DatabaseDatabaseItem
コンテナー
Account
DatabaseDatabaseDatabase
DatabaseDatabaseContainer
DatabaseDatabaseItem
=Collection Graph Table
コレクションの作成 - SQL API
Account
DatabaseDatabaseDatabase
DatabaseDatabaseContainer
DatabaseDatabaseItem
コンテナー レベルのリソース
Account
DatabaseDatabaseDatabase
DatabaseDatabaseContainer
DatabaseDatabaseItem ConflictSproc Trigger UDF
Atom-Record-Sequence (ARS)
Atom-Record-Sequence (ARS)
Atom-Record-Sequence (ARS)
コンテナー
Atom-Record-Sequence (ARS)
Atom-Record-Sequence (ARS)
コンテナー
コレクション テーブル グラフ
プロジェクション
Atom-Record-Sequence (ARS)
アイテム
Projection
システム トポロジ
Resource
Manager
Language
Runtime(s)
Hosts
Query
Processor
RSM
Index Manager
Bw-tree++/LLAMA++
Log Manager
IO Manager
Resource Governor
Transport
Database engine
Admission control
…
…
地球 Azureリージョン データセンター スタンプ 障害ドメイン
クラスター マシン レプリカ データベース エンジン
Container
Various agents
リソース階層
コンテナー
リソース パーティション
コレクションテーブル グラフ
テナント
リーダー
フォロワー
フォロワー
フォワーダー
レプリカ セット
リモートのリソース
パーティションへ
Azure Cosmos DB
Graph APIによる
フライト データの処理
C# からの Gremlin クエリの実行
g.V('{from}').union(outE().inV().hasId('{to}'),
outE().inV().outE().inV().hasId('{to}')).path()
要求ユニット (RU)
要求ユニット (RU)
% IOPS% CPU% メモリ
要求ユニット (RU)
GET
POST
PUT
クエリ
…
=
=
=
=
要求ユニット (RU)
最小 RU/秒
最大 RU/秒
入力リクエスト
レプリカが
休止状態
レート制限
レート制限なし
New 一連のコンテナーに対するRU/秒のプロビジョニング
コンテナー レベルで
スループットを
プロビジョニング
データベース レベルで
スループットを
プロビジョニング
テナント
テーブル コンテナー グラフ
コンテナー
データベース内の
一連のコンテナー
リソース パーティション リソース パーティション
データベース レベルでのスループットのプロビジョニング
スケール アウト
ストレージとスループットのエラスティックなスケール アウト
ストレージとスループットのエラスティックなスケール アウト
パーティション
Cosmos DB コンテナー
(コレクション)
パーティション キー:
ユーザー ID
論理パーティション
分割の抽象化
背後にある物理
パーティション セット
ハッシュ (ユーザー ID)
ハッシュ値の範囲にわたる疑似ランダムなデータ分散
パーティション
…
パーティション 1 パーティション 2 パーティション n
実際のストレージ、スループットのニーズを基にした少ないパーティション数
(低い TCO でスケーラビリティを実現)
ハッシュ (ユーザー ID)
ハッシュ値の範囲にわたる疑似ランダムなデータ分散
Andrew
Mike
…
Bob
Dharma
Shireesh
Karthik
Rimma
Alice
Carol
…
パーティション
…
パーティション1 パーティション2 パーティションn
パーティションが増大する必要があるとき、何が起こるか?
ハッシュ (ユーザー ID)
ハッシュ値の範囲にわたる疑似ランダムなデータ分散
Andrew
Mike
…
Bob
Dharma
Shireesh
Karthik
Rimma
Alice
Carol
…
パーティション
+
パーティ
ション x
パーティ
ション x1
パーティ
ション x2
ハッシュ (ユーザー ID)
ハッシュ値の範囲にわたる疑似ランダムなデータ分散
Rimma
Karthik
…
Dharma
Shireesh
Karthik
Rimma
Alice
Carol
…
Dharma
Shireesh
…
パーティション
パーティション
New Bulk Executor Library
レプリケーション
ターンキー グローバル分散
ターンキー グローバル分散
Writes/
Reads
Reads
"airport" : “AMS" "airport" : “MEL"
West US
Container
"airport" : "LAX"
Local Distribution (via horizontal partitioning)
GlobalDistribution(ofresourcepartitions)
Reads
30K transactions/sec
Writes/
ReadsReads
Reads
West Europe
30K transactions/sec
Partition-key = "airport"
グローバルなデータ レプリケーション
グローバルなデータ レプリケーション
グローバルなデータ レプリケーション
グローバルなデータ レプリケーション
http://mongogeodemo.azurewebsites.net/
自動フェールオーバー
自動フェールオーバー
手動フェールオーバー
Strong Bounded-staleness Session Consistent prefix Eventual
5 つの明確に定義された整合性モデル
Azure Cosmos DB の整合性レベル
Azure Cosmos DB の整合性レベル
https://languye-webapp.azurewebsites.net/music/music.html
New グローバル スケールのマルチ マスター (プレビュー)
マルチ マスターでの競合解決モデル
Azure Cosmos DB PxDraw https://pxdraw.azure.com/
スキーマ非依存の
インデックス作成
スキーマなし、インデックス作成なしで、あらゆるデータを処理
Item Color
Microwave
safe
Liquid
capacity
CPU Memory Storage
Geek
mug
Graphite Yes 16ox ??? ??? ???
Coffee
Bean
mug
Tan No 12oz ??? ??? ???
Surface
book
Gray ??? ??? 3.4 GHz
Intel
Skylake
Core i7-
6600U
16GB 1 TB SSD
GEEK
JSON ドキュメントのインデックス作成
{
"locations": [
{
"country": "Germany",
"city": "Berlin"
},
{
"country": "France",
"city": "Paris"
}
],
"headquarter": "Belgium",
"exports": [
{ "city": "Moscow" },
{ "city": "Athens" }
]
}
locations headquarter exports
0
country city
Germany Berlin
1
country city
France Paris
0 1
city
Athens
city
Moscow
Belgium
JSON ドキュメントのインデックス作成
{
"locations": [
{
"country": "Germany",
"city": "Bonn",
"revenue": 200
}
],
"headquarter": "Italy",
"exports": [
{
"city": "Berlin",
"dealers": [
{ "name": "Hans" }
]
},
{ "city": "Athens" }
]
}
locations headquarter exports
0
country city
Germany Bonn
revenue
200
0 1
citycity
Berlin
Italy
dealers
0
name
Hans
JSON ドキュメントのインデックス作成
Athens
locations headquarter exports
0
country city
Germany Bonn
revenue
200
0 1
citycity
Berlin
Italy
dealers
0
name
Hans
locations headquarter exports
0
country city
Germany Berlin
1
country city
France Paris
0 1
city
Athens
city
Moscow
Belgium
転置インデックス
locations headquarter exports
0
country city
Germany
Berlin
revenue
200
0 1
city
Athens
city
Berlin
Italy
dealers
0
name
Hans
Bonn
1
country city
France Paris
Belgium
Moscow
インデックス ポリシー
{
"automatic": true,
"indexingMode": "Consistent",
"includedPaths": [{
"path": "/*",
"indexes": [{
"kind": "Hash",
"dataType": "String",
"precision": -1
}, {
"kind": "Range",
"dataType": "Number",
"precision": -1
}, {
"kind": "Spatial",
"dataType": "Point"
}]
}],
"excludedPaths": [{
"path": "/nonIndexedContent/*"
}]
}
最近の新機能
一連のコンテナーに対するRU/秒のプロビジョニング
コンテナー レベルで
スループットを
プロビジョニング
データベース レベルで
スループットを
プロビジョニング
テナント
テーブル コンテナー グラフ
コンテナー
データベース内の
一連のコンテナー
リソース パーティション リソース パーティション
データベース レベルでのスループットのプロビジョニング
Bulk Executor Library
グローバル スケールのマルチ マスター (プレビュー)
仮想ネットワーク サービス エンドポイント
SQL API 向けの Java 非同期ライブラリ
まとめ
cosmosdb.com
gotcosmos.com
azure.microsoft.com/try/cosmosdb/
azure.microsoft.com/free/
What’s Next
© 2018 Microsoft Corporation. All rights reserved.
本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

[db tech showcase Tokyo 2018] Azure Cosmos DB Technical Deep Dive ~グローバル分散型マルチ モデル データベース サービスを使いこなそう~