我目前正在研究如何将MongoDB用于在Azure CosmosDB基础架构之上运行的多租户多文档类型应用程序。
MSFT文档中的分区页面(即ReactJS Datepicker)详细说明了如果使用DocumentDB与Cosmos进行通信时如何实现分区策略,但是他们没有详细说明我应该如何处理使用MongoDB API时的事情。
我的想法基本上是:
单个集合
两者都会自然地映射到Cosmos的模型,以获得最便宜的体验。我的目标是400 RU作为标准尺寸,因为它是最便宜的选择。
多种类型的文档,每种文档都具有TenantID属性,该属性将映射到应用程序中具有自己(安全性,用户,性能等)问题的独立租户,以及允许轻松过滤的DocumentType属性。
使用DocumentDB API,将TenantID用作PartitionKey是很自然的。使用MongoDB API,我可以将它留给Azure吗?我应该“手动”做点什么吗?
我正在使用C#API,如果重要的话 - 我认为配置在其他任何地方都是类似的。
答案 0 :(得分:2)
Mongo和Cosmos分片机制的构建方式不同,因此如果要充分利用平台,分片密钥在系统之间应该是不同的。
从本网站获取Mongo DB http://learnmongodbthehardway.com/schema/sharding/
基数
始终考虑分片键可以表达的值的数量。一个 仅具有50个可能值的分片键被认为是低的 基数,而一个可能表达数百万的基数 值可能被视为高基数密钥。高基数 密钥优于低基数密钥,以避免不可拆分 块。
因此,在Mongo DB中,您需要具有高基数部分密钥来定位大约64MB的块(逻辑分区),
在Cosmos DB中,您将定位低基数分区键,因为逻辑分区最高可达10G