Performance RavenDB-写入/保存性能慢?

Performance RavenDB-写入/保存性能慢?,performance,ravendb,Performance,Ravendb,我开始将一个简单的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 =

我开始将一个简单的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测试在数据库机器上产生了更高的利用率(vs SQL)和更少的页面。我尝试将Raven作为服务和IIS应用程序运行,但没有发现明显的区别


编辑

我想确保a)我的一台机器或b)我创建的解决方案没有问题。因此,决定尝试使用Michael Fris创建的另一个解决方案在Appharbor上测试它:,只需将Miniprofiler添加到该解决方案中即可。Michael是Apharbor最棒的家伙之一,如果你想看的话,你可以下载代码

来自Appharbor的结果

您可以(目前):

  • 阅读:(7-12毫秒,100+毫秒时有一些异常值)

  • 写入/保存:(197-312ms)*哇,保存时间太长了*。要测试保存,只需并保存即可。您可能希望至少执行两次,因为随着应用程序的升温,第一次通常需要更长的时间

  • 除非我们都做错了什么,否则RavenDB的保存速度非常慢——大约是读取速度的10-20倍。考虑到它是异步重新索引的,这看起来非常慢

    有没有办法加快速度,或者这是意料之中的事?

    首先,艾恩德是拉文德背后的“人”(他写的)。我不知道他为什么不回答这个问题,尽管即使在谷歌集团,他似乎也会插话问一些尖锐的问题,但很少回来提供完整的答案。也许他在努力让瑞文克离开地面

    第二,我们遇到了类似的问题。下面是一个关于谷歌集团的讨论链接,可能是原因:

    一个合理的问题可能是:“如果这些建议解决了问题,为什么RavenDB不能以开箱即用的方式工作?”或者至少提供了关于如何获得良好的写入性能的文档

    我们在上面的帖子中提出了一些建议,我们玩了一段时间,响应时间确实有所改善。但最后,我们还是改用了MySQL,因为它经过了很好的测试,我们很早就遇到了这个问题(幸运的是),这让我们担心可能会遇到更多的问题,最后,因为我们没有时间:

  • 全面测试它是否修复了我们在RavenDB服务器上看到的性能问题
  • 调查并测试使用未经验证的连接共享和预验证的含义 总而言之,您实际上是在测试网络延迟和身份验证聊天的总和。正如Joe指出的,有一些方法可以优化身份验证以减少聊天。然而,这确实会降低安全性,显然微软构建的安全性首先是安全的,其次是性能。作为RavenDB的用户,您可以选择默认安全模型是否过于健壮,因为它可以证明是用于受保护的服务器到服务器通信的

    RavenDB明确定义为面向阅读。写入速度比读取速度慢10-20倍是完全可以接受的,因为写入是完整的ACID和事务性的

    如果写速度是RavenDB的限制因素,那么您可能没有正确地建模事务边界。您正在保存的文档与RDBMS表行太相似,实际上没有很好地建模文档


    编辑:再次阅读您的问题并查看背景部分,您明确定义了测试条件,使其成为SQL Server的最佳方案,同时也是RavenDB效率最低的方法之一。对于这种大小的数据,如果是真实世界中的使用,几乎可以肯定这是一个文档。

    尝试停止该计算机上运行的SQL Server实例,并再次监视RavenDB的性能。如果在这种情况下花费的时间非常少,您可以考虑问题所在。您正在执行哪种操作?代码是什么样子的?RavenDB运行的身份验证模式是什么?@UNNI-我不确定您是否在开玩笑,但我确实尝试过停止SQL Server实例。这没什么区别。@Ayenda-请看我的编辑。结果表明,保存比查询花费的时间要长得多。谢谢Joe。这很令人沮丧。RavenDB将其自身提升为“高性能-RavenDB对于每种类型的数据模型来说都是一个非常快速的持久化层”。也许它应该说“高读性能-尽管持久化相当缓慢”。从根本上说,我真的很惊讶于这个问题得到的回应如此之少。我本以为社区对RavenDB更感兴趣。不幸的是,我不同意总结的大部分内容。我认为今天的RavenDB有些问题。我不知道这是一个设计问题还是一个bug,但它不仅仅是“这就是我们所期望的”。用1/4秒的时间写入/持久化哪怕是最小的对象都是疯狂的。实际上,这是网络延迟、身份验证聊天和查询的总和——这不是你在AppHarbor的RavenHQ上部署web应用的方式吗?另外,不要使用SQL Server和