Azure cosmosdb 如何使具有2个分区键的文档保持同步/引用完整性?
我有一个cosmos db,它具有高基数的合成分区键和类型属性。 我需要一个用户可以在他们之间共享文档的设置 例如,这是一个文档:Azure cosmosdb 如何使具有2个分区键的文档保持同步/引用完整性?,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我有一个cosmos db,它具有高基数的合成分区键和类型属性。 我需要一个用户可以在他们之间共享文档的设置 例如,这是一个文档: { “id”:”guid”, “title”:”Example document to share”, “ownerUserId”:”user1Guid”, “type”: “usersDocument”, “partitionKey”:”user_user1Guid_documents” } 现在,用户希望与其他用户共享此文档 假设: 一个文档可以与多个用户共享
{
“id”:”guid”,
“title”:”Example document to share”,
“ownerUserId”:”user1Guid”,
“type”: “usersDocument”,
“partitionKey”:”user_user1Guid_documents”
}
现在,用户希望与其他用户共享此文档
假设:
文档
文档,也不想嵌入用户
文档(因为写入很快就会变得无效/昂贵),但我更希望那些m:n
是单独的文档用户的id
文档是与共享的
2<代码>列表ALLUSERS将此文档与共享
在这个查询中,在查询时,我知道与不同的用户共享的文档的id
所有这些让我觉得我应该有两个单独的文档类型和单独的分区
要列出与我共享的所有文档,请执行以下操作:
{
“id”:”documentGuid”,
“type”:”sharedWithMe”,
“partitionKey”:”sharedWithMe_myUserGuid”
}
(这也可以是包含共享文档集合的单个文档。这里重要的是partitionKey)
现在我可以很容易地从c中执行SQL,比如SELECT*,其中c.type=“sharedWithMe”
并对包含我的用户guid的分区键运行查询
对于列出与我共享某个文档的所有用户,其类似:
{
“id”:”userISharedWithGuid”,
“type”:”documentSharings”,
“partitionKey”:”documentShare_documentGuid”
}
现在,我可以轻松地执行SQL操作,如从c中选择*,其中c.type=“documentSharings”
并对包含我的文档guid的分区键运行查询
问题:
当用户与某个用户共享一个文档时,应该使用不同的分区键创建这两个文档(因此,没有sp/事务)
如何保持这种“原子式”或避免创建/更新异常
或者有更好的方法来建模吗?我认为您的方法是有意义的,我会根据查询的范围以多种方式执行类似于分区的操作。我想您主要关心的是,是否在保存第一组和最后一组相关文档之间发生故障?不幸的是,在文档保存时管理文档链的唯一方法是在应用程序代码中。i、 e.我们确保以最容易回滚的顺序保存,然后在异常处理程序中实现回滚方法,这通过将保存的文档集合保存在内存中来实现。
正如您所说,在跨分区时,没有现成的事务处理