知识卡片

行存储与列存储的适用场景是对立的

普通读书笔记卡 · 1666.a

内容

关系数据库按行存储,优势是一次磁盘操作读出一行所有列,也保证同行多列写入的原子性;但只需统计某一列时,行存储要把整行读进内存,浪费大量I/O,列式存储(如HBase)只读需要的那一列,I/O大降,压缩率也从3:1~5:1提升到8:1~30:1。代价是更新多列要做磁盘随机写,效率远低于行存储。发散:这是”读的局部性”和”写的局部性”的对立,也是列式数据库只用于离线分析的原因。

参考来源

- 位置:《从0开始学架构》第19章《16|高性能NoSQL》"列式数据库"一节(源文件:_epub-src/OEBPS/Text/part0018_split_004.html) - 结论依据:原文明确行存储"能够一次性完成对一行中的多个列的写操作,保证了针对行数据写操作的原子性和一致性",列存储"压缩率一般在8:1到30:1左右"(行式为"3:1到5:1"),但"更新多个列时磁盘是随机写操作……列式存储的随机写效率要远远低于行式存储的写效率"。 - 原始内容:能够一次性完成对一行中的多个列的写操作,保证了针对行数据写操作的原子性和一致性……普通的行式数据库一般压缩率在3:1到5:1左右,而列式数据库的压缩率一般在8:1到30:1左右……列式存储的随机写效率要远远低于行式存储的写效率。