我一直在使用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毫秒。
因此,为什么你不用只有一次获取的基准。
答案 0 :(得分:0)
这里有一些事情可以发生。
一般原因是因为
如果在RavenDB文档存储中首次使用任何数据,则需要进行一些索引。执行查询并且未使用(或猜测)索引时会发生这种情况。我认为它也会在首次创建索引时发生..但我不是100%肯定的。
所以一般来说,很多人首先只是在没有索引的情况下尝试查询文档存储。最初的第一次打击总是很昂贵。创建初始文档存储(在客户端)是昂贵的.. which is why it's suggested to be a Singleton。如果第一次执行查询并且它是动态索引..那么必须创建索引,索引并将THEN返回给客户端。
所以第一次打击需要一些初步预热的东西。