【发布时间】:2012-04-04 06:45:31
【问题描述】:
我开始将一个简单的 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 行。查询很简单,返回一个具有 12 个属性、大小为 48 字节的对象。使用 fiddler 对 RavenDB 运行 WCAT 测试会在数据库机器上产生更高的利用率(相对于 SQL)和更少的页面。我尝试将 Raven 作为服务和 IIS 应用程序运行,但没有发现明显差异。
编辑
我想确保 a) 我的一台机器或 b) 我创建的解决方案没有问题。因此,决定尝试使用 Michael Friis 创建的另一个解决方案在 Appharbor 上对其进行测试:RavenDN sample app 并将 Miniprofiler 添加到该解决方案中。 Michael 是 Aphabor 的优秀员工之一,如果您想查看,可以下载代码 here。
Appharbor 的结果
您可以try it here(目前):
读取:(7-12ms,在 100+ms 时有一些异常值)。
写入/保存:(197-312ms) * 哇,保存时间太长了 *。要测试保存,只需 create a new "thingy" 并保存即可。您可能需要至少执行两次,因为随着应用程序的升温,第一次通常需要更长的时间。
除非我们都做错了什么,否则 RavenDB 的保存速度非常慢 - 保存速度比读取速度慢大约 10-20 倍。鉴于它是异步重新索引,这似乎很慢。
有没有办法加快速度,或者这是意料之中的?
【问题讨论】:
-
尝试停止该机器上运行的SQL Server实例并再次监控RavenDB的性能。如果在这种情况下花费的时间非常少,您可以考虑问题所在。
-
你在做什么操作?代码是什么样的?
-
RavenDB 运行的身份验证模式是什么?
-
@UNNI - 我不确定你是不是在开玩笑,但我确实尝试过停止 SQL Server 实例。没什么区别。
-
@Ayenda - 查看我的编辑。事实证明,Save 比 Query 花费的时间要长得多。
标签: performance ravendb