Azure cosmosdb documentdb-在.net查询sdk上执行大返回结果时性能低下

Azure cosmosdb documentdb-在.net查询sdk上执行大返回结果时性能低下,azure-cosmosdb,Azure Cosmosdb,我正在使用下面的代码处理documentdb var ee =client.CreateDocumentQuery<dynamic>(collection.SelfLink, querySpec) 完成700多条记录大约需要1分钟以上的时间。如果返回的结果更多,则完成操作所需的时间将更长 如果我在Azure查询浏览器上尝试我的查询,只需几秒钟 我能做些什么来优化代码吗?或者我是否可以将返回结果作为JSON字符串 谢谢。尝试将maxItemCount增加到-1 max,看看这

我正在使用下面的代码处理documentdb

    var ee =client.CreateDocumentQuery<dynamic>(collection.SelfLink, querySpec)
完成700多条记录大约需要1分钟以上的时间。如果返回的结果更多,则完成操作所需的时间将更长 如果我在Azure查询浏览器上尝试我的查询,只需几秒钟

我能做些什么来优化代码吗?或者我是否可以将返回结果作为JSON字符串


谢谢。

尝试将maxItemCount增加到-1 max,看看这是否会影响性能:

var ee =client.CreateDocumentQuery<dynamic>(collection.SelfLink, querySpec, new FeedOptions { MaxItemCount = -1 })
注意,由于两个原因,这仍然不如在查询资源管理器上运行的速度快:

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

其他人也报告过,我个人在穿越azure数据中心边界时,每次往返都会经历较大的延迟。当从同一数据中心的node.js服务器调用时,我会得到10毫秒以下的延迟。使用本地运行的相同代码时,最短时间为250ms。我测得的ping延迟是26毫秒,因此我假设延迟是在数据中心边界添加的,而不是在网络中添加的。您可能需要考虑在同一个数据中心中运行代码,如DoTuntDB .</P> 至于作为JSON字符串返回,这里有2.5个选项:

您可能想看看运行在.NET中的node.js或edge.js,这是额外的1/2。它是本机JavaScript而不是C,因此在概念上更接近DocumentDB。DocumentDB的.NETAPI存在范式差异/转换问题。注意,我已经使用edge.js在.NET中运行了node.js。这很疯狂,但很管用。然后可以使用DocumentDB node.js库而不是DocumentDB.NET库。这给了你更多的控制。 如果您想保持纯粹的.NET,可以使用类似的包直接访问DocumentDB REST API。
关于maxItemCount,现在可以设置为-1以删除文档的页面大小限制。你不必只与1000人生活在一起。注意:查询响应仍然受响应大小限制(通过连接的字节)。使用projections SELECT子句来减少通过线路的字节数。@aliuy,很好!!!node.js和服务器端文档都没有显示这种更改。这是挂起还是我应该提交一个拉请求。谢谢你的建议,我会尝试一下。我没有指定maxItemCount的原因是,我需要获取所有记录,稍后我将使用这些记录生成图形和网格绑定。ToList使它在返回之前获取所有页面,而不管页面大小。较小的页面大小意味着需要更长的往返时间。@LarryMaccherone我们在两天前9/29引入了-1页面大小。。。听起来我们可能错过了一些文件。如果您能指出哪些文档,或者给我们发送一份PR,我会很高兴:我也有糟糕的性能,从DocumentDB返回了一个大的结果集。最新版本的SDK引入了分区,情况变得更糟了。我的这个大型结果集甚至不会导致SQL Server或Azure表存储闪烁,但我在DocumentDB中的查询时间超过3分钟。非常令人沮丧。
var ee =client.CreateDocumentQuery<dynamic>(collection.SelfLink, querySpec, new FeedOptions { MaxItemCount = -1 })