gpt4 book ai didi

c# - DocumentDB 在提取大量记录时比 SQL 慢吗?

转载 作者:IT王子 更新时间:2023-10-29 04:44:18 25 4
gpt4 key购买 nike

我正在做一些基准测试,所以我有一个包含 2500 条记录的 SQL 数据库。我将这些记录插入到 DocumentDB 中。

我写了两行代码,其中一行使用 Entity Framework 将所有 2500 个数据拉入 C# 数组中。下一行将所有 2500 个数据从 DocumentDB 拉入数组。

使用的代码:

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

DocumentDB 示例花费了 20 多秒。 SQL Server 线路几乎是即时的。这些对象是具有 5 个属性的简单 DTO,我通过互联网进行了 SQL 查询。

我是否误用了 DocumentDB?我认为它是为了将所有记录拉入内存然后与 linq 连接。

最佳答案

@bladefist,您应该能够使用 DocumentDB 获得更好的性能。例如,查看来自西欧的 Azure VM 和 DocumentDB 帐户的代码 stub 和输出。

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 协议(protocol)
  • 如果您要大批量阅读,请使用较大的页面大小(最大:1000)以尽量减少往返次数
  • 为了减少延迟,请在与 DocumentDB 帐户相同的区域运行客户端
  • 您购买的容量单位的预配置吞吐量(和存储)分布在各个集合中。因此,如果您想测量吞吐量,您应该确保您的应用程序将工作负载分配给所有集合。例如,如果您购买了 1 个 CU,则可以选择将所有吞吐量分配给单个集合或跨三个集合。

关于c# - DocumentDB 在提取大量记录时比 SQL 慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com