当前位置: 首页 > 知识库问答 >
问题:

Azure CosmosDb分区密钥-不同的模式

狄英哲
2023-03-14

我有一个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。那么,人员id为“p1241234”的人员集合中的文档和人员id为“p1241234”的人员-部门集合中的文档将存储在同一个逻辑分区中?部门员工中的数据将如何存储?

共有1个答案

马高谊
2023-03-14

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

您可以在这里获得关于如何建模本文的更多细节

 类似资料:
  • 我试图用不同的密钥将消息存储到不同的分区。 例如: 但是当我尝试运行我的Producer类时,它总是存储在单个分区中。 根据文档,使用查找分区。我还看到这个问题Kafka分区键工作不正常‏, 但我在Kafka Client库的0.9.x版本中找不到<code>ByteArrayPartitioner</code>类。 更新:我正在使用代码动态创建主题。 如果我手动创建一个带有分区的主题,那么它可以

  • 我正在尝试将以下结构存储在卡桑德拉中。 上面的大多数查询是 这就是为什么将()设置为主键很有用的原因。 根据docu,Cassandra的默认分区键是主键的第一列-在我的例子中是,但我想在Cassandr集群上均匀分布数据,我不能允许一个中的所有数据只存储在一个分区中,因为有些商店有10M条记录,有些只有1k条记录。 我可以设置()作为分区键,然后我可以达到Cassandra集群中记录的统一分布。

  • null 关于如何管理分区密钥的依赖关系,您有什么建议吗?或者我没有根据cosmosdb最佳实践以最佳方式对数据层建模?

  • 我正在学习Cassandra,并有一个关于分区/集群键的问题。 我有一个表,存储数据的股份,如行业的分支,最近6/12个月的业绩,名称等。 该表如下所示: 多谢了,伙计们