Azure cosmosdb CosmosDB:用于在文档中存储关系和批量更新/删除性能的模式

Azure cosmosdb CosmosDB:用于在文档中存储关系和批量更新/删除性能的模式,azure-cosmosdb,Azure Cosmosdb,我正在寻找一种模式来为存储在CosmosDB中的结构化JSON文档构建安全性。文档可以由一组用户组或单个用户访问,每个用户组或用户对每个文档具有特定的角色。角色映射到CRUD权限。在查询文档时,我需要按权限过滤文档,我正在考虑在文档中使用数组来存储权限信息 我关注的问题如下: 删除权限时的性能。更新数以万计的文档会产生什么影响 跨多个文档删除权限时不支持事务处理。除了自己构建事务,还有哪些模式可以避免丢失删除权限 删除权限时的性能。它的影响是什么 更新数以万计的文档 根据您的描述,您需要经常

我正在寻找一种模式来为存储在CosmosDB中的结构化JSON文档构建安全性。文档可以由一组用户组或单个用户访问,每个用户组或用户对每个文档具有特定的角色。角色映射到CRUD权限。在查询文档时,我需要按权限过滤文档,我正在考虑在文档中使用数组来存储权限信息

我关注的问题如下:

  • 删除权限时的性能。更新数以万计的文档会产生什么影响
  • 跨多个文档删除权限时不支持事务处理。除了自己构建事务,还有哪些模式可以避免丢失删除权限
删除权限时的性能。它的影响是什么 更新数以万计的文档

根据您的描述,您需要经常更改文档的权限。但是,据我所知,cosmos db sql api目前不支持部分更新。(请参阅我之前的案例:迄今为止的更新),因此,您需要在每次操作中操作整个文档。这对您来说是一项昂贵的工作

据我所知,我建议您使用关系数据库。将权限存储在特定的表中,并将其用作文档的外键。也许这更适合您

删除权限时的性能。它的影响是什么 更新数以万计的文档

根据您的描述,您需要经常更改文档的权限。但是,据我所知,cosmos db sql api目前不支持部分更新。(请参阅我之前的案例:迄今为止的更新),因此,您需要在每次操作中操作整个文档。这对您来说是一项昂贵的工作


据我所知,我建议您使用关系数据库。将权限存储在特定表中,并将其用作文档的外键。也许这更适合您。

我来自CosmosDB工程团队。没有足够的细节来给出准确的答案,但请随时跟进

  • 删除权限时的性能。更新数以万计的文档会产生什么影响
  • 替换比创建更重,尽管这可能尚未反映在今天的RUs中

  • 在分区键的边界内支持事务。有关使用存储过程实现事务的更多详细信息,请参见此处

  • 有哪些模式可以避免丢失删除权限

  • 根据同一文档是否存在预期的并发权限更新,权限的重新应用是幂等的。假设没有并发性,并且x和x'是当前和新的权限集,则在发布更新失败的情况下,对所有文档重新应用(重新替换)x'不会产生影响


    我也有关于管理每个文档的权限集的建议,而不是在多个文档上复制相同的权限集,您是否考虑将权限集分组为权限“组”,向实际权限添加另一个间接层?您可以为每个“权限组”维护单独的文档,这些“权限组”包含作为权限一部分的实际用户组和/或用户集。希望这样可以减少对主要文档本身的更新,并且在许多情况下,您可以只更新带有权限组详细信息的文档。

    我来自CosmosDB工程团队。没有足够的细节来给出准确的答案,但请随时跟进

  • 删除权限时的性能。更新数以万计的文档会产生什么影响
  • 替换比创建更重,尽管这可能尚未反映在今天的RUs中

  • 在分区键的边界内支持事务。有关使用存储过程实现事务的更多详细信息,请参见此处

  • 有哪些模式可以避免丢失删除权限

  • 根据同一文档是否存在预期的并发权限更新,权限的重新应用是幂等的。假设没有并发性,并且x和x'是当前和新的权限集,则在发布更新失败的情况下,对所有文档重新应用(重新替换)x'不会产生影响


    我也有关于管理每个文档的权限集的建议,而不是在多个文档上复制相同的权限集,您是否考虑将权限集分组为权限“组”,向实际权限添加另一个间接层?您可以为每个“权限组”维护单独的文档,这些“权限组”包含作为权限一部分的实际用户组和/或用户集。希望这能减少您对主文档本身的更新,并且在许多情况下,您可以只更新带有权限组详细信息的文档。

    注意:存储过程文档表示它正在实现事务。我没有看到任何类似TransactionScope的定义。这是暗示吗?如果有多个文档,我是否需要遵循这种递归模式?唯一的事务操作是存储过程的操作,它仅限于集合中的单个分区。也就是说:不幸的是,您的问题太宽泛了,要求采用每个文档的权限模式。至于性能:如果您要修改数千个文档,则需要进行基准测试。注意:存储过程文档表示它正在实现事务。我没有看到任何类似TransactionScope的定义。这是暗示吗?如果有多个文档,我是否需要遵循这种递归模式?唯一的事务操作是