带有多个分区键的Cosmos DB

时间:2017-11-16 14:15:03

标签: azure azure-cosmosdb

我们正在考虑使用单个Cosmos数据库集合多租户环境中使用多个文档类型 租户ID作为分区键。租户ID的 路径可能会在每种文档类型中发生变化 ,因此我正在考虑各种将分区键暴露给Cosmos DB以启用正确的分区/查询。

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

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

要明确的是,在创建DocumentCollection时,我在PartitionKey.Paths集合中指定多个分区键时,正在查找有关Cosmos DB行为的其他文档的链接和/或直接体验。< / p>

此问题也已发布在Azure Community Support forums

谢谢,伊恩

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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