如何针对特定场景设计 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
我正在使用 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