我开始将一个简单的 ASP.NET MVC Web 应用程序从 SQL 移植到 RavenDB。我注意到 SQL 上的页面比 RavenDB 上的更快。
使用 Miniprofiler 向下钻取,罪魁祸首似乎是它所花费的时间:session.SaveChanges (150-220ms)。在 RavenDB 中保存的代码如下所示:
var btime = new TimeData() { Time1 = DateTime.Now, TheDay = new DateTime(2012, 4, 3), UserId = 76 };
session.Store(btime);
session.SaveChanges();
身份验证模式:当 RavenDB 作为服务运行时,我假设它使用“Windows 身份验证”。当部署为 IIS 应用程序时,我只使用默认值 - “Windows 身份验证”。
背景:数据库机器与我作为 Web 服务器的开发机器是分开的。数据库在同一台数据库机器上运行。测试数据非常小——比如 100 行。查询很简单,返回一个具有 48 个字节大小的 12 个属性的对象。使用 fiddler 对 RavenDB 运行 WCAT 测试会在数据库机器上产生更高的利用率(相对于 SQL)和更少的页面。我尝试将 Raven 作为服务和 IIS 应用程序运行,但没有看到明显的差异。
编辑
我想确保 a) 我的一台机器或 b) 我创建的解决方案没有问题。因此,决定尝试使用 Michael Friis 创建的另一个解决方案在Appharbor上对其进行测试: RavenDN 示例应用程序,并将 Miniprofiler添加到该解决方案中。Michael 是 Aphabor 的优秀人员之一,如果您想查看代码,可以在此处下载代码。
来自 Appharbor 的结果
您可以在这里尝试(暂时):
阅读:(7-12ms,在 100+ms 时有一些异常值)。
写入/保存:(197-312ms)*哇,保存时间很长*。要测试保存,只需创建一个新的“东西”并保存它。您可能希望至少执行两次,因为第一次通常会随着应用程序的升温而花费更长的时间。
除非我们都做错了什么,否则 RavenDB 的保存速度非常慢 - 保存速度比读取速度慢 10-20 倍。鉴于它异步重新索引,这似乎非常慢。
有没有办法加快速度,或者这是可以预料的?