cosmosdb是否更新删除记录,即使只有单个字段更改

does cosmosdb update delete record even only single field change

我想了解 cosmosdb udpate 的工作原理?在 cosmosdb 中,有一个 upsert 操作来根据项目是否存在于容器中来更新或插入。通常流程是这样的:

record = client.read_item(id, partition_key)
record['one_field'] = 'new_value'    
client.upsert(record)

我的疑惑是这样的更新操作是否会删除原来的记录,即使只改变了一个字段?如果是这种情况,那么 update 变得昂贵,因为记录很大。我的理解对吗?

Cosmos DB 通过替换文档来更新文档,而不是通过 in-place 更新。

如果您查询(或阅读)一个文档,然后更新一些属性,您将替换该文档。或者,正如您所做的那样,调用 upsert()(类似于替换,只是如果指定的分区+id 不存在,它将创建一个新文档)。

“昂贵”的概念并不容易量化;查看返回的 headers 以查看给定 upsert/replace 的 RU 费用,以确定总体成本,以及是否需要根据总体使用模式调整 RU/sec 设置。