如何在多个租户的documentDB集合中取得性能平衡



我有:

  1. 所有租户的数据存储在documentdb的集合中。(即多个租户)。
  2. 我以这样一种方式配置集合,即我的所有数据均匀地分布在所有分区上。
  3. 但是分区不是由每个租户划分的。我使用其他方案。
  4. 因为特定租户的数据分布在多个分区上。

以下是我的问题:

  1. 这是正确的事情来做最大的性能为读取和写入数据?
  2. 如果我想查询一个特定的租户该怎么办?在编写这个查询时有什么注意事项?
  3. 还有什么我需要考虑的吗?

我会避免跨分区查询,因为这会带来相当大的成本(基本上是将索引和解析成本与分区数量相乘——默认为25)。这是相当容易尝试的。

我更喜欢可以查询特定分区的解决方案,通常是根据租户ID进行分区。

请记住,对于分区集合,每个分区仍然有限制(10K RU和10GB) -我在这里写过http://blog.ulriksen.net/notes-on-documentdb-partitioning/

这取决于您的使用模式以及租户大小的变化。

一般来说,对于多租户系统,99%的操作都在单个租户内。如果将tenantID作为分区键,那么这些操作将只涉及单个分区。这不会使单个操作更快(延迟),但在多个租户负载下可以提供巨大的吞吐量增益。但是,如果您只有5个租户,其中一个租户比其他租户大10倍,那么使用tenantID作为密钥将导致一个非常不平衡的系统。

我们使用tenantID作为系统的分区键,它似乎工作得很好。我们已经讨论过,如果它变得非常不平衡,我们会怎么做,其中一个想法是将分区键设置为tenantID +,以分割大型租户。虽然我们还没有这样做所以我们还没有研究出所有的细节来确定这是否可行,是否有效,但我们认为这是可行的

您所描述的是一个明智的解决方案,可以很好地避免数据倾斜和跨分区的负载平衡。由于对特定租户的查询需要访问所有分区,因此请记住设置FeedOptions。enablecrospartitionquery为true (x-ms-documentdb-query- enablecrospartition in REST API)。

DocumentDB站点也有一篇关于分区集合和一般选择分区键的技巧的优秀文章。https://azure.microsoft.com/en-us/documentation/articles/documentdb-partition-data/

最新更新