DocumentDBのデータ管理のしかた
DocumentDBでは、階層型リソースモデルという、データ管理モデルでデータベースを管理します。利用する際はあまり意識することはないかもしれませんが、似た用語で構成されているので整理していきます。
階層型という名の通り、各要素はツリー状に表現できます。
AzureサブスクリプションはAzureサービスを利用する上で必要となる契約の概念で、DocumentDB以外のサービスにおいても必要となるものです。Azureサブスクリプションにひも付けて作成するデータベースアカウント以降がDocumentDB独自の要素となり、これらは全てリソースとして扱うように設計されています。
| リソース名 | 説明 | 親リソース内での作成可能数 |
|---|---|---|
| データベースアカウント | 作成には、Azureのサブスクリプションが必要。サブスクリプション内に複数のデータベースアカウントを作成することができる。リージョンと一貫性レベルはここで決定する。 | 複数作成可能 |
| データベース | コレクションのコンテナ。コレクションやドキュメントを利用するユーザーやアクセス権限のコンテナでもある。 | 複数作成可能 |
| コレクション | ドキュメントとJavaScriptアプリケーションロジックのコンテナ。スループット、ストレージ容量はコレクション単位で設定していく。(つまり、課金額に関係するところ) | 複数作成可能 |
| ドキュメント | JSONデータ。デフォルトでは全てのプロパティに自動的にインデックスが作成される。添付ファイルと呼ばれる形式で、バイナリデータ(BLOB)やメディアのメタデータも保存可能。 | コレクションに割り当てられたストレージの上限まで作成可能 |
| JavaScriptアプリケーションロジック | ストアドプロシージャ、トリガー、ユーザー定義関数(UDF)としてJavaScriptで記述でき、コレクション内で動作するスクリプト。 | 複数作成可能 |
課金の考え方
DocumentDBでは、コレクション単位で課金が発生します。
そのため、DocumentDBではコレクション単位で課金額の算出ベースとなるストレージサイズとスループットの設定を行っていきます。
ストレージサイズ
ストレージサイズは、コレクションの作成時に固定と無制限のどちらかを選択できます。
固定を選択した場合は、最大10GBまでデータを保存することができます。無制限の場合は、保存できるデータ容量に制限はありませんが、10TBを超えるデータを保存する際はAzureのサポートに連絡してストレージを確保する必要があります。
スループットとRequest Units(RU)
DocumentDBでは、スループットを表す指標としてRequest Units(RU)と呼ばれる単位を用います。RUとは、ユーザーからDocumentDBのコレクションに対する要求にかかったコストのことです。
「コレクションに対する要求」とは、ドキュメント(JSON)の検索や作成、更新、削除といったCRUD操作、あるいはHTTPリクエストだとイメージすると分かりやすいかと思います。
コストとは、以下の要因を足し合わせたものを指します。
- 要求したドキュメントのレスポンス時のサイズ
- 要求に利用したクエリの複雑さ
- 要求にかかったCPU・メモリ・IOPS等のコンピュータリソース
コレクションでは、1秒あたりのRUの値(RU/s)を設定していきます。この値で課金額が決定します。例えば、スループットに1000RU/sと設定した場合、1秒間に1000RU分の要求までは処理が可能であることを意味します。
アクセス増加などでDocumentDB(のコレクション)への要求も増加し、1000RU/s以上の要求が発生した場合は、DocumentDBがHTTPエラー(ステータスコード:429)を返却し、アクセスが安定した後に再送するように促します。
なお、SDKを利用している場合はSDKの内部で、再送処理を規定回数自動的に行ってくれます。(それでも処理できなかった場合は例外が発生します)
RUの見積もりが可能な「要求ユニット計算ツール」
RU/sを設定する際のサポートツールとして、要求ユニット計算ツールが提供されています。
このツールでは、画面左側でサンプルとなるドキュメント(JSONファイル)1件のアップロードと、想定されるドキュメントの総数、1秒あたりのドキュメント作成・読み取り・更新・削除の数を入力し[Calculate]ボタンをクリックすることで、画面右側にRU/sとストレージサイズの推定値が表示されます。
あらかじめドキュメントの形式やCRUDの発生頻度が分かっている場合に、この要求ユニット計算ツールを使うことでRU/sの過不足を抑えた見積もりを行うことができます。
