2015-08-10 3 views
0

Я использую DocumentDb для хранения своих данных, и это пример кода, который я использую, чтобы вставить запись в documentdb.Производительность вставки DocumentDb

Я вызываю метод как этот

var result = ProcessRequestAsync(() => Client.CreateDocumentAsync("collection link", data)).Result; 

и логика метода, как это

public async static Task<ResourceResponse<T>> ProcessRequestAsync<T>(Func<Task<ResourceResponse<T>>> request) 
      where T : Resource, new() 
     { 
      var delay = TimeSpan.Zero; 
      var minDelayTime = new TimeSpan(0, 0, 1); 
      for (; ;) 
      { 
       try 
       { 
        await Task.Delay(delay); 
        return await request(); 
       } 
       catch (DocumentClientException documentClientException) 
       { 
        var statusCode = (int)documentClientException.StatusCode; 
        if (statusCode == 429 || statusCode == 503) 
        { 
         delay = TimeSpan.Compare(documentClientException.RetryAfter, minDelayTime) >= 0 ? documentClientException.RetryAfter : minDelayTime; 
        } 
        else 
        { 
         throw; 
        } 
       } 
      } 
     } 

Он принимает 2 секунды, чтобы вставить запись в documentDb.

Однако я повторяю процесс вставки в цикле, первая запись занимает 2 секунды для вставки, а оставшиеся занимают 400 мс.

Что-нибудь, что мне нужно добавить для улучшения скорости вставки?

Заранее спасибо.

+0

Это первый запрос, который вы выполняете на экземпляре DocumentClient? Существует стоимость запуска, связанная с новичком DocumentClient и выполнением авторизационного подтверждения и т. Д. Это может объяснить, почему эта задержка не наблюдается при последующих запросах. –

ответ

1

Вы следовали рекомендациям по производительности, перечисленным здесь: http://azure.microsoft.com/blog/2015/01/20/performance-tips-for-azure-documentdb-part-1-2/ и http://azure.microsoft.com/blog/2015/01/27/performance-tips-for-azure-documentdb-part-2/? Вы должны увидеть производительность < 10 мс при записи с помощью DocumentDB взамен сетевой латентности вашего соединения.

Если вы могли бы разместить полный образец, мы можем помочь дальше. Как упоминал Райан, более длительное время для первого вызова может быть для инициализации клиента. В блоге выше также объясняется, как этого избежать.

Смежные вопросы