我有一个用户使用a stored procedure从一个容器中批量删除了约5万个文档。
与此同时,另一个用户尝试登录该Web应用程序(连接到相同的cosmos db),但由于超出了速率限制,因此请求失败。
在这种情况下,为避免出现上述服务短缺的最佳做法是什么?
a)我应该按收款方式提供RU吗? b)我可以在发出请求时对通过代码进行批量操作所消耗的RU设置上限吗? c)还有其他方法吗?
有关我当前(幼稚/新手)实施的更多详细信息:
答案 0 :(得分:0)
建议不要对大容量删除操作使用存储过程。存储过程仅在主副本上运行,这意味着它们只能利用预配置的总RU / s的1/4。在Bulk Mode中使用SDK客户端进行批量操作将获得更好的吞吐量利用率和更高的效率。
是在数据库级别还是在容器级别设置吞吐量取决于几件事。如果您拥有大量获得大致相同数量的请求和存储的容器,则数据库级别的吞吐量会很好。如果请求和存储是不对称的,则为那些与其他容器有很大差异的容器提供自己的专用吞吐量。 Learn more about the differences。
您不能直接限制容器上的请求。您将需要在应用程序中实现Queue-based load leveling。
总体而言,如果您已预配置400 RU / s并尝试批量删除50K记录,则预配置不足,需要提高吞吐量。另外,如果您的工作负载变化很大,并且长时间很少或没有请求,而短期却很大量,那么您可能需要考虑使用Serverless throughput或Autoscale