学习 Cassandra(七):SLM-Tree

SLM-Tree(Log Structured Merge Tree 日志结构合并树),是 Apache HBase 和 Apache Cassandra 使用的数据结构

步骤

SLM-Tree 核心思想是:增量数据保存在内存中(优化写性能),在达到阈值时写入到硬盘,硬盘中的历史数据定期执行合并操作(优化读性能)

对于 Cassandra 来说,数据写入步骤如下:

  1. 写入硬盘 commit log 中。commit log 作用在于崩溃恢复,保证了在系统崩溃之后,通过重放 commit log 恢复数据

  2. 写入内存 memtable 中

  3. 在 memtable 达到阈值时,持久化到硬盘为 SSTable。SSTable 是一个不可变有序的数据结构

  4. 在一定周期内,合并 SSTable

memtable 配置项

memtable_allocation_type

配置 Cassandra 分配和管理 memtable 内存方式。选项:

  • heap_buffers JVM 堆内 NIO Buffer
  • offheap_buffers 堆外 NIO Buffer
  • offheap_objects 堆外对象

默认值为:heap_buffers

memtable_heap_space_in_mb

memtable 总共允许的使用的 JVM 堆内内存大小。

默认值为:2048,即 2G

memtable_offheap_space_in_mb

memtable 总共允许的使用的堆外内存大小。

默认值为:2048,即 2G

memtable_flush_writers

memtable 刷写到硬盘的线程数

默认值:磁盘数和线程数较小值,最小为 2 最大为 8

memtable_cleanup_threshold

达到全部 memtable 空间的比例,触发刷写到硬盘

默认值:1/(memtableflushwriters + 1)

SSTable 合并策略

LeveledCompactionStrategy (LCS)

// TODO

SizeTieredCompactionStrategy (STCS)

// TODO

TimeWindowCompactionStrategy (TWCS)

// TODO

参考