我有一个要求,我需要Users从RavenDB 获取整个数据集合,并将检索到的结果集与另一组数据进行比较.此特定集合中有近4000条记录.
因为Raven是默认安全的,所以我不断获得一个例外,或者Number of requests per session exceeded返回最多128个记录.
我不想将属性Session.Advanced.MaxNumberOfRequestsPerSession设置为更高的值.
我应该使用什么查询来获取所有记录的计数?处理这种情况的理想方法是什么?
Aye*_*ien 20
您使用分页,一次读取这1024个项目.
int start = 0;
while(true)
{
var current = session.Query<User>().Take(1024).Skip(start).ToList();
if(current.Count == 0)
break;
start+= current.Count;
allUsers.AddRange(current);
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*ams 13
这个问题是在RavenDB中提供此功能之前发布的,但万一其他人现在偶然发现了这个问题......
鼓励这样做的方法是通过Streaming API.RavenDB客户端对流进行批处理,以便它可以自动"寻呼"到服务器的请求/响应.如果您选择使用Streaming API,则客户端会假定您"知道您正在做什么",并且不会检查用于常规查询的128/1024/30限制.
var query = session.Query<User>();
using (var enumerator = session.Advanced.Stream(query)) {
while (enumerator.MoveNext()) {
allUsers.Add(enumerator.Current.Document);
}
}
var count = allUsers.Count;
Run Code Online (Sandbox Code Playgroud)
提示:虽然这是解决问题的鼓励方式......作为一般规则,最好避免这种情况开始.如果有一百万条记录怎么办?那份allUsers清单会变得很大.也许可以先进行索引或转换,以过滤掉实际需要显示给用户/进程的数据?这是出于报告目的吗?也许RavenDB应该自动导出到带有报告服务的SQL服务器上?等等...
| 归档时间: |
|
| 查看次数: |
8250 次 |
| 最近记录: |