如何针对特定场景设计 Azure Cosmos DB 结构来限制创建的 collections 个数?

How to design a Azure Cosmos DB structure for a specific scenario to limit the number of collections created?

我正在使用 Azure Cosmos DB MongoDB API。

我有一个场景,其中我有多个包含模块的位置。这些模块将包含数据。将有 Location-Module 映射,这将是唯一的。为了更清楚地说明,我将使用下面的 table 结构来描述它,

位置 -> 模块 -> 数据

目前我使用的结构是这样的,

我们有一个 ModuleDataDB,其中有 collections(通过动态生成的 Location 和 Module 的组合使名称唯一),

ModuleDataDB -> Location1-Module1 (collection)
             -> Location1-Module2 (collection)
             -> Location1-Module3 (collection)
             -> Location2-Module1 (collection)
             -> Location2-Module2 (collection)
             -> Location2-Module3 (collection)
             .
             .

现在这里的问题是之前我们为该数据库下的所有 collection 使用共享 RU(以降低成本),但现在 Azure 已将每个数据库限制为 25 collection,如果我们正在使用共享 RU。

我正在考虑将此结构移动到更传统的方法,即将所有模块从一个位置放在一个 collection 中,也就是说,

ModuleDataDB     -> Location1 (collection)                 
                 -> Location2 (collection)
                 -> Location3 (collection)
                 .
                 .

我需要有关如何使其具有成本效益以及限制我制作的 collection 数量的建议。有没有更好的方法呢?切换到其中包含 MongoDB 而不是 Azure Cosmos 的 VM 是否有意义?

EDIT1(解决方案):正如下面@Cedric 所建议的,我现在对所有位置模块映射使用单个 collection 并使用具有多个唯一值的合成分区键,例如 "Location-1_Module-1"

所以它会有如下结构,

ModuleDataDB     -> Client-1(collection) --> (Data) {
                                           LocationID : ""
                                           ModuleID : ""
                                           PartitionKey : <LocationID + ModuleID>
                                             .
                                             .
                                              }                                         

使用单个集合可能是一种很好的方法。为确保集合增长时的性能,您需要设置正确的分区键。

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