You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cassandra中SSTable是什么?与关系型表的区别及相关机制问询

Cassandra SSTable相关问题解答

1. SSTable的具体定义是什么?

SSTable全称是Sorted String Table,是Cassandra最核心的持久化存储结构,属于不可变的、有序的键值对存储文件。当内存中的MemTable达到设定阈值触发刷写操作时,就会生成对应SSTable,所有写入的键值数据会按照分区键的字典序排序后存储,写入完成后的SSTable不会再被修改。

2. SSTable与传统关系型数据库中的表有哪些核心差异?

  • 可变性差异:SSTable是不可变结构,写入后不会再做修改,数据更新、删除操作都是通过写入新的SSTable、后续合并(Compaction)时清理旧数据实现;关系型数据库的表是可变结构,支持原地修改、删除数据。
  • 排序逻辑差异:SSTable仅按照分区键做全局有序存储,同一分区的所有数据连续排布,不会默认按其他字段排序;关系型数据表可以通过索引实现多维度的排序、查询。
  • 存储形态差异:Cassandra中一个逻辑表对应多个SSTable文件,同一逻辑表的数据会分散在多个SSTable中;关系型数据库的一个表通常对应一组可原地修改的存储文件,逻辑和物理的对应关系更紧密。
  • 查询逻辑差异:SSTable的查询需要先定位到对应分区,再在有序结构中检索,不支持不带分区键的全表随机查询;关系型数据库的表支持更灵活的查询条件。

3. SSTable是否存储在磁盘上?

是。SSTable是Cassandra的持久化存储结构,生成后就会持久化保存在磁盘上,除非后续Compaction过程中被合并清理。内存中只会缓存SSTable的元数据、热点数据块,完整的SSTable文件均存储在磁盘中。

4. Bloom Filter、Sparse Index与SSTable之间存在怎样的关联?

二者都是SSTable的内置元数据结构,用于加速SSTable的查询效率,避免每次查询都遍历整个SSTable文件:

  • Bloom Filter:每个SSTable对应一个独立的布隆过滤器,存储该SSTable中所有分区键的哈希特征。查询时可以先通过布隆过滤器快速判断某个分区键是否存在于当前SSTable中,如果不存在就直接跳过这个SSTable,大幅减少不必要的磁盘IO。
  • Sparse Index(稀疏索引):每个SSTable的稀疏索引存储了部分分区键到对应数据块在文件中偏移量的映射。因为SSTable是有序结构,只需要每隔一定大小的数据块记录一个索引条目,就可以通过二分查找快速定位到目标分区键所在的数据块位置,不需要存储全量索引,既节省内存也加快了查询速度。

内容的提问来源于stack exchange,提问作者Carole Nash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:27:02