我们刚刚发布了 RavenDB 3.0 的 build 3785。此构建有相当多的更改(有关完整的详细信息, 请参阅拉取请求 )。
此版本包括大约 3 个月的错误修复、性能改进等。几周以来,我们一直在自己的系统以及多个现场制作网站上对此进行测试,结果令人鼓舞。
主要变化
- Voron &map/reduce 优化。我们做了主要工作来优化 RavenDB 如何在 Voron 上使用 map/reduce。因此,Voron 上的 map/reduce 性能得到了极大的提高。但是, 这需要在首次启动时执行迁移步骤 。如果您有一个使用 Voron 的大型 RavenDB 数据库,并且您正在大量使用 map/reduce,请考虑到在第一次启动时,RavenDB 将需要执行内部迁移,这可能需要一段时间。
- 减少查询的 Lucene 和内存分配。我们 大大 减少了为每个查询分配的内存量,并显着提高了查询的性能。
改进
- 许多小的性能优化、内存分配减少、对象池等。公共代码路径上的内存分配大幅减少。
- 更好地处理 websockets 中的缓冲区分配,减少内存碎片。
- 更好地处理索引内的 Take() / Skip()。
- 一次只允许单个索引使用快速预计算优化(如果同时更改多个中型索引,则减少内存使用)。
- 更好地处理并发添加多个索引到大型数据库,现在将在同一组索引批次中运行,而不是每个都有自己的。
- 使用本机调用重新实现内存统计检查以避免昂贵的分配。
- 索引损坏时提供更详细的信息。
- 添加用于停止/启动的端点只会减少工作量。
- 对批量大小的大规模更改不那么激进,更加谨慎会让我们的性能稍微慢一点,但在负载下系统更稳定。
- 大量优化 Voron 恢复代码以支持大型数据库上的慢速 I/O 系统。
- 允许将单个数据库标记为开发/暂存/生产。
- 更好地处理 Lucene 文件使用,在查询索引时使用 mmap 避免 所有 分配。 显着 改进内存使用和查询速度。
Bug修复
- 如果它已经存在,请不要更新并排索引。
- 允许在并排索引仍在运行时更新它。
- 使用“new string[0]”修复 .NET 4.6 上的索引编译错误。
- 修复了在使用动态查询时强行删除索引定义时的 NRE。
- 修复了处置期间的错误处理,导致异常逃离线程边界和崩溃。
- 修复了嵌入式数据库的 FIPS 许可问题。
- 管理日志未捕获受 IsDebugEnabled 语句保护的日志
- 修复了导致我们尝试从关闭的句柄中读取的终结器使用错误。
- 在创建 map-reduce 索引并禁用索引时防止损坏的索引警告。
- 防止代码尝试使用已处置的内部事务。
- 已安装的修复程序 - 在选择使用现有网站时检查并撤销 URL 保留选项。
- 使用到期包关闭数据库时正确处理计时器实例。
- 防止错误加载 ICSharpCode.NRefactory 终止 RavenDB 客户端启动。