【Microsoft Azure】CosmosDBのデータモデルはこう設計する!

こんばんは。今日は、Microsoft Azureが提供するデータベース、CosmosDBのデータモデル設計について学んだことを整理しておこうと思います。

これまで仕事などでもOracle DBなどのRDBMSしか扱ってこなかったわけですが、この度CosmosDBを使う都合が出てきたので、そのデータモデルの設計方法について、RDBMSとどう変わるのかという点を中心に整理しておきたいと思い、調べてみることにしました。

と、探してみると、この点については、Microsoft Azureの公式ドキュメントにちゃんと整理されていましたので、こちらを読みながら、学んだ点をメモしておこうと思います。

というわけで今日の教科書はこちらです。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/modeling-data

CosmosDBのデータモデル設計プラクティス(メモ)

  • データはRDBMSのように正規化するでも、非正規化するでもどちらでも良い
  • 上記は、トランザクションの性質次第
  • 非正規化したデータモデルを、”埋め込みデータモデル”とも呼ぶ
  • 埋め込みデータモデルの場合、複数テーブルに渡ってクエリや更新を行う必要がなく、一般的に読み取りのパフォーマンスが向上する
  • 埋め込みデータモデルを採用するシナリオは、”頻繁に更新されない”、”埋め込んだデータが際限なく増大しない”、”頻繁にはまとめてクエリされない”場合。
  • “埋め込んだデータが際限なく増大する”例として、例えば記事に対するコメントが挙げられる。コメントは大量に追加される可能性もあり、その場合データ項目のサイズが増大し、ネットワーク経由でデータを送受信する場合などにパフォーマンスの問題を引き起こす。
  • “頻繁に更新される”例として、大量のユーザが所有する株の株価情報。これを、埋め込みデータモデルで保持していると、数秒おきにユーザの数だけ同一銘柄の株価情報を更新しないといけなくなり、コストが高い。このような場合には正規化しておいた方が得策。
  • 埋め込みデータモデルを採用しないシナリオは、逆に”データが頻繁に更新される”、”参照されるデータに制限がない”場合。

なるほど、要は用途によって正規化モデルが適しているか、非正規化モデルが適しているかが決まるので、事前にトランザクションの性質に基づいて十分な検討を、ということのようです。

勉強になりました!

駆け足でしたが、今日はこれでおしまい

この記事を気に入っていただけたらシェアをお願いします!

ABOUT US

Yuu113
初めまして。Yuu113と申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。