azure-cosmosdb - 当 PK 为 id 且 UK 为 id 和版本时,如何在 cosmos db 中维护不同版本的 JSON 文档
问题描述
我有一个带有两个属性的 JSON 文档deviceIdentity, version
。
我收藏的分区键是deviceIdentity
.
我的 JSON 文档带有不同的版本,我想保留该文档的所有版本。
喜欢:
deviceIdentity1, v1
deviceIdentity1, v2
应该有两份文件。
问题是因为我的 PK 是deviceIdentity
,它总是更新现有的记录,即使我已经定义了一个唯一的键约束deviceIdentity
,version
。
任何指针都会有所帮助!
解决方案
我相信你partition key
对primary key
.
分区键确定数据如何水平缩放。这不应该是唯一的,否则除了精确的文档查找之外的任何读取都需要扫描所有分区,这将是低效的。在您的情况下deviceIdentity
可能是一个合适的候选人 - 同一设备的所有版本都将落入同一分区。
主键是您的文档身份(字段id
)。正如您已经注意到的,只能有 1 个带有 given 的文档id
。id
对于要存储的每个文档,该字段必须是唯一的。在您的情况下,您可以使用组合值,例如"deviceIdentity1, v2"
身份。或者,您可以使用技术唯一 ID,例如 guid。
另请注意,通过Azure Cosmos DB 中的唯一键:
通过在创建容器时创建唯一键策略,您可以确保每个分区键的一个或多个值的唯一性。
这意味着如果您的分区键是,deviceIdentity
那么您不必复制deviceIdentity
唯一约束部分。约束/version
就足以确保每个单独的分区/设备每个版本最多有一个文档。
推荐阅读
- javascript - 将 Css 应用于 Javascript 中的当前按钮单击
- objective-c - 根据索引从数组中删除对象
- java - Spring Security REST - 单元测试失败,HttpStatusCode 401 Unauthorized
- html - 如何使用 html 打开电子邮件附件
- javascript - 范围变量更改不影响视图
- tensorflow - tf.layers.batch_normalization 中“可训练”和“训练”标志的意义
- python - 使用 spark_tree_plotting 包可视化决策树
- node.js - express-fileupload - 如何允许大文件上传
- google-chrome - 在 chrome 插件中持久化数据
- node.js - 通过获取 API nodejs 的库回调结果