RavenDB反序列化似乎很慢

时间:2011-12-06 04:16:41

标签: performance ravendb

我一直在使用RavenDB(build 531),我似乎无法正常使用性能。

我有一个简单的课程

    public class Cat
    {
      public string Id {get; set;}
      public string Name {get; set;
    }

我创建了大约200只随机猫,并将它们放到RavenDB中。

但是当我通过

去取一只猫时
   session.Load<Cat>("cats/<GUID>");

大约需要700毫秒。

RavenDB的Debug窗口如下所示

    Request # 156: GET - **0 ms** - <default>-200-/docs/cats/<GUID>

它会返回正确的Cat,但反序列化似乎需要很长时间。

我试图反序列化文件的输出,看看这是否真的是罪魁祸首,但我似乎无法弄清楚如何做到这一点。

思想?

编辑:我尝试反序列化一个普通的旧Cat对象,花了100毫秒。

编辑2:以下是答案。

看起来有一些重要的启动成本。

如果我在第一张猫之后取出任何其他猫,我的表现会显着增加 - 至&lt; 100毫秒。

因此,为什么你不用只有一次获取的基准。

1 个答案:

答案 0 :(得分:0)

这里有一些事情可以发生。

  1. 您使用的是索引吗?
  2. 您之前是否通过该查询对文档存储进行了调用?
  3. 一般原因是因为

    1. 对文档服务器的第一个客户端调用有一些初始设置命中。
    2. 索引可能需要编入索引 - 例如。动态索引。
    3. 更多详情......

      如果在RavenDB文档存储中首次使用任何数据,则需要进行一些索引。执行查询并且未使用(或猜测)索引时会发生这种情况。我认为它也会在首次创建索引时发生..但我不是100%肯定的。

      所以一般来说,很多人首先只是在没有索引的情况下尝试查询文档存储。最初的第一次打击总是很昂贵。创建初始文档存储(在客户端)是昂贵的.. which is why it's suggested to be a Singleton。如果第一次执行查询并且它是动态索引..那么必须创建索引,索引并将THEN返回给客户端。

      所以第一次打击需要一些初步预热的东西。