【问题标题】:Partition Key Vs Document Id in CosmosDBCosmosDB 中的分区键与文档 ID
【发布时间】:2019-06-19 09:32:52
【问题描述】:

如果我存储文档时不提供分区键,这种情况下 documentId 将被视为逻辑分区的分区键?

如果是:该集合中的十亿逻辑分区怎么样?我有查询只能按 documentId 查找。

现在在文档 JSON 中:
我有多个字段,并且我提供了 /asset 作为 partitionKey。现在这是一个复合分区键:/asset/documentId? 或 /asset 将 tel 分区以从其中搜索 documentId?

【问题讨论】:

    标签: azure azure-cosmosdb partitioning azure-cosmosdb-mongoapi cosmos


    【解决方案1】:

    如果我在不提供分区键的情况下存储文档,在这种情况下 documentId 将被视为逻辑分区的分区键?

    没有。如果创建一个没有Partition Key 的文档,文档id 将不会被视为分区键。 Cosmos DB 引擎会将所有没有分区键值的文档放在隐藏的逻辑分区中。可以通过将分区键指定为{} 来访问此特定分区。

    【讨论】:

    • 我从来没有真正尝试过这个,所以如果一个集合有 pk 集,你可以创建一个没有 pk 的文档吗?刚试过。确实如此。奇怪的。我可能会在平台级别阻止该操作
    • 是的,你可以。我也对这种行为感到惊讶。但如果文档不包含分区键,则 REST API 或 SDK 不会抛出任何错误。我向 Cosmos DB 团队询问了这个问题,他们告诉我如何检索这些文档。我只需要通过我的电子邮件。让我这样做并更新我的答案。
    • 你说得对,我是用SDK来检索没有分区键的文档。
    • Without PK data in a logical partition is searchable by id, is that means my query is scanning all logical partitions to find an id?? - 是的。这是一个跨分区查询。
    • 这意味着,如果我们想要 id 作为 PK,那么我们应该在创建集合时提及。这将避免在按 id 搜索时进行跨分区查询。
    【解决方案2】:

    您在创建集合时定义分区键(根据屏幕截图asset 在您的情况下是分区键)。如果您在创建集合时没有提供分区键 - 它将被限制为 10 GB 的数据(因为没有分区键将无法对其进行分片)。

    只有分区键用于确定文档的分区。在决定该文档属于哪个分区时,其他字段无关紧要。

    【讨论】:

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