我很困惑为PartitionKey选择什么以及它有什么影响。如果我使用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"}]
}
答案 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,并将对应于大约一半密钥的值分配给每个分区。此拆分操作对您的应用程序不可见。