Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[第2回 Azure Cosmos DB 勉強会] Data modelling and pa...
Search
SATO Naoki (Neo)
September 13, 2020
Technology
0
950
[第2回 Azure Cosmos DB 勉強会] Data modelling and partitioning in Azure Cosmos DB (Azure Cosmos DB でのデータモデリングとパーティション分割)
https://satonaoki.wordpress.com/2020/09/13/jcdug-cosmos-db-data-modeling/
SATO Naoki (Neo)
September 13, 2020
Tweet
Share
More Decks by SATO Naoki (Neo)
See All by SATO Naoki (Neo)
Build enterprise-grade AI agents with Azure AI Agent Service
satonaoki
1
470
Microsoft Build 2024 Updates
satonaoki
0
320
LLMOps with Azure Machine Learning prompt flow
satonaoki
1
830
マルチクラウド時代の企業における生成AIとデータベースの関係 (Oracle Technology Day)
satonaoki
0
960
Microsoft Copilot, your everyday AI companion (Machine Learning 15minutes! Broadcast #82)
satonaoki
0
1.3k
Microsoft Build 2023 Updates – Copilot Stack and Azure OpenAI Service (Machine Learning 15minutes! Broadcast #78)
satonaoki
2
1.3k
Microsoft + OpenAI: Recent Updates (Machine Learning 15minutes! Broadcast #74)
satonaoki
1
1.1k
30分でわかるマイクロサービスアーキテクチャ 第2版
satonaoki
9
7.2k
[Machine Learning 15minutes! Broadcast #67] Azure AI - Build 2022 Updates and more...
satonaoki
0
390
Other Decks in Technology
See All in Technology
5分で知るMicrosoft Ignite
taiponrock
PRO
0
250
Playwright x GitHub Actionsで実現する「レビューしやすい」E2Eテストレポート
kinosuke01
0
480
AWS Trainium3 をちょっと身近に感じたい
bigmuramura
1
130
SSO方式とJumpアカウント方式の比較と設計方針
yuobayashi
7
530
AI活用によるPRレビュー改善の歩み ― 社内全体に広がる学びと実践
lycorptech_jp
PRO
1
190
形式手法特論:CEGAR を用いたモデル検査の状態空間削減 #kernelvm / Kernel VM Study Hokuriku Part 8
ytaka23
2
450
直接メモリアクセス
koba789
0
290
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
290
Lessons from Migrating to OpenSearch: Shard Design, Log Ingestion, and UI Decisions
sansantech
PRO
1
100
Oracle Technology Night #95 GoldenGate 26ai の実装に迫る1
oracle4engineer
PRO
0
150
Kiro Autonomous AgentとKiro Powers の紹介 / kiro-autonomous-agent-and-powers
tomoki10
0
340
モダンデータスタック (MDS) の話とデータ分析が起こすビジネス変革
sutotakeshi
0
440
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
BBQ
matthewcrist
89
9.9k
How to Ace a Technical Interview
jacobian
280
24k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Transcript
Data modelling and partitioning in Azure Cosmos DB (Azure Cosmos
DB でのデータ モデリングとパーティション分割)
Session's objectives
What is Azure Cosmos DB? Non-relational and horizontally scalable
What is Azure Cosmos DB? horizontally scalable
What is Azure Cosmos DB? non-relational
What is Azure Cosmos DB? non-relational and horizontally scalable
So is Azure Cosmos DB suitable for relational workloads?
Let's look at a concrete example
Identifying the operations we have to serve
Now let's implement this model on Azure Cosmos DB!
Starting with the Customer entity
Starting with the Customer entity
To embed or to reference?
To embed or to reference? - - - - -
-
Our first entity: Customer
Customer customers PK: ?
What is partitioning?
What is partitioning? logical partitions
What is partitioning? Andrew Theo Mark Tim Deborah Luis
What is partitioning? Max size: 20 GB Max size: 2
MB
What is partitioning?
What is partitioning?
What is partitioning?
What is partitioning? Andrew Theo Mark Tim Deborah Luis SELECT
* FROM c WHERE c.username = 'Mark' our partition key
What is partitioning? Andrew Theo Mark Tim Deborah Luis SELECT
* FROM c WHERE c.favoriteColor = 'orange' ?
Choosing a partition key for customers customers PK: ?
Choosing a partition key for customers customers PK: ?
Choosing a partition key for customers customers PK: id
Choosing a partition key for customers customers PK: id
Next: product categories
Product categories
Product categories productCategories PK: ?
Product categories productCategories PK: ? SELECT * FROM c
Product categories productCategories PK: type
Next: product tags
Product tags
Product tags productTags PK: ?
Product tags productTags PK: ?
Product tags productTags PK: type
Next: products
Products
Products
Products products PK: ?
Products products PK: ? CategoryA CategoryC CategoryB SELECT * FROM
c WHERE c.categoryId = 'CategoryA'
Products products PK: categoryId category name? tag names?
Products: how to return category and tag names? products SELECT
* FROM c WHERE c.categoryId = 'CategoryA' productCategories SELECT c.name FROM c WHERE c.id = 'CategoryA' productTags SELECT * FROM c WHERE c.id IN ('<tagId1>', '<tagId2>', '<tagId3>')
Introducing denormalization
Products: denormalizing category and tag names products PK: categoryId
Products: keeping everything in sync productCategories productTags products
Cosmos DB's change feed
Products: keeping everything in sync productCategories productTags products
Next: sales orders
Sales orders
Sales orders
Sales orders salesOrders PK: ?
Sales orders salesOrders PK: ?
Sales orders salesOrders PK: ? CustomerA CustomerC CustomerB SELECT *
FROM c WHERE c.customerId = 'CustomerA'
Sales orders salesOrders PK: customerId
Sales orders salesOrders PK: customerId customers PK: id
Mixing entities in the same container?
Sales orders salesOrders PK: customerId customers PK: id
Sales orders: mixing with customers customers PK: id
Sales orders: mixing with customers customers PK: customerId
Sales orders: mixing with customers customers PK: customerId
Sales orders: mixing with customers CustomerA CustomerC CustomerB customer sales
orders customers PK: customerId
Sales orders customers PK: customerId SELECT * FROM c WHERE
c.customerId = 'CustomerA' AND c.type = 'salesOrder'
Sales orders customers PK: customerId
Denormalizing the count of sales orders per customer
Denormalizing the count of sales orders per customer
Denormalizing the count of sales orders per customer CustomerA CustomerC
CustomerB customer sales orders customers PK: customerId
Denormalizing the count of sales orders per customer CustomerA CustomerC
CustomerB update the customer add a sales order customers PK: customerId
Denormalizing the count of sales orders per customer CustomerA CustomerC
CustomerB update the customer add a sales order
Sales orders customers PK: customerId SELECT * FROM c WHERE
c.type = 'customer' ORDER BY c.salesOrderCount DESC
Our final design customers PK: customerId productCategories PK: type productTags
PK: type products PK: categoryId
Our final design, optimized! customers PK: customerId productMeta PK: type
products PK: categoryId
Key takeaways
Going further https://docs.microsoft.com/azure/cosmos-db/modeling-data https://docs.microsoft.com/azure/cosmos-db/how-to-model-partition-example https://devblogs.microsoft.com/cosmosdb/data-modeling-and-partitioning-for-relational-workloads/ https://github.com/AzureCosmosDB/labs/blob/master/readme.md https://github.com/AzureCosmosDB/labs/blob/master/decks/Data-Modeling.pptx