我们为Cosmos DB提供了多个集合(一个用于主数据,一个用于事务数据)。我需要连接到我的Web应用程序中的多个集合。因为我们从一个集合开始,所以我创建了一个DocumentDB连接的单例实例。现在,我们正在设想多个集合。在每个集合中建立多个单独连接是否是正确的做法,还是有更好的方法可以处理?
答案 0 :(得分:1)
你不一定需要。
您的单身人士以您正在查询或执行其他操作的集合的URI形式具有自链接。您可以只将集合的名称作为参数,然后使用SDK的UriFactory
,它需要数据库ID和集合ID(名称),以生成要查询的集合的自链接。
然而,根据您期望的负载,分割它们可能是更好的主意,但它归结为您的单例实现。如果它是一个线程安全的,那么其他人可能必须等待很长时间才能完成操作。
答案 1 :(得分:0)
您不需要为每个集合单独使用Cosmos DB Client,请参见下面的代码...
private static DocumentClient client = GetDatabaseClient();
public static void Run(string myEventHubMessage, TraceWriter log)
{
var master data = GetMasterData("124",log);
}
private static string GetMasterData(string deviceSerialNumber, TraceWriter log)
{
var query = new SqlQuerySpec("select c.AssetType FROM c where c.ApplicationName = 'Eroutes' and c.Device[0].DeviceSerialNumber=@DeviceSerialNumber",
new SqlParameterCollection(new SqlParameter[] {
new SqlParameter { Name = "@DeviceSerialNumber", Value = deviceSerialNumber }
}));
JObject assertType = client.CreateDocumentQuery<JObject>(
UriFactory.CreateDocumentCollectionUri(databaseId, masterCollectionId), query).AsEnumerable().FirstOrDefault();
return assertType["AssetType"]?.Value<string>();
}
private static DocumentClient GetDatabaseClient()
{
DocumentClient documentClient = new DocumentClient(
new Uri(System.Configuration.ConfigurationManager.AppSettings["cosmos_endpoint"]),
System.Configuration.ConfigurationManager.AppSettings["cosmos_key"]);
return documentClient;
}
检查documentation以获得更多详细信息