自从 2015 年大数据的崛起,列式存储就一直不断地出现在我们的耳旁,我们经常会听到有人说 HBase 采用列式存储查询性能提升了不止 100 倍;Cassandra 利用列式存储保障了亿级数据秒级查询和更新;列式存储为大数据领域 TB 甚至 PB 级别数据的实时查询和更新都提供了解决方案。列出存储这么牛,那么到底什么是列式存储?他和传统行式存储有啥差别?接下来就为大家揭开列式存储的“神秘面纱”。讲师介绍王磊,现任国内某知名互联网公司大数据架构师。《offer 来了:Java 面试核心知识点精讲(原理篇)》《offer 来了:Java 面试核心知识点精讲(架构篇)》作者。有十余年丰富的物联网及大数据研发和技术架构经验,对物联网及大数据的原理和技术实现,有深刻理解。长期从事海外项目的研发和交付工作,对异地多活数据中心的建设及高可用、高并发系统的设计,有丰富的实战经验。
精选留言(13)
作者回复: 可能因为关系型数据库最初设计的时候没有海量数据存储压力的需求,另外关系数据模型设计是基于行来设计的,所以很自然使用了行存储模式吧。
作者回复: 索引我们可以简单的理解为记录了数据在磁盘上的存储位置,具体存取数据还是要进行磁盘寻址的,因此还会是列存储快,当然前提是两者都有索引。一般行存储索引支持类型多,比如btree ,hash等,列索性以Hash为主。
老师在视频中没有给出具体例子,所以这块不是很理解。
如何做到高效新增?
作者回复: 列族之间的关系不同数据库实现不一样,多个列族也只是一个思路,而不是一个实现。如果感兴趣我的offer来了框架篇对各种数据库有介绍。
作者回复: 1.一般数据库设计每个记录会有一个版本号
2.如你所说确实是有空间的"浪费",但是一方面我们基于版本号可以查询历史任何状态的数据,另外以空间换时间是大数据领悟的常用解决方案!
作者回复: 有,在几百tb的数据上优势依然明显
作者回复: 从上层sql来看是关联,从数据库底层来看还是要分别查找,然后做过滤和join的。具体快速定位不同索引针对不同数据结构有不同的优化。
列式存储快的依据是:磁盘顺序存储性能高+数据关联性好压缩比大
作者回复: ACID特性是数据库实现的,和列存储关系不大。现在大部分列数据库不支持ACID是因为在亿级数据中实现ACID成本太高,收益不大的原因。
作者回复: 这种方式比行存储多长磁盘转动寻道快多了,具体优化不同数据库不一样。