microsoft - 次世代データベース サービス「azure …...table api ターンキー...
TRANSCRIPT
次世代データベースサービス
「Azure Cosmos DB」を使いこなそう
~ Azure Cosmos DB Deep Dive ~
DA19
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/
https://www.microsoft.com/ja-jp/events/decode/2018/sessions.aspx#DA19
セッション概要
アジェンダ
Azure Cosmos DB 概要
Azure Cosmos DB
SQLMongoDB
Table API
ターンキー
グローバル分散
ストレージ、スループットの
エラスティック スケール アウト
99 パーセンタイルでの
低レイテンシ保証
包括的な SLA
5 つの明確に定義された
整合性モデル
ドキュメント列ファミリキー/値 グラフ
キー/値
Key Value
Key1 $3.05
Key2 9/22/1974
Key3 $4.99 Profile1.jpg
列指向
ドキュメント
グラフ
Azure Cosmos DB
SQLMongoDB
Table API
ターンキー
グローバル分散
ストレージ、スループットの
エラスティック スケール アウト
99 パーセンタイルでの
低レイテンシ保証
包括的な SLA
5 つの明確に定義された
整合性モデル
ドキュメント列ファミリキー/値 グラフ
Azure Cosmos DBユースケース
ミッション クリティカルなアプリケーションを世界中に分散
IoT
パーソナライズ
小売業と E コマース
ゲーム
サーバーレス アプリ
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
LanguageRuntime(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
Query
…
=
=
=
=
要求ユニット (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/
ReadsReads
"airport" : “AMS" "airport" : “MEL"
West US
Container
"airport" : "LAX"
Local Distribution (via horizontal partitioning)
Glo
bal D
istr
ibutio
n (o
f re
sourc
e p
art
itio
ns)
Reads
30K transactions/secWrites/
ReadsReads
Reads
West Europe
30K transactions/sec
Partition-key = "airport"
グローバルなデータ レプリケーション
グローバルなデータ レプリケーション
グローバルなデータ レプリケーション
自動フェールオーバー
自動フェールオーバー
手動フェールオーバー
Strong Bounded-staleness Session Consistent prefix Eventual
5つの明確に定義された整合性モデル
Azure Cosmos DBの整合性レベル
Newグローバルスケールのマルチ マスター (プレビュー)
マルチ マスターでの競合解決モデル
Azure Cosmos DB PxDraw https://pxdraw.azure.com/
スキーマ非依存のインデックス作成
スキーマなし、インデックス作成なしで、あらゆるデータを処理
Item ColorMicrowave
safe
Liquid
capacityCPU 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/*"
}]
}
Build 2018 での新機能
一連のコンテナーに対するRU/秒のプロビジョニング
コンテナー レベルでスループットをプロビジョニング
データベース レベルでスループットをプロビジョニング
テナント
テーブル コンテナー グラフ
コンテナーデータベース内の
一連のコンテナー
リソース パーティション リソース パーティション
データベース レベルでのスループットのプロビジョニング
Bulk Executor Library
グローバル スケールのマルチ マスター (プレビュー)
VNET サービス エンドポイント
SQL API向けの Java 非同期ライブラリ
まとめ
© 2018 Microsoft Corporation. All rights reserved.
本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。