documentDB的分区键或没有分区键

时间:2017-08-01 13:42:06

标签: azure-cosmosdb

在DocumentDb中,我应该如何对此进行分区?我应该使用partitionkey吗?我不认为自收集以来我可以做“/地址/州”......或者我可以吗? 我应该使用“/ Id”还是“/ name”?因为id是由documentDB生成的Guid并且名称几乎总是唯一的,所以当它们大多是唯一的时候甚至是个好主意。那么我应该使用哪一个?我想我可以通过名字查询,但我认为partitionkey应该是可以分组的文件,例如州,城市或者parentId。

我根本不应该使用partitionKey吗?这适用于documentDb中的AspNetuser模式用户表。我应该为partitionKey使用哪个属性?

public class Business
{
    [JsonProperty(PropertyName = "id")]
    public string Id { get; set; }

    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; } 

    [JsonProperty(PropertyName = "description")]
    public string Description{ get; set; } 

    [JsonProperty(PropertyName = "addresses")]
    public List<Address> Addresses{ get; set; } 

   //more columns...
}


public class Address
{  
    [JsonProperty(PropertyName = "street")]
    public string Street{ get; set; } 

    [JsonProperty(PropertyName = "city")]
    public string City{ get; set; }  

    [JsonProperty(PropertyName = "state")]
    public string State{ get; set; }  
}

1 个答案:

答案 0 :(得分:1)

  

我应该使用partitionkey吗?

为了决定是否应对您的收藏进行分区,以下是需要考虑的一些要点:

单分区集合 :具有更低的价格选项以及跨所有集合数据执行查询和执行事务的能力。它们具有单个分区(10GB和10,000 RU / s)的可扩展性和存储限制。您不必为这些集合指定分区键。对于不需要大量存储或吞吐量的方案,单个分区集合非常适合。

分区集合 :可以跨多个分区并支持非常大量的存​​储和吞吐量。您必须为这些集合指定分区键。

  

我认为自收集以来我不能做“/地址/州”......或者我可以吗?

partition key可以是文档中的属性或路径。

  

我应该使用“/ Id”还是“/ name”?因为id是由documentDB生成的Guid并且名称几乎总是唯一的,所以当它们大多是唯一的时候甚至是个好主意。那么我应该使用哪一个?

理想的分区键是在查询中经常显示为过滤器的键,并且具有足够的基数以确保您的解决方案具有可伸缩性。在“Designing for partitioning”部分中,您可以找到选择分区键和一些真实场景的两个关键注意事项,有关详细信息,请查看链接。