说我有:
以下是我的问题:
答案 0 :(得分:0)
您所描述的是一种明智的解决方案,可以避免数据偏差和跨分区的负载平衡。由于特定租户的查询需要触及所有分区,请记住将FeedOptions.EnableCrossPartitionQuery设置为true(REST API中的x-ms-documentdb-query-enablecrosspartition)。
DocumentDB网站上也有一篇关于分区集合的优秀文章和一般选择分区键的技巧。 https://azure.microsoft.com/en-us/documentation/articles/documentdb-partition-data/
答案 1 :(得分:0)
我会避免跨分区的查询,它们需要相当高的成本(基本上是索引和解析成本与分区数量相乘 - 默认为25)。尝试相当容易。
我更喜欢一种可以在特定分区上查询的解决方案,通常按租户ID进行分区。
请记住,对于分区集合,每个分区都有stil限制(10K RU和10GB) - 我在这里写了http://blog.ulriksen.net/notes-on-documentdb-partitioning/
答案 2 :(得分:0)
这取决于您的使用模式以及租户大小的变化。
通常对于多租户系统,99%的操作都在一个租户中。如果您将tenantID作为分区键,那么这些操作将只触及单个分区。这不会使单个操作更快(延迟),但在多个租户负载下可以提供巨大的吞吐量增益。但是,如果您只有5个租户,其中1个比其他租户大10倍,那么使用tenantID作为密钥会导致系统非常不平衡。
我们使用tenantID作为系统的分区键,它似乎运行良好。我们已经谈到了如果它变得非常不平衡我们会怎么做,一个想法就是让分区键成为tenantID +来拆分大租户。虽然我们还没有做到这一点,但我们还没有弄清楚所有这些细节,以了解这是否真的有可能和高效,但我们认为它会起作用。