【问题标题】:Azure CosmosDb partition key - different schemaAzure CosmosDb 分区键 - 不同的架构
【发布时间】:2020-07-06 16:01:50
【问题描述】:

我有一个 Azure CosmosDB SQP API 帐户,其中包含一个容器“EmployeeContainer”,分区键为“personId”。我在这个容器中有三种不同类型的集合。它们的架构如下图所示:

人物集合:

{
    "Id": "1234569",
    "personId" : "P1241234",
    "FirstName": "The first name",
    "LarstName": "The last name"
}

个人-部门集合:

{
    "Id": "923456757",
    "personId" : "P1241234",
    "departmentId": "dept01",
    "unitId": "unit01",
    "dateOfJoining": "joining date"
}

部门员工

{
    "id": "678678",
    "departmentId" : "dept01",
    "departmentName": "IT",
    "employees" : [
        { "personId": "P1241234" },
        { "personId": "P1241235" },
        { "personId": "P1241236" },
    ]   
}

数据将如何存储在逻辑分区中? PersonId 是分区键,所有集合中都有 personId。因此,person 集合中人员 ID 为“P1241234”的文档和 Person-Department 集合中人员 ID 为“P1241234”会存储在同一个逻辑分区吗? Department-Employees 中的数据将如何存储?

【问题讨论】:

    标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    这种设计不是最优的。您应该使用 personId 作为分区键将 Person 和 Person-Department 组合到一个集合中,然后为具有 departmentId 作为分区键的部门提供第二个容器,每个人作为另一行以及查询时需要的任何其他属性收藏。不要编写查询两个容器的代码。每个人都应该拥有满足您提出的任何请求所需的所有数据。然后使用更改提要使它们保持同步。

    你可以得到更多关于如何建模这篇文章here

    【讨论】:

      【解决方案2】:

      是的,确实如此,具有相同personId 的文档将存储在相同的逻辑分区下(无论它们的类型\模式如何)。我不确定您是否可以在具有分区键的集合上创建没有分区键的文档,但如果可以的话 - 所有这些都应该在同一个逻辑分区下(但我认为您不能创建它们)。

      【讨论】:

        猜你喜欢
        • 2022-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-26
        相关资源
        最近更新 更多