documentdb - .net查询sdk上的大返回结果的性能降低

时间:2015-09-29 09:42:47

标签: azure-cosmosdb

我正在使用以下代码

处理documentdb
    var ee =client.CreateDocumentQuery<dynamic>(collection.SelfLink, querySpec)

我执行

时遇到性能问题
    ee.ToList();

完成700多条记录大约需要1分钟以上。 (如果返回结果更多,则需要更长的时间才能完成操作) 如果我在Azure Query Explore上尝试查询,则只需几秒钟。

我可以做些什么来优化代码?或者无论如何我可以将返回结果作为JSON字符串。

感谢。

1 个答案:

答案 0 :(得分:-1)

尝试将maxItemCount增加到-1(最大值)并查看效果是否有效:

var ee =client.CreateDocumentQuery<dynamic>(collection.SelfLink, querySpec, new FeedOptions { MaxItemCount = -1 })

请注意,由于两个原因,它仍然不会像在查询资源管理器上运行一样快:

  1. 查询资源管理器在获取一个页面后立即返回。通过指定ToList(),您将等待所有返回。查询资源管理器默认为100而不是-1,因此它会更快地返回。为了公平比较,请增加查询资源管理器案例的每页项目数。您可能需要考虑一种分页方法(页面大小较小),以便您的应用程序部分呈现初始页面并使其看起来更高效。

  2. 其他人报告说,我个人在穿越蔚蓝数据中心边界时每次往返都经历了很长的延迟。从同一数据中心的node.js服务器调用时,我得到10毫秒的延迟。使用本地运行的相同代码时,它至少需要250毫秒。我测得的ping延迟是26ms,所以我假设延迟是在数据中心边界而不是我的网络上添加的。您可能需要考虑在与DocumentDB相同的数据中心中运行代码。

  3. 至于作为JSON字符串返回,这里有2.5个选项:

    1. 您可能希望查看node.js(或在.NET中运行的edge.js,这是额外的1/2)。它是原生JavaScript而不是C#,所以它在概念上与DocumentDB更接近。 DocumentDB的.NET API受到范式差异/翻译的影响。注意,我已经使用edge.js在.NET中运行node.js。疯狂,但它的工作原理。然后,您可以使用DocumentDB node.js库而不是DocumentDB .NET库。这为您提供了更多控制权。
    2. 如果您想保持纯.NET,可以使用像RestSharp这样的包直接点击DocumentDB REST API。