Azure cosmosdb 分区集合PARTIONKEY

Azure cosmosdb 分区集合PARTIONKEY,azure-cosmosdb,Azure Cosmosdb,我不知道为PartitionKey选择什么以及它有什么影响。如果我使用分区集合,那么我必须定义一个分区键,DocumentDB可以使用它在多个服务器之间分发数据。但假设我选择了一个partitionKey,它对所有文档都是相同的。对于单个分区的集合,我仍然能够获得高达25万RU/s的速度吗 在我的例子中,主要查询是获取所有分页文档,但在时间轴中(最新优先) 文档的缩小版本如下所示 { id: "1", someValue: "Foo" createdDat

我不知道为PartitionKey选择什么以及它有什么影响。如果我使用分区集合,那么我必须定义一个分区键,DocumentDB可以使用它在多个服务器之间分发数据。但假设我选择了一个partitionKey,它对所有文档都是相同的。对于单个分区的集合,我仍然能够获得高达25万RU/s的速度吗

在我的例子中,主要查询是获取所有分页文档,但在时间轴中(最新优先)

文档的缩小版本如下所示

    {
     id: "1", 
     someValue: "Foo"
     createdDate: "2016-14-4-14:38:00.00"
     //Max 100 users
     users: [{id: "1", id: "2"}]
    }

不,您需要有多个不同的分区键值才能在DocumentDB中实现高吞吐量级别

DocumentDB中的分区最多支持10000 RU/s,因此您需要至少25*个不同的分区键值才能达到250 RU/s。DocumentDB将分区键均匀地划分到可用分区上,即分区可能包含具有多个分区键的文档,但分区键的数据保证保留在单个分区内。您还必须以跨这些分区键分配读/写的方式来构造工作负载

*实际上,您可能需要比25(50-100)稍多的分区键,因为某些分区键可能散列到同一分区

因此,我们有一个吞吐量为10000 RU/s的分区(10个分区)集合。分区键是CountryCode,我们只有5个国家的数据。两个国家的数据被散列到相同的物理分区中。根据在以下链接中找到的文档,我们希望在所述分区达到10GB限制后,数据将重新组织到空分区。但这并没有发生,我们无法再为这两个国家添加数据

显然,正确的做法是选择一个确保低基数的分区键,但文档中有误导性

当物理分区p达到其存储限制时,Cosmos DB将p无缝地拆分为两个新分区p1和p2,并将大约一半的密钥对应的值分配给每个分区。此拆分操作对应用程序不可见

    {
     id: "1", 
     someValue: "Foo"
     createdDate: "2016-14-4-14:38:00.00"
     //Max 100 users
     users: [{id: "1", id: "2"}]
    }