APP下载

Scylla开源3.0释出 号称业界效能最高的NoSQL数据库

消息来源:baojiabao.com 作者: 发布时间:2024-04-26

报价宝综合消息Scylla开源3.0释出 号称业界效能最高的NoSQL数据库

Scylla是一个开源的NoSQL数据库,提供Apache Cassandra的水平横向扩充套件和容错能力,但吞吐量提高了10倍,并且一致,低的单位延迟。Scylla采用C ++技术从零开始实现,可以显著减少你需要的数据库节点数量,并自动优化动态工作负载和各种硬件组合。

Scylla开源3.0释出,推出了一系列丰富的新功能,可以提高查询效率,减少储存需求,缩短维护时间,提高整体数据库效能。Scylla号称是业界效能最高的NoSQL数据库,现在包含超出Apache Cassandra功能的生产就绪功能。

物化检视

当应用程序维护具有不同组织的相同资料的多个表时,“物化检视”会自动执行繁琐且低效的繁琐工作。资料分为可通过分割槽键找到的分割槽。有时,应用程序需要按另一列的值查询分割槽。在不扫描所有分割槽的情况下有效执行此操作需要建立索引。

多年来,人们一直在使用物化检视,也称为非规范化,作为客户端实现。以前,应用程序维护了两个或多个检视以及两个或多个具有相同资料但在不同分割槽键下的单独表。每次应用程序想要写入资料时,都需要写入两个表,并且从所需的表中直接(并且有效地)完成读取。但是,确保两个或多个检视中的资料之间的任何级别的一致性都需要复杂和缓慢的应用程序逻辑。

Scylla的物化检视功能将这种复杂性从应用程序移到服务器中。实施更快(减少到应用程序的往返次数)并且更可靠。这种方法使应用程序更容易开始在其资料中使用多个检视。应用程序只声明了其他检视,Scylla建立了新的视图表,并且在对基表的每次更新时,视图表也会自动更新。写入仅在基表上直接执行,并自动传播到视图表。读取直接进入视图表。

像往常一样,Scylla版本与功能和CQL语法相容——与Apache Cassandra版本(它仍然处于实验模式)。

全球二级指数

Scylla开源3.0引入了可以扩充套件到任何规模的分散式丛集的生产就绪全域性二级索引——与Apache Cassandra采用的本地索引方法不同。辅助索引使用底层的物化检视索引,以使索引独立于丛集中的节点数量。二级索引(大部分)对应用程序是透明的。查询可以访问表中的所有列,可以在不更改应用程序的情况下新增和删除索引。辅助索引也可以比物化检视具有更少的储存开销,因为辅助索引只需要复制索引的列和主键,而不是像物化检视那样复制查询的列。出于同样的原因,使用辅助索引可以更高效地进行更新,因为只有对主键和索引列的更改才会导致索引检视中的更新。对于物化检视,对检视中显示的任何列的更新都需要更新后备检视。

与往常一样,是否使用二级索引或物化检视的决定实际上取决于你的应用程序的要求。如果需要最高效能并且可能查询特定的列集,则应使用物化检视。但是,如果应用程序需要查询不同的列集,则二级索引是更好的选择,因为可以根据应用程序需要以较少的储存开销新增和删除它们。

全域性二级索引可最大限度地减少从数据库中检索的资料量,从而提供许多好处:

结果是分页和可自定义的支援过滤以缩小结果集键而不是资料被非规范化支援比物化检视更多的通用用例

允许过滤

允许过滤是一种进行更复杂查询的方法,只返回匹配结果的子集。由于过滤是在服务器上完成的,因此此功能还可以减少群集与应用程序之间通过网络传输的资料量。这种过滤可能会对Scylla丛集产生处理影响。例如,查询可能要求数据库在返回响应之前过滤非常大的资料集。预设情况下,阻止执行此类查询,返回以下讯息:

Bad Request: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance.

未经许可的查询包括哪些限制:

非分割槽键字段不是字首的主键部分除了等式关系之外的分割槽键(尽管你可以将SI与ALLOW FILTERING结合起来以支援不等式;> =或具有范围限制的金钥,然后是其他条件但是,在某些情况下(通常由于资料建模决策),应用程序需要进行违反这些基本规则的查询。从Scylla开源3.0开始,查询可以附加ALLOW FILTERING关键字以绕过此限制并利用服务器端过滤。

过滤的好处包括:

Cassandra查询相容性Spark-Cassandra联结器查询相容性查询遗留资料集的灵活性

新档案格式

Scylla开源3.0引入了对更高效能储存格式(SSTable)的支援,该格式不仅与Apache Cassandra 3.x相容,而且还将储存容量减少了3倍。较旧的2.x格式用于复制磁盘上每个单元格旁边的列名称。新格式消除了重复,列名称在架构中储存一次。

新引入的格式与Apache Cassandra 3.x使用的格式相同,同时与先前的Scylla SSTable格式保持向后相容。Scylla开源3.0的新部署将自动使用新格式,而现有档案保持不变。

这种新的储存格式带来了重要的好处,包括:

迁移时可以读取现有的Apache Cassandra 3.x档案比以前的版本更快储存占用空间减少高达66%,具体取决于使用的资料模型范围删除支援

Hinted Handoff

Hinted Handoff旨在帮助任何单个节点由于大量写入负载,网络情况,硬件故障或任何其他因素而暂时无响应。在发生短期网络问题或节点重启时,Hinted Handoff也有所帮助,减少了计划修复的时间,从而提高了分散式部署的整体效能。最初作为Scylla开源2.1中的实验性特性引入,Hinted Handoff是Scylla开源3.0中的另一个生产就绪功能。

从技术上讲,‘Hint‘是协调器持有的写请求的记录,直到无响应的副本节点重新联机。当一个写入被认为成功但一个或多个副本节点无法确认它时,Scylla会写一个提示,当它们恢复时会重放这些节点。一旦节点再次可用,则提示中的写请求资料被写入副本节点。

Hinted Handoff带来以下好处:

最小化节点关闭时节点中资料之间的差异 - 无论是计划升级还是常见的间歇性网络问题。减少维修期间传输的资料量。减少校验和不匹配的可能性(在读取修复期间),从而改善总体延迟。

完整的多分割槽扫描改进

Scylla开源3.0建立在早期改进的基础上,通过扩充套件有状态分页来支援范围扫描。与读取单个分割槽或不同分割槽列表的其他分割槽查询相反,范围扫描读取属于客户端指定范围的所有分割槽。由于无法预先确定给定范围内的分割槽的精确数量和标识,因此查询必须从包含该范围的资料的所有节点读取资料。

为了改进范围扫描分页,Scylla开源3.0引入了一种新的控制算法,用于读取属于所有分片范围内的所有资料,这些分片在每个分片上快取中间流,并将分页查询引导到先前使用的匹配快取结果。新算法本质上是一个多路复用器,它将受影响的分片上开启的阅读器输出组合成一个流。当分割槽扫描尝试从分片中读取时,将按需建立读取器。为确保读取不会停止,算法使用缓冲和预读。

好处包括:

提高了系统响应能力范围扫描的吞吐量提高了30%从磁盘读取的资料量减少多达40%磁盘操作降低了75%

流改进

在节点恢复期间使用流处理来使用从执行节点复制的资料填充已还原的节点。Scylla流模型在一个节点上读取资料,将其传输到另一个节点,然后写入磁盘。发件人建立SSTable读取器以从磁盘上的SSTable读取行并通过网络传送它们。接收器从网络接收行并将它们写入memtable。memtable中的行会定期重新整理到SSTable中,或者当memtable满时。

在Scylla开源3.0中,节点之间的流同步绕过了memtables,大大减少了修复,新增和删除节点的时间。当丛集拓扑发生变化时,这些改进可带来更高的效能,将流带宽提高多达240%,并将执行“重建”操作所需的时间缩短70%。

Scylla的流改进提供了以下好处:

降低内存消耗。储存的内存可用于处理CQL工作负载。更好的CPU利用率。没有CPU周期用于插入和排序memtables。更大的SSTables和更少的压缩。

2019-01-19 13:37:00

相关文章