Azure Cosmos DB でのパーティション分割Partitioning in Azure Cosmos DB

Azure Cosmos DB では、パーティション分割を使用して、データベースの個別のコンテナーをスケーリングし、アプリケーションのパフォーマンスのニーズを満たします。Azure Cosmos DB uses partitioning to scale individual containers in a database to meet the performance needs of your application. パーティション分割では、コンテナー内の項目が、"論理パーティション" と呼ばれる特定のサブセットに分割されます。In partitioning, the items in a container are divided into distinct subsets called logical partitions. 論理パーティションは、コンテナー内の各項目に関連付けられている "パーティション キー" の値に基づいて形成されます。Logical partitions are formed based on the value of a partition key that is associated with each item in a container. 1 つの論理パーティション内のすべての項目のパーティション キーの値は同じです。All items in a logical partition have the same partition key value.

たとえば、あるコンテナーに項目が保持されているとします。For example, a container holds items. 各項目の UserID プロパティには一意の値があります。Each item has a unique value for the UserID property. UserID がそのコンテナー内の項目のパーティション キーであり、1,000 個の一意の UserID 値がある場合、1,000 個の論理パーティションがそのコンテナー内に作成されます。If UserID serves as the partition key for the items in the container and there are 1,000 unique UserID values, 1,000 logical partitions are created for the container.

項目の論理パーティションを決めるパーティション キーに加えて、コンテナー内の各項目には "項目 ID" (論理パーティション内で一意) があります。In addition to a partition key that determines the item’s logical partition, each item in a container has an item ID (unique within a logical partition). パーティション キーと項目 ID を組み合わせて、項目の "インデックス" が作成されます。インデックスによって、項目が一意に識別されます。Combining the partition key and the item ID creates the item's index, which uniquely identifies the item.

パーティション キーを選択することは、アプリケーションのパフォーマンスに影響する重要な決定事項です。Choosing a partition key is an important decision that will affect your application’s performance.

論理パーティションの管理Managing logical partitions

Azure Cosmos DB では、論理パーティションの物理パーティションへの配置が透過的かつ自動的に管理され、コンテナーのスケーラビリティとパフォーマンスのニーズが効率的に満たされます。Azure Cosmos DB transparently and automatically manages the placement of logical partitions on physical partitions to efficiently satisfy the scalability and performance needs of the container. アプリケーションのスループットとストレージの要件が上がると、Azure Cosmos DB は論理パーティションを移動し、より多くのサーバーに負荷を自動的に分散します。As the throughput and storage requirements of an application increase, Azure Cosmos DB moves logical partitions to automatically spread the load across a greater number of servers.

Azure Cosmos DB は、ハッシュベースのパーティション分割を使用して、論理パーティションを物理パーティションに分散します。Azure Cosmos DB uses hash-based partitioning to spread logical partitions across physical partitions. Azure Cosmos DB では、項目のパーティション キー値をハッシュします。Azure Cosmos DB hashes the partition key value of an item. ハッシュの結果で、物理パーティションが決定します。The hashed result determines the physical partition. 次に、Azure Cosmos DB が物理パーティションに対し、パーティション キー ハッシュのキー空間を均等に割り当てます。Then, Azure Cosmos DB allocates the key space of partition key hashes evenly across the physical partitions.

1 つの論理パーティション内のデータにアクセスするクエリでは、複数のパーティションにアクセスするクエリよりもコスト効率が高くなります。Queries that access data within a single logical partition are more cost-effective than queries that access multiple partitions. ストアド プロシージャまたはトリガー内のトランザクションは、1 つの論理パーティション内の項目に対してのみ使用できます。Transactions (in stored procedures or triggers) are allowed only against items in a single logical partition.

Azure Cosmos DB でパーティションを管理する方法の詳細については、論理パーティションに関するページを参照してください。To learn more about how Azure Cosmos DB manages partitions, see Logical partitions. (アプリケーションをビルドまたは実行するために内部の詳細を理解する必要はありませんが、興味がある方のためにここに追加されています。)(It's not necessary to understand the internal details to build or run your applications, but added here for a curious reader.)

パーティション キーを使用する場合Choosing a partition key

パーティション キーを選択するための優れたガイダンスを次に示します。The following is a good guidance for choosing a partition key:

  • 1 つの論理パーティションでは、ストレージの上限は 10 GB です。A single logical partition has an upper limit of 10 GB of storage.

  • Azure Cosmos コンテナーの最小スループットは、400 要求ユニット/秒 (RU/秒) です。Azure Cosmos containers have a minimum throughput of 400 request units per second (RU/s). データベースに関するスループットがプロビジョニングされる場合、コンテナーあたりの最小 RU 数は 100 要求ユニット/秒 (RU/秒) です。When throughput is provisioned on a database, minimum RUs per container is 100 request units per second (RU/s). 同じパーティション キーへの要求は、パーティションに割り当てられているスループットを超えることはできません。Requests to the same partition key can't exceed the throughput that's allocated to a partition. 割り当て済みのスループットを要求が超えている場合、要求ではレートが制限されます。If requests exceed the allocated throughput, requests are rate-limited. そのため、アプリケーション内の "ホット スポット" にならないパーティション キーを選択することが重要です。So, it's important to pick a partition key that doesn't result in "hot spots" within your application.

  • さまざまな値とアクセス パターンがあり、それが論理パーティション間で均等に分散されるパーティション キーを選択します。Choose a partition key that has a wide range of values and access patterns that are evenly spread across logical partitions. このことで、コンテナー内のデータとアクティビティが一連の論理パーティションに分散するため、データ ストレージとスループットのリソースをその論理パーティション全体に分散できるようになります。This helps spread the data and the activity in your container across the set of logical partitions, so that resources for data storage and throughput can be distributed across the logical partitions.

  • すべてのパーティションと時間で均等にワークロードが分散されるパーティション キーを選択します。Choose a partition key that spreads the workload evenly across all partitions and evenly over time. パーティション キーの選択により、複数のパーティションに項目を分散してスケーラビリティを達成するという目標に対して、効率的なパーティションのクエリとトランザクションの必要性のバランスを取る必要があります。Your choice of partition key should balance the need for efficient partition queries and transactions against the goal of distributing items across multiple partitions to achieve scalability.

  • パーティション キーの候補には、クエリ内でフィルターとして頻繁に出現するプロパティが含まれる場合があります。Candidates for partition keys might include properties that appear frequently as a filter in your queries. フィルターの述語にパーティション キーを含めることで、クエリ呼び出しを効率的にルーティングできます。Queries can be efficiently routed by including the partition key in the filter predicate.

次の手順Next steps