C# 最大化Azure Cosmos数据库写入
我有一个生成大量数据的应用程序(10000多个项目),每个项目大约44KB。我正试图找到最快的方式来保存项目的宇宙数据库。我使用了两种不同的方法将项目批量添加到数据库中,但它们的性能几乎相同,而且被认为太慢了 方法一:C# 最大化Azure Cosmos数据库写入,c#,azure-cosmosdb,C#,Azure Cosmosdb,我有一个生成大量数据的应用程序(10000多个项目),每个项目大约44KB。我正试图找到最快的方式来保存项目的宇宙数据库。我使用了两种不同的方法将项目批量添加到数据库中,但它们的性能几乎相同,而且被认为太慢了 方法一: CosmosClient cosmos = new CosmosClient(uri, secret, new CosmosClientOptions {
CosmosClient cosmos = new CosmosClient(uri, secret,
new CosmosClientOptions
{
RequestTimeout = TimeSpan.FromSeconds(120),
AllowBulkExecution = true,
ConnectionMode = Microsoft.Azure.Cosmos.ConnectionMode.Direct,
});
Container itemContainer = database.GetContainer(containerName);
List<Task> toWaitOn = new List<Task>();
items.ForEach(x => toWaitOn.Add(LineMembers.CreateItemAsync(x, pk)));
await Task.WhenAll(toWaitOn);
CosmosClient cosmos=新的CosmosClient(uri,秘密,
新CosmosClientOptions
{
RequestTimeout=TimeSpan.FromSeconds(120),
AllowBulkExecution=true,
ConnectionMode=Microsoft.Azure.Cosmos.ConnectionMode.Direct,
});
Container itemContainer=database.GetContainer(containerName);
List toWaitOn=新列表();
items.ForEach(x=>toWaitOn.Add(LineMembers.CreateItemAsync(x,pk));
等待任务。WhenAll(toWaitOn);
方式二:
ConnectionPolicy ConnectionPolicy = new ConnectionPolicy
{
ConnectionMode = Microsoft.Azure.Documents.Client.ConnectionMode.Direct,
ConnectionProtocol = Protocol.Tcp,
RequestTimeout = new TimeSpan(1, 0, 0),
MaxConnectionLimit = 1000,
RetryOptions = new RetryOptions
{
MaxRetryAttemptsOnThrottledRequests = 10,
MaxRetryWaitTimeInSeconds = 60
}
};
using(var client = new DocumentClient(
new Uri(Uri), secret,
ConnectionPolicy))
{
var tasks = new List<Task>();
DocumentCollection dataCollection = client.CreateDocumentCollectionQuery(UriFactory.CreateDatabaseUri(dbName))
.Where(c => c.Id == containerName).AsEnumerable().FirstOrDefault();
for(int i = 0; i < col.Count; i++)
{
tasks.Add(InsertDocument(1, client, dataCollection, items.Cast<object>().ToList()));
}
}
ConnectionPolicy ConnectionPolicy=newconnectionpolicy
{
ConnectionMode=Microsoft.Azure.Documents.Client.ConnectionMode.Direct,
ConnectionProtocol=Protocol.Tcp,
RequestTimeout=新的时间跨度(1,0,0),
MaxConnectionLimit=1000,
RetryOptions=新的RetryOptions
{
MaxRetryAttemptsOnThrottledRequests=10,
MaxRetryWaitTimeInSeconds=60
}
};
使用(var client=newdocumentclient)(
新Uri(Uri),机密,
连接策略)
{
var tasks=新列表();
DocumentCollection dataCollection=client.CreateDocumentCollectionQuery(UriFactory.CreateDatabaseUri(dbName))
.Where(c=>c.Id==containerName).AsEnumerable().FirstOrDefault();
for(int i=0;i
是否有人知道向Cosmos DB批量添加数据的其他方法,或者是否有方法扩展写入
更新:
运行时间超过一分半钟被认为太慢了。然而,经过仔细检查,我们发现正在生成的json包含大量重复数据。一旦我们重构了数据,我们在30秒内就得到了保存
谢谢,,
特拉维斯·佩特里(Travis Pettry)@Andrewilliamson,我认为他在第三版中被取代了API@AndrewWilliamson谢谢,但我发现它的速度是我另外两种方法的两倍?它只有一年的历史,而且已经被更换了?我不知道你是如何定义“太慢”的-你能编辑你的问题来详细说明吗?减速通常是由于RU耗尽时的节流。您是否看到节流的迹象(429)?