2016-08-17 38 views
2

说我有:存放在documetDB的收集所有的租户如何通过多个租户的documentDB集合实现性能平衡?

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

这里是我的问题:

  1. 这是做供读取和写入数据的最高性能正确的事情?
  2. 如果我想查询特定租户,该怎么办?写这个查询有哪些注意事项?
  3. 其他我需要考虑的事情?

回答

0

您所描述的是一个明智的解决方案,您可以很好地避免数据倾斜和分区间的负载平衡。由于特定租户的查询需要触及所有分区,因此请记得将FeedOptions.EnableCrossPartitionQuery设置为true(REST API中的x-ms-documentdb-query-enablecrosspartition)。

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

+0

但什么是多分区查询与单个分区的查询对成本的影响? – Raghu

+0

从每个查询RU成本的角度来看,如果您查询多个分区或单个分区,则几乎没有区别,因为RU成本取决于您检索多少数据,而不管它们是否存储在单个分区中。从性能成本的角度来看,将查询扩展到多个分区实际上负载平衡良好,并且应该改善查询的性能。最后,从总成本的角度来看,分区集合确实比单分区集合花费更多,因为您使用多个分区保留更多的吞吐量。 –

0

我会避免跨分区查询,他们与一个相当的成本(基本上乘以分区的数量指标和分析成本 - 默认为25)。尝试相当容易。

我宁愿解决方案,其中一个可以在特定分区上查询,典型地通过租户ID划分。

请记住,分区的集合,有在每个分区STIL限制(10K RU和10GB) - 我已经在你的使用模式,以及在承租人大小的变化在这里http://blog.ulriksen.net/notes-on-documentdb-partitioning/

0

这取决于写它。

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

我们使用tenantID作为我们系统的分区键,它似乎运作良好。我们已经谈到了如果它变得非常不平衡,我们会做什么,并且有一个想法是使分区关键是租户ID +以将大租户分开。尽管如此,我们还没有这么做,所以我们还没有制定出所有这些细节,以确定这些细节是否真的可行和高效,但我们认为它会起作用。