Scylla开源3.0发布,号称业界性能最高的NoSQL数据库

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

Scylla开源3.0发布,号称业界性能最高的NoSQL数据库

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

物化视图

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

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

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

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

Scylla开源3.0发布,号称业界性能最高的NoSQL数据库

全球二级指数

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

Scylla开源3.0发布,号称业界性能最高的NoSQL数据库

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

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

  • 结果是分页和可自定义的
  • 支持过滤以缩小结果集
  • 键而不是数据被非规范化支持比物化视图更多的通用用例

允许过滤

允许过滤是一种进行更复杂查询的方法,只返回匹配结果的子集。由于过滤是在服务器上完成的,因此此功能还可以减少群集与应用程序之间通过网络传输的数据量。这种过滤可能会对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中的另一个生产就绪功能。

Scylla开源3.0发布,号称业界性能最高的NoSQL数据库

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

Hinted Handoff带来以下好处:

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

完整的多分区扫描改进

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

Scylla开源3.0发布,号称业界性能最高的NoSQL数据库

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

好处包括:

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

流改进

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

Scylla开源3.0发布,号称业界性能最高的NoSQL数据库

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

Scylla开源3.0发布,号称业界性能最高的NoSQL数据库

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

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

相关推荐