Apache Cassandra 4.1的新特性之一支持可选memtable的实现,这是在增强提案#11(CEP-11)中提出的。这个特性使开发人员能够实现新的memtable方案,同时使用户可以为数据库每张表选择memtable的实现和配置。这是由CREATE TABLE和ALTER TABLE语句中新的memtable选项实现的,并在cassandra.yaml中定义了很多memtable的配置选项。例如:
CREATE TABLE heavy_use … WITH memtable = 'sharded';
其中 "shared"在cassandra.yaml中配置为:
Memtable:
Configurations:
Sharded:
class_name: ShardedSkipListMemtable
Parameters:
shards: 32
serialize_writes: false
Apache Cassandra 4.1附带了一个用于概念验证的可选memtable实现,这是个sharded skip-list的方案,它将memtable拆分成若干分片,这些分片基本覆盖了节点所包含的token空间。这让不同分片的写入可以独立,并在修改数据结构的过程中不会阻塞,众所周知,这比常见Cassandra工作负载的memtable性能更高。下面例子展示了如何选择这种实现方式。它有两个参数:
shards— 拆分memtable的分片数量。serialize_writes- 修改时是否对memtable分片加锁。
加锁是可选的。这可以避免当拥塞时,无锁多个并发修改同一个分区而产生冲突,从而浪费处理时间和内存空间。加锁将导致较低的峰值写入吞吐量,但可能会改善长期的持续吞吐量,因为在每个刷新的SSTable中存储了更多的信息,并将更多的CPU时间用于压缩。下表展示了当写入100GB的键值数据时的平均吞吐量,其中有10%的读请求,以及给定的百分比,同一行的访问命中率。

这个平均吞吐量的测试使用了fallout脚本,你可以在这里找到。
该项目将基于这个特性发展,在不久的将来,该API将被用于实现两个令人兴奋的开发:
- 英特尔的持久性内存memtable(CASSANDRA-13981),这是一个仅有memtable的存储系统,在使用合适的硬件时有望实现极低的延迟。
- 基于Trie的memtable(CEP-19,CASSANDRA-17240),保证了在性能和垃圾回收开销方面有明显的改善。
原文标题:Apache Cassandra 4.1 Features: Pluggable Memtable Implementations
原文作者:Branimir Lambov
原文地址:https://cassandra.apache.org/_/blog/Apache-Cassandra-4.1-Features-Pluggable-Memtable-Implementations.html




