web-dev-qa-db-ja.com

Azure Cosmos DBパーティションキー-主キーは受け入れられますか?

Azure Cosmos DBコレクションは、パーティションキーを必要とするほど大きくなっています。これについていくつか読んでいると、最良のパーティションキーは、均等な分散とより高いカーディナリティを提供するものであるという印象を受けます。 この記事 Microsoftが説明しています。

主キーをパーティションキーとして使用すると、均等に分散できますが、カーディナリティは1のみです。これが唯一のオプションである場合、これは悪いことですか。前述の記事はいくつかの examples を示しており、それらのインスタンスでは主キーをパーティションキーとして使用する必要があることを示しているようです。 Azure Cosmos DBの場合、パーティションは物理的ではなく論理的です。そのため、各ドキュメントが独自のディスクに存在することにはなりませんが、インデックスが肥大化する可能性があるようです。

主キーをパーティションキーとして使用するのは一般的な方法ですか?それの欠点はありますか?

13
Scotty H

いいえ、それに欠点はありません。カーディナリティの高いパーティションキーを使用するようにしてください。インデックスや物理パーティションなどについて心配する必要はありません。

数百万のパーティションキーと10の物理パーティションを持つことができます。物理パーティションは、CosmosDBによって背後で作成されます。物理パーティションについて心配する必要はありません。

2
Rafat Sarosh

実際、パーティションキーの選択は、繰り返し検討するに値する問題です。パーティションキーとして主キーを選択することが唯一のオプションであるため、参照として考えられる否定的なことのいくつかについて説明します。

パフォーマンスの面では、クエリのフィールドがパーティションキーではない場合、パーティションをまたぐことで、クエリのクエリパフォーマンスが確実に低下します。

コストの面では、cosmos dbは主にストレージスペースとRUの消費によって課金されます。先に述べたように、パーティションキーとしてプライマリキーを選択すると、より多くのインデックスストレージが導かれます。ほとんどのクエリがクロスパーティションである場合は、RUの消費量も増加します。

ストアドプロシージャ、トリガー、またはUDFの使用に関しては、ストアドプロシージャとトリガーを介してパーティション間トランザクションを使用することはできません。パーティション分割されているため、使用時にパーティションキー(カーディナリティは1のみ)を指定する必要があります。

パーティションキーが作成された場合、後で削除したり変更したりできないことに注意してください。したがって、選択する前にそれを考慮し、データのバックアップを確実に行ってください。

詳細は 公式ドキュメント を参照してください。

お役に立てば幸いです。

1
Jay Gong

主キーが最も安全で、おそらくパーティションキーとして最も適切な選択であると言えます。

これは、一意のキー以外の値の一意性を保証する唯一の方法です。分散は均等になり、主キーはパーティションキーになるため、クエリを実行する代わりに、それを使用してドキュメントを読み取ることができ、操作の速度とコストを削減できます。

0
Nick Chapsas