RavenDB 3.0 即将发布

  • 孙镜涛

2014 年 3 月 12 日

话题:语言 & 开发架构AI

最近 Ayende Rahien 在一篇博客文章中透露他们刚刚对少数外部人员发布了 RavenDB 3.0 alpha 预览版。他表示:在过去 18 个月左右的时间里我们一直在研发 RavenDB 3.0,该版本中的某些部分实际上从 2011 年就开始研发了,只不过一直到现在才真正发布到产品中。

对于新版本中的主要亮点,Ayende Rahien 首先谈到的是索引,他说:在提高索引性能方面我们做了大量的工作,但是实际上这些都是次要的。在这个版本中我们真正关注的东西是操作索引的问题。

在内部我们不再使用索引名称。这意味着我们能做一些愚蠢的事情,例如实现异步索引删除。之前有大量索引(特别是 map/reduce 或者有 LoadDocument 调用的索引)的用户发现删除一个索引可能会花费相当长的时间。但是基于现在的实现方式,我们能够立即删除索引,实际上是在后台做清理。

用户碰到的另一个操作问题是新索引的引入。如果要引入的索引仅仅覆盖了一个很大数据库的一小部分,那么问题尤其严重,创建过程通常会花费很长的时间。这是因为必须要遍历完数据库中的所有文档才行。我们在新版本中做了一些优化,只需要处理相关的文档,速度比以前快多了。

新索引在引入的时候会和其他正在运行的索引完全分离,你不需要处理新索引会减缓其他索引的问题。同时在这种方式下大的删除也不再会影响索引的性能,因为我们现在能够更好地处理交叉。

此外,我们还提供了更好的报告,你能够清楚现在正在对哪些内容进行索引,能够看见索引正在做什么,以及相应的操作。

从开发的角度来看,我们还添加了一些非常好的东西,包括索引附件的能力、在索引代码中添加一些更好的情景感知等。

接下来 Ayende Rahien 介绍了 RavenFS。他认为 RavenDB 的附件并不是很完美,有很多想要使用附件的用户发现他们无法看到附件,也没法以有意义的方式搜索附件。更重要的是,附件有一些限制,因为按照他们的预期附件是相对较小的。对于那些期望获得更好服务的用户而言,RavenFS 就是答案。

RavenFS 是一个复制文件系统,它支持非常大的文件,同时还支持使用和管理它们所需要的所有设施。我们很明确地将它设计为一个地理分布式系统,对于那些需要共享非常大且会经常变化的文件的系统而言,它能够大幅降低网络负载。

在即将举行的RavenDB大会上我有一个主题演讲,那时候我会对 RavenFS 进行详细的介绍。我认为它非常酷,同时也有一些非常好的用例,在过去的两年间已经有一些客户在产品环境中使用它了,所以我们已经有一些非常好的经验。

Ayende Rahien 表示对于使用 RavenDB 的用户而言一个完整功能的 JVM 客户端将为他们开辟更多的战线。现在已经有一些用户在使用该 API 构建应用程序了。在 3.0 交付之后他们还打算提供更多针对其他平台的客户端。

谈到 RavenDB 3.0 中的内部变化,Ayende Rahien 表示:

实际上我们在内部做了很多变化。但是其中最重要的一个变化是我们现在将 RavenDB 托管在了 OWIN 和 Web API 之上。对我们自己的 HTTP 服务器的改变已经完成,这是为了帮助用户有更好的基础去理解 RavenDB 内部的工作原理,同时也为了鼓励捐助。它还允许我们做一些非常好的事情,例如有一个端点记载一台 RavenDB 服务器中的所有端点。

另一个重要的变化是我们正在远离 Silverlight Studio,取而代之的是一个崭新的 HTML5 Studio。这非常令人兴奋,特别是整体性能以及系统的响应能力变得非常好。

在新版本中还有一个新的存储引擎 Voron,事实上它还是一种新的数据存储方式,RavenDB 就使用它存储事务性数据。该引擎并没有被限制为 RavenDB 现在需要做的事情,它可以做更多的事情。RavenDB 3.0 中已经有了在 Voron 上运行的选项。同时 Ayende Rahien 还表示他们使用整个 RavenDB 测试套件(有超过 3 千个测试)对 Voron 进行了测试,所有的测试均成功了。

最后 Ayende Rahien 谈到了一些运维方面的事情:

我们关闭了性能计数器,因为它会引发无休止的运维问题(损坏的计数器、权限问题等),取而代之的是一个内部的度量类库。因为是内部的,所以我们能够向系统中添加更多更有意义的度量标准。

我们有新的端点暴露更多的内部状态。我们改进了定期备份支持,让它更好用——现在能定义每周全部导出或者每天定期导出。对于运维人员来说新版本有很多非常好的功能可以让他们洞悉系统当前的运行情况。

语言 & 开发架构AI