分区收集paritionkey

时间:2016-04-14 14:44:16

标签: azure-cosmosdb

我很困惑为P​​artitionKey选择什么以及它有什么影响。如果我使用Partitioned Collection,那么我必须定义一个分区密钥,DocumentDB可以使用该分区密钥在多个服务器之间分配数据。但是让我们说我选择了一个对所有文档总是相同的partitionKey。对于单个分区集合,我仍然可以获得高达250k RU / s的速度吗?

在我的情况下,主查询是获取所有带分页的文档,但是在时间轴中(最新的)

SELECT TOP 10 c.id, c.someValue, u.id FROM c
JOIN u IN c.users ORDER BY c.createdDate DESC

该文档的缩小版本如下所示

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

显然,正确的做法是选择一个确保低基数的分区键,但文档会产生误导。

https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data

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