RavenDb Ver 3.0 - "Query Failed" 和 "OutOfMemoryException" 关于大数据的消息

RavenDb Ver 3.0 - "Query Failed" with "OutOfMemoryException" Message on Large data

我们正在 RavenDb Ver 3.0 之上开发新的应用程序作为数据存储。

在性能测试中,我们发现系统存在问题。

问题是,当我们 运行 像下面这样的查询时,要获取所有结果,如果总结果超过某某(例如 >2000 个文档,有时甚至更少)

the "Query Failed" with "OutOfMemoryException" Message appears.

public ICollection<T> Find<T>(Expression<Func<T, bool>> predicate)
{
    var spendTime01 = Stopwatch.StartNew();
    var list = new List<T>();
    var power = 2000;

    RavenQueryStatistics statistics;
    using (DocumentSession)
    {
         list.AddRange(DocumentSession.Query<T>().Statistics(out statistics)
                                                 .Where(predicate).Take(power));
    }

    if (statistics.TotalResults > power)
    {
       var toTake = statistics.TotalResults - power;
       var taken = power;

       while (toTake > 0)
       {
            using (DocumentSession)
            {
               list.AddRange(
                   DocumentSession.Query<T>()
                       .Where(predicate)
                       .Skip(taken)
                       .Take(toTake > power ? power : toTake));
               toTake -= power;
               taken += power;
            }
       }
}

//using (DocumentSession)
//{
//    var query = DocumentSession.Query<T>("Activities/All").Where(predicate);
//    using (var enumerator = DocumentSession.Advanced.Stream(query))
//    {
//        while (enumerator.MoveNext())
//        {
//            list.Add(enumerator.Current.Document);
//        }
//    }
//}

spendTime01.Stop();
Debug.WriteLine($"Raven Find Predicate Elapsed Time: {spendTime01.Elapsed}");
return list;
}

我尝试使用索引并切换到 Advanced.Stream(query) 但此命令 运行 非常慢,对于 4000 个文档需要 20 秒来枚举结果并将其添加到列表中。

我阅读了所有博客并在网上回答了这个问题,但我对这个问题没有任何看法,而且我完全担心如果总结果超过数十万会发生什么.

您很可能 运行 在 32 位模式下,您需要 运行 在 64 位模式下。

顺便说一句,您通过多次调用服务器来获取大量数据显然是在做非常糟糕的事情。如果您需要那么多数据,请使用 Streaming,但请注意,在大多数情况下,大型记录集几乎没有什么用处

要完成 Mr.Ayende Rahien 的回答,我应该提到将 IIS Express 更改为 运行 作为 64 位进程的解决方案 link。

Why can't I set asp.net mvc 4 project to be x64