Подтвердить что ты не робот

Является ли DocumentDB медленнее, чем SQL, вытягивая множество записей?

Я занимался бенчмаркингом, поэтому у меня была база данных SQL с 2500 записями. Я вставил эти записи в DocumentDB.

Я написал две строки кода, один с сущностью, чтобы вывести все 2500 в массив на С#. Следующая строка вытащить все 2500 в массив из DocuementDB.

Используемый код:

var test= await Task<Test>.Run(() =>
              client.CreateDocumentQuery<Test>(collection.DocumentsLink)
              .ToList());

Пример DocumentDB занял более 20 секунд. Линия SQL Server была близка к мгновенному. Объекты простые DTO с 5 свойствами, и я сделал SQL-запрос через Интернет.

Я неправильно использую DocumentDB? Я думал, что это было сделано, чтобы вытащить все ваши записи в память, а затем присоединиться к linq.

4b9b3361

Ответ 1

@bladefist, вы должны иметь возможность добиться гораздо большей производительности с помощью DocumentDB. Например, взгляните на эту заглушку кода и выйдите из учетной записи Azure VM и DocumentDB как в Западной Европе.

Stopwatch watch = new Stopwatch();
for (int i = 0; i < 10; i++)
{
    watch.Start();
    int numDocumentsRead = 0;
    foreach (Document d in client.CreateDocumentQuery(collection.SelfLink, 
        new FeedOptions { MaxItemCount = 1000 }))
    {
        numDocumentsRead++;
    }

    Console.WriteLine("Run {0} - read {1} documents in {2} ms", i, numDocumentsRead, 
        watch.Elapsed.TotalMilliseconds);
    watch.Reset();
}

//Output
Run 0 - read 2500 documents in 426.1359 ms
Run 1 - read 2500 documents in 286.506 ms
Run 2 - read 2500 documents in 227.4451 ms
Run 3 - read 2500 documents in 270.4497 ms
Run 4 - read 2500 documents in 275.7205 ms
Run 5 - read 2500 documents in 281.571 ms
Run 6 - read 2500 documents in 268.9624 ms
Run 7 - read 2500 documents in 275.1513 ms
Run 8 - read 2500 documents in 301.0263 ms
Run 9 - read 2500 documents in 288.1455 ms

Некоторые рекомендации по производительности:

  • Использовать прямую связь и протокол TCP
  • Используйте большой размер страницы (макс: 1000), если вы читаете большие партии, чтобы свести к минимуму количество круговых поездок.
  • Чтобы уменьшить время ожидания, запустите клиент в том же регионе, что и ваша учетная запись DocumentDB
  • Предоставленная пропускная способность (и хранение) единиц мощности, которые вы покупаете, распространяется по коллекциям. Поэтому, если вы хотите измерить пропускную способность, вы должны убедиться, что ваше приложение распределяет рабочую нагрузку во всех коллекциях. Например, если у вас есть покупка 1 CU, вы можете распределить всю пропускную способность в одну коллекцию или по трем коллекциям.