如何在多个租户的documentDB集合中实现性能平衡?

时间:2016-08-17 16:17:57

标签: azure-cosmosdb

说我有:

  1. 我的数据存储在documetDB的所有租户的收藏中。 (即多个租户)。
  2. 我以这样的方式配置集合,即我的所有数据均匀分布在所有分区上。
  3. 但是每个租户都不是分区。我使用其他一些方案。
  4. 由于此特定租户的数据分布在多个分区中。
  5. 以下是我的问题:

    1. 这对于读取和写入数据的最大性能是否正确?
    2. 如果我想查询特定租户怎么办?写这个查询有什么注意事项?
    3. 我需要考虑的其他事情吗?

3 个答案:

答案 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 +来拆分大租户。虽然我们还没有做到这一点,但我们还没有弄清楚所有这些细节,以了解这是否真的有可能和高效,但我们认为它会起作用。