DocumentDB OfferThroughput 应该在代码中设置吗?

Should DocumentDB OfferThroughput be set in Code?

使用 DocumentDB 最困难的事情之一是计算您每天需要 运行 您的应用程序每秒多少个请求单位 (RUs/s),但在使用高峰期间也是如此。当你弄错时,DocumentDB 客户端会抛出异常,这是一个糟糕的使用模型。

我在 DocumentDB 示例中创建新集合时看到 OfferThroughput 值硬编码为 400(这似乎是最低的 RUs/s)。我原以为最好在 Azure 门户中设置它,这样它就可以动态更改,而无需更改代码。

在代码中设置它的场景是什么,哪个值优先?

Azure 门户和 SDK 都使用 REST API (https://msdn.microsoft.com/en-us/library/azure/mt632095.aspx) 来更新集合的吞吐量。该门户使用 DocumentDB 的 JavaScript 客户端 SDK。所以没有优先级或偏好顺序——最后一次调用更新性能将对集合有效。

关于哪些场景集提供代码吞吐量与门户中的吞吐量,这取决于您的偏好和部署过程。对于生产应用程序,代码更好,因为您可以轻松实现自动化。您可以动态更改吞吐量或通过多个集合的配置统一更改。

我必须同意,在 DocumentDB 上购买吞吐量的配置模型似乎非常不符合云。实际上,您要么预先配置到尖峰所需的最高级别,要么您自己编写一些代码以通过 Azure SDK 提高和降低吞吐量(当有不止一个时,这将成为一场噩梦该集合的峰值来源)。

定价模式很荒谬。由于底层架构(尤其是在 250GB 层)似乎无论如何都可以很好地扩展,我们应该按使用付费。

旁注,为了让它是动态的,您正在编写代码,因为 Azure 下似乎没有任何面向规则的解决方案来提供帮助。

实际上,您只需按照 documentdb 的指示编写自己的节流代码。如果在 ex.StatusCode == 429 处出现 DocumentClientException,则执行 await Task.Delay(ex.RetryAfter),然后重试。直到你得到一些其他异常或它成功。