azure-cosmosdb - null 元素应该存储在 Cosmos DB 中还是应该被忽略?

标签 azure-cosmosdb

是否有充分理由序列化 Cosmos DB 文档中的 null 元素,或者最好忽略它们?

使用 is_defined 函数,我可以查询未定义的元素,类似于查询空元素的方式。

是否消耗更少的 RU?在我的测试中,它们的表现似乎相似。

最佳答案

如果您的查询确实依赖于基于可选属性的存在或值的过滤,则应执行以下操作:检查是否存在(或不存在),或检查可选属性是否为特定值您正在寻找。

存储 null 属性是 Cosmos DB 等文档数据库的反模式。这不是必需的,如果您决定这样做,则每次添加新属性时都必须向现有文档添加新的空属性(可能成本高昂,因为您必须执行 ReplaceDocument() 在每个现有文档上,每次添加可以为 null 的新属性时)。当您决定删除可选属性并清除所有无关的空值时,情况也是如此。

Cosmos DB 并不要求每个文档都相同,如果以与关系存储相同的方式处理数据(您确实必须处理表列中包含空值)。想象一下一个购物网站,其中有数千种产品类型,每种产品都有不同的属性(书籍、CD、割草机、咖啡......)。您最终会在每个文档中获得数千个空属性(这似乎是一个非常难以管理的场景,更不用说您最终可能会超过每个文档的大小限制)。

此外,每次写入都会产生额外的 RU,因为每个文档的每个索引都需要更新。

关于azure-cosmosdb - null 元素应该存储在 Cosmos DB 中还是应该被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54838532/

相关文章:

c# - Azure Functions DocumentClient 无法从程序集异常加载类型

javascript - 无法从 Azure 触发功能更新 cosmosDB 集合

azure-functions - Cosmos DB 触发器 - 共享吞吐量集合应该有一个分区键

c# - cosmos db 中的异步查询

azure-cosmosdb - Azure CosmosDB IS_DEFINED 与 NOT IS_DEFINED

azure-cosmosdb - 从 Cosmos Document DB 中的存储过程调用存储过程?

azure - 固定大小的存储桶 - 嵌套 JSON 数组

azure - 如何在azure-cosmosdb(文档数据库)中保持文档创建幂等?

azure - 有没有办法查看 Azure CosmosDB 中当前的索引状态

mongodb - 在使用 CLI 创建的 MongoDB 分片集合中插入文档时出错