文档数据库客户端生命周期

7

为了访问DocumentDB/CosmosDB,我使用了Microsoft.Azure.DocumentDB.Core(v1.3.2)包。当我创建并初始化DocumentClient类时,我注意到:

var documentClient = new DocumentClient(new Uri(endpointUrl), primaryKey);
await documentClient.OpenAsync();

在该端点上发送了一系列请求以获取有关索引和其他信息的信息。确切地说,在.OpenAsync()上会发出9个HTTP请求。这使得客户端的创建和激活在性能方面非常昂贵,需要花费将近一秒钟的时间才能获取所有请求。
因此,为了减轻这种昂贵的操作,我将DocumentClient设置为单例,并在应用程序的生命周期内保留引用。
应用程序是Asp.Net Core MVC,这可能会在内存中保留此对象的引用几天。 问题:将此对象作为单例保留那么长时间是否可行?如果不行,应该采取什么处理策略?或者是否有办法使初始化更便宜(即不进行这些初始请求)?
1个回答

15

我们也曾想过这个问题并找到了以下内容:

来自文档

SDK使用技巧#1: 在应用程序的生命周期内使用单例DocumentDB客户端。请注意,每个DocumentClient实例都是线程安全的,并且在直接模式下操作时执行有效的连接管理和地址缓存。为了允许DocumentClient进行有效的连接管理并提高性能,建议在整个应用程序的AppDomain中使用单个DocumentClient实例。

我想这个现在也适用于使用CosmosDB。


谢谢!我一直想看这篇文章。单例模式没错! - trailmax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接