c# - otra - ¿Es DocumentDB más lento que SQL al tirar de muchos registros?
consultar tabla de otra base de datos sql server (1)
Estaba haciendo algunos benchmarking, así que tenía una base de datos SQL con 2500 registros. Inserté esos registros en DocumentDB.
Escribí dos líneas de código, una con entidad de marco para extraer todos los 2500 en una matriz en C #. La siguiente línea para extraer los 2500 en una matriz de DocuementDB.
Código utilizado:
var test= await Task<Test>.Run(() =>
client.CreateDocumentQuery<Test>(collection.DocumentsLink)
.ToList());
El ejemplo de DocumentDB tomó más de 20 segundos. La línea de SQL Server fue casi instantánea. Los objetos son DTO simple con 5 propiedades e hice la consulta SQL en Internet.
¿Estoy haciendo mal uso de DocumentDB? Pensé que estaba hecho para poner todos tus registros en la memoria y luego unirte a linq.
@bladefist, debería ser capaz de lograr un rendimiento mucho mejor con DocumentDB. Por ejemplo, eche un vistazo a este código auxiliar y a la salida de una cuenta de Azure VM y DocumentDB en Europa occidental.
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
Algunas mejores prácticas a seguir para el rendimiento:
- Usa conectividad directa y protocolo TCP
- Utilice un tamaño de página grande (máximo: 1000) si está leyendo en lotes grandes para minimizar el número de viajes redondos
- Para reducir la latencia, ejecute su cliente en la misma región que su cuenta de DocumentDB
- El rendimiento (y el almacenamiento) aprovisionado de las unidades de capacidad que compra se distribuye entre las colecciones. Por lo tanto, si desea medir el rendimiento, debe asegurarse de que su aplicación distribuya la carga de trabajo en todas las colecciones. Por ejemplo, si ha comprado 1 CU, puede optar por distribuir todo el rendimiento en una sola colección o en tres colecciones.