查询满足DocumentDB中特定条件的文档数量的最佳方法是什么?

时间:2015-10-23 20:54:59

标签: c# performance azure-cosmosdb

目前我正在使用client.CreateDocumentQuery<...>(...).Where(...).Count()
但我担心这会导致DocumentDB通过互联网传输所有选定的文件,之后我的应用程序会在客户端对它们进行计数。

客户端对象下是否有不同的查询方法可以确保DocumentDB执行计数,并返回最终结果?
是我正在使用的方法,已经以这种方式进行了优化? (即IOrderedQueryable
我是否需要编写存储过程,以便在服务器端保持处理?如果是这样,你如何引用JavaScript中的项目数?

1 个答案:

答案 0 :(得分:3)

要减少从DocumentDB发回的数据量,可以将LINQ查询更改为.Select(f =&gt; 1).AsEnumerable()。Count()。这将被转换为“SELECT VALUE 1 FROM ...”查询,它将为每个匹配的结果发送“1”。

使此更快的另一个变化是通过设置FeedOptions.MaxItemCount = -1(最大值)来更改MaxItemCount。像

这样的东西
client.CreateDocumentQuery<..>(
        collectionLink, 
        new FeedOptions { MaxItemCount = -1 })
    .Where(..)
    .Select(f => 1)
    .AsEnumerable()
    .Count()

另一种方法是使用存储过程来执行计数 - 您可以使用现有的库,如DocumentDB Lumenize:https://github.com/lmaccherone/documentdb-lumenize

每种方法的优点和缺点 - 前者更好,如果你的收集是吞吐量瓶颈,而后者更好的延迟,因为你只需发送回计数而不是发送回1并将它们总结为客户端。