如何在CosmosDB实例中使用mongodb的分片

时间:2017-07-21 15:10:34

标签: c# azure azure-cosmosdb sharding

我目前正在研究如何将MongoDB用于在Azure CosmosDB基础架构之上运行的多租户多文档类型应用程序。

MSFT文档中的分区页面(即ReactJS Datepicker)详细说明了如果使用DocumentDB与Cosmos进行通信时如何实现分区策略,但是他们没有详细说明我应该如何处理使用MongoDB API时的事情。

我的想法基本上是:

  • 单个数据库
  • 单个集合

    两者都会自然地映射到Cosmos的模型,以获得最便宜的体验。我的目标是400 RU作为标准尺寸,因为它是最便宜的选择。

  • 多种类型的文档,每种文档都具有TenantID属性,该属性将映射到应用程序中具有自己(安全性,用户,性能等)问题的独立租户,以及允许轻松过滤的DocumentType属性。

使用DocumentDB API,将TenantID用作PartitionKey是很自然的。使用MongoDB API,我可以将它留给Azure吗?我应该“手动”做点什么吗?

我正在使用C#API,如果重要的话 - 我认为配置在其他任何地方都是类似的。

1 个答案:

答案 0 :(得分:2)

Mongo和Cosmos分片机制的构建方式不同,因此如果要充分利用平台,分片密钥在系统之间应该是不同的。

从本网站获取Mongo DB http://learnmongodbthehardway.com/schema/sharding/

  

基数

     

始终考虑分片键可以表达的值的数量。一个   仅具有50个可能值的分片键被认为是低的   基数,而一个可能表达数百万的基数   值可能被视为高基数密钥。高基数   密钥优于低基数密钥,以避免不可拆分   块。

因此,在Mongo DB中,您需要具有高基数部分密钥来定位大约64MB的块(逻辑分区),

在Cosmos DB中,您将定位低基数分区键,因为逻辑分区最高可达10G