【问题标题】:What happens to documents in documentDb that have no partition key property?documentDb 中没有分区键属性的文档会发生什么情况?
【发布时间】:2017-10-07 06:42:07
【问题描述】:

看看如何使用分区键设置 DocumentDb,如果我有一个多租户应用程序,其中大多数文档都有一个tenantId,那么使用 /tenantId/ 的分区键创建集合似乎是合理的。

没有tenantId 属性的文档会怎样?它们会在没有一个的情况下添加,还是 Cosmos DB 会使用某种系统(硬编码)tenantId 创建这些对象/文档,以便将它们存储在一起?

【问题讨论】:

    标签: azure-cosmosdb


    【解决方案1】:

    这些文档被自动分配了分区键的“未定义”值(类似于 JavaScript 的未定义)。这被视为任何其他值,并且所有缺少键的文档都存储在同一分区中。如果您有大量这些,那么您将难以扩展,因为丢失键中的所有写入都将被分配到同一个分区。

    通常最好避免这种情况,或者稍后通过删除/重新插入来解决此问题(如果缺少分区键是由于在创建时不知道分区键的某种异步性质)。

    【讨论】:

    • 我将使用上述方法,我们假设分区键只是未定义,但是当尝试删除没有与分区键相关的属性的文档时,我收到错误“PartitionKey value must为这个操作提供。”?如何删除这些?
    • 似乎需要添加和删除传入未定义分区键的文档:requestOptions = new RequestOptions { PartitionKey = new PartitionKey(Undefined.Value) };
    • 是的,完全正确。您应该使用 Undefined.Value 作为分区键
    • 如果缺少分区键,则省略分区键或使用虚拟值(例如 guid.empty)是否有区别?但我想如果缺少分区键(perf 和 RU),编写查询会更难:-)
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多