Cassandra如何针对可变列结构及异构列优化内部存储?
Cassandra 针对列存储字节对齐问题的内部优化方案
紧凑变长编码
Cassandra 不为列分配固定大小的存储空间,所有列的名称、类型、值都采用变长编码:- 字符串类型会先存储实际长度,再存储字节内容;数值类型会根据值的大小选择最小的编码长度(例如小整数用1字节而非4字节)。
- 行内的列数据会被紧凑打包,完全没有为字节对齐添加的填充字节。
有序存储结构规避对齐需求
- 数据按分区键划分到SSTable中,每个SSTable内的行按行键排序,行内的列按列名(或集群列)排序。这种有序性让数据可以连续写入,不需要为了对齐插入空字节。
- SSTable基于BigTable格式设计,每个列的元数据(列名、时间戳、值)都紧凑排列,没有冗余的对齐空间。
类型专属序列化器处理
每种数据类型都对应专门的序列化器,比如BytesType、Int32Type:- 序列化器会将数据转换为最紧凑的字节流,例如布尔值仅用1字节存储,UUID用固定16字节无额外填充。
- 写入时直接生成紧凑字节流,读取时反向解析,从根本上避免了固定大小内存块或磁盘块的对齐限制。
磁盘块对齐与偏移定位
虽然Cassandra将磁盘数据组织为固定大小的块(默认64KB),但块内的列数据依然保持紧凑:- 块对齐是为了优化磁盘IO性能,而非列数据本身的对齐需求。块内的变长数据通过偏移量来定位,不需要为每个列填充到固定长度。
内容的提问来源于stack exchange,提问作者olaf
相关产品推荐
相关产品推荐

