开源 NoSQL 数据库 Scylla Open Source 发布第 3 个主要版本更新,这个版本提高了查询效率并减少存储的容量需求,尽可能降低维护时间,同时也还加强了整体数据库的执行效率,官方表示,Scylla 是目前性能***的 NoSQL 数据库,包括布署于生产环境的 Apache Cassandra 都不是对手。
2015 年发展至今,以 C++ 从头打造的开源 NoSQL 数据库 Scylla,其基础设计与 Apache Cassandra 数据库兼容,并提供相同的横向扩展和容错能力,但官方提到,其吞吐量可以是 Apache Cassandra 的 10 倍,并维持一致且个位数毫秒的延迟时间。
Scylla Open Source 3.0 加入了实例化视图(Materialized Views)功能,将不同磁区找寻数据的复杂性,从应用程序移到服务器上,因此实例将会更快也更可靠,这个方法让应用程序更容易对数据进行多重审查。实例化视图让应用程序只需要声明额外的视图,Scylla 会产生新的视图表格,并且在每一次更新基础表格(Base table)时,视图表格也会随之自动更新,写入动作仅直接发生在基础表格上,而读取动作则是对视图表格。官方提到,一如往常的 Scylla 与 Apache Cassandra 版本兼容,包括这项功能更新与 CQL 语法。
另外,Scylla Open Source 3.0 也添加了已可用于生产的全局辅助索引(Global Secondary Indexes)功能,能够扩展至任何大小的分布式集群。全局辅助索引利用低端的实例化视图索引,以使索引不相依于集群节点数。而辅助索引对大部分应用程序来说是可见的,因此查询能够访问表格中的所有字段,用户可以在不更改应用程序的情况下,添加或是删除索引。
辅助索引能够比实例化视图索引花费较少的存储成本,因为辅助索引只要复制索引的字段与主键值,而不像是实例化视图索引必须复制查询的字段,因此同样的,辅助索引也能够更高性能地执行更新,因为唯有主键值和索引列字段的改变,才能触发索引视图中的更新。
官方提到,辅助索引或实例化视图的使用时机,取决于应用程序的需求,当开发者要求高性能并且需要对特定字段集进行查询,则需要使用实例化视图。然而,如果应用程序需要查询不同的字段集,辅助索引就会是更好的选择,因为可以根据应用程序的需求,以较少的存储成本移除和增加查询索引。
这个版本还支持了新的高性能存储格式 SSTable,该格式与 Apache Cassandra 3.x 兼容,同时也与先前 Scylla 版本向后兼容,而且少掉了复制作业中不需要的重复数据,能最多减少 3 倍存储容量。官方提到,新布署的 Scylla Open Source 3.0 数据库将自动使用新格式,而既保存案不受影响。
另外,Hinted Handoff 功能则可以帮助节点因大量写入负载、硬件故障或是任何因素造成暂时无法回应的情况,当发生短暂网络问题或是节点重启的时候,Hinted Handoff 将能帮助减少系统修复的时间,进而提升分布式布署的整体性能。
官方解释,提示(Hint)代表着写入请求的纪录,这分纪录会由协调器留存,直到故障节点再次连上线。而且当写入成功但一个或多个副本皆无法确认的时候,Scylla 会也会产生一个提示,在这些节点恢复时,重新写入数据。这个功能在 Scylla Open Source 2.1 中属实验性质,而在 Scylla Open Source 3.0 终于正式加入了。
在整体执行性能方面,Scylla Open Source 3.0 也改进了多重磁区扫描,Scylla 通过扩展有状态分页以支持范围扫描,在新版本中加入了新的控制算法,加速从所有分片读取范围中的所有数据,这些分片缓存了分片上的中介串流,并将分页查询引导到先前使用的配对缓存结果上。简单来说,新算法的本质是一个多工器,在分片上结合读取器输出到单一串流中。