连接到Cosmos DB中的多个集合

时间:2018-05-16 04:55:08

标签: azure-cosmosdb

我们为Cosmos DB提供了多个集合(一个用于主数据,一个用于事务数据)。我需要连接到我的Web应用程序中的多个集合。因为我们从一个集合开始,所以我创建了一个DocumentDB连接的单例实例。现在,我们正在设想多个集合。在每个集合中建立多个单独连接是否是正确的做法,还是有更好的方法可以处理?

2 个答案:

答案 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以获得更多详细信息