Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最大化Azure Cosmos数据库写入_C#_Azure Cosmosdb - Fatal编程技术网

C# 最大化Azure Cosmos数据库写入

C# 最大化Azure Cosmos数据库写入,c#,azure-cosmosdb,C#,Azure Cosmosdb,我有一个生成大量数据的应用程序(10000多个项目),每个项目大约44KB。我正试图找到最快的方式来保存项目的宇宙数据库。我使用了两种不同的方法将项目批量添加到数据库中,但它们的性能几乎相同,而且被认为太慢了 方法一: CosmosClient cosmos = new CosmosClient(uri, secret, new CosmosClientOptions {

我有一个生成大量数据的应用程序(10000多个项目),每个项目大约44KB。我正试图找到最快的方式来保存项目的宇宙数据库。我使用了两种不同的方法将项目批量添加到数据库中,但它们的性能几乎相同,而且被认为太慢了

方法一:

    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)?