与关系数据库相比,使RavenDb(作为NoSQL文档数据库的示例)更有效的因素是什么?
我知道两个因素:
实际上我认为最大的性能提升是缺少连接,但看起来像Multi Maps / Reduce Index非常类似于join。
那么哪些因素会使RavenDb更有效率呢?
答案 0 :(得分:7)
IDSA, 有几个原因可以使您通常比关系数据库应用程序更快地看到RavenDB应用程序。
a)正如Daniel所说,数据建模的差异很大。这意味着您可以以更便宜的方式加载数据。
b)您始终查询索引。这很重要,因为这意味着RavenDB的查询计划始终是INDEX_SEEK。当然,您可以尝试使用RDBMS执行此操作,但在许多情况下,您并不总是点击索引。特别是,你通常需要做更多的工作才能到达那里,然后你必须使用连接和其他东西来获取数据,这再次使查询计划复杂化。
c)RavenDB将在幕后工作以代表您进行优化。您使用的越多,它就越能够根据您的使用模式进行优化。
d)在查询期间,您永远不会进行任何计算。这很关键,因为这意味着像聚合查询这样的东西已经预先计算好了,所以它们真的便宜。
答案 1 :(得分:5)
我不认为可以说RavenDB与关系数据库相比通常更快。这当然取决于您希望在应用程序中执行哪种数据操作。
大多数应用程序更快的一个原因是RavenDB在读取和写入方面同样快,因为索引是异步更新的。然而,这伴随着最终一致性的成本。虽然这对大多数应用来说都没问题,但它并不是无价的。
另一个重量级的原因更多是关于文档数据库。 RavenDB中的单个文档(以及其他文档)可以包含完整的对象图和非规范化引用,从而消除了对数据库的许多请求。在大多数情况下,数据库本身并不会使应用程序变慢,但更多的是发送到数据库服务器的过多请求(考虑网络延迟+开销)。文档数据库非常适合无状态应用程序,例如Web应用程序,其中单个视图显示整个对象图的信息(考虑订单,所有项目,客户信息,账单信息等)。