导入
写入路径
探索Cassandra的写入路径,以及其内存和磁盘上的存储结构与处理流程,这些机制共同实现了极快的读写性能。
...
Multi-datacenter集群的高层写入路径
...
副本上的写入路径
...
针对courses表的多个SSTable在合并过程中生成包含合并记录的新SSTable
合并策略
| 合并策略 | 描述 | 适用场景 |
|---|---|---|
| SizeTieredCompactionStrategy (STCS) - 默认策略 | 当存在多个大小相近的SSTable时触发合并。 | 通用工作负载、写入密集型工作负载 |
| LeveledCompactionStrategy (LCS) | 将固定且较小尺寸的SSTable分组到不同层级中,每一层的SSTable数量是前一层的十倍。同一层内的SSTable保证无重叠。存在数据重叠的SSTable会被合并。 | 读取密集型工作负载 |
| TimeWindowCompactionStrategy (TWCS) | 在配置的时间窗口结束时,使用STCS将所有SSTable合并为一个。 | 时间序列数据 |
...
SSTable组件分布在堆外内存和磁盘上
| compressor_name | 用于分块压缩的算法:LZ4Compressor、ZstdCompressor、SnappyCompressor 或 DeflateCompressor |
|---|---|
| options | 压缩算法的附加选项 |
| chunk_length_in_kb | 用户可配置的块大小,默认为16KiB。未压缩的数据文件被划分为固定大小的块,每个块独立压缩。压缩后的块长度可能不同 |
| data_length | 未压缩数据的总长度 |
| chunks_offsets | 压缩后块在 compressed data.db 文件中的偏移列表。要从未压缩文件的位置 p 读取数据,需将包含该位置数据的压缩块加载到内存并解压。该压缩块起始位置为 chunks_offsets[p/chunk_length_in_kb] |
...
Index.db 列出SSTable中所有分区的键及其位置等信息
...
Summary.db 是一个堆外内存中的内存结构,存储了Index.db文件中每128个条目的信息
...
Filter.db 是一种概率性数据结构,用于判断某个分区键是否“不存在”或“可能存在于”SSTable中
...
SSTable组件