首页 文章

带有多个分区键的Cosmos DB

提问于
浏览
3

我们正在考虑使用 single Cosmos DB collection 来使用 tenant ID as the partition keymulti-tenanted environment 中保存 multiple document types . path to tenant id may change in each document type 和我正在考虑各种方法是将分区键暴露给Cosmos DB以启用正确的分区/查询 .

我注意到DocumentCollection.PartitionKey的Paths属性是一个集合,因此想知道在创建文档集合期间是否可以传递多个路径以及这可能是什么行为 . 理想情况下,我希望Cosmos扫描每个路径,并使用值的第一个值或聚合作为分区键,但找不到任何证明这确实是行为的文档 .

MSDN documentation for this property是没用的,associated documentation似乎都没有回答这个问题 . 有没有人知道或以前在集合中使用多个分区键路径?

为了清楚起见,我正在寻找在创建DocumentCollection时在PartitionKey.Paths集合中指定多个分区键时有关Cosmos DB行为的其他文档的链接和/或直接体验 .

这个问题也发布在Azure Community Support forums中 .

谢谢,伊恩

2 回答

  • 3

    执行此操作的最佳方法是分配通用分区键,如“pk”,然后根据每个对象类型分配此值 . 例如,您可以在序列化期间通过为要序列化为“pk”的每个类的不同属性来管理它 .

    分区键是DocumentCollection.PartitionKey中的数组的原因是允许我们引入复合分区键,其中多个属性的组合(如“firstName”,“lastName”)构成分区键 . 这与您的需求略有不同 .

  • 0

    除此之外,我最终根据Aravind的建议向文档容器添加了分区键属性,然后使用David Fowler's excellent QueryInteceptor nuget package来应用ExpressionVisitor,它将与特定文档类型的租户id属性相关的任何等价表达式转换为等价表达式在分区键属性上 . 这确保了仅针对单个正确的分区执行查询 . 此外,我能够使用ExpressionVisitor作为安全功能,因为它能够强制所有查询提供对租户ID的过滤(显然,租户永远不能看到彼此的文档),如果没有指定然后不返回任何记录(将无效的等价表达式添加到分区键属性) .

    这已经过测试,似乎运作良好 .

相关问题