之前不是特别明白列式存储和行式存储到底有什么区别,对于忽然蹦出来的BigTable、HBase、Cassandra这些NoSQL数据库凭什么比MySQL集群,Oracle在分析存储上的强大?思来能够这样说说。数据库
A. 存储分布式
传统RDBMS以行单位作数据存储(字段为空则赋值为‘NULL'),列式存储数据库以列为单位作数据存储。以下:spa
对于列式存储来讲,一行数据包含一个列或者多个列,每一个列一单独一个cell来存储数据。而行式存储,则是把一行数据做为一个总体来存储。索引
另一个不得不提的是,列式存储天生就是适合压缩,由于同一列里面的数据类型基本是相同,笔者在以前使用普通的gzip压缩,200MB的字符串数据,通过压缩以后只剩下8MB。固然gzip并不属于增量压缩,咱们能够选择增量压缩的方式来知足一些数据的随机查找。事务
B. 查询ip
从查询来讲,行式存储比较适合随机查询,而且RDBMS大多提供二级索引,在整行数据的读取上,要优于列式存储。可是,行式存储不适合扫描,这意味着要查询一个范围的数据,行式存储须要扫描整个表(由于这些记录不是顺序存储的),在索引创建不当的状况下,查询大表(千万数据)简直是噩梦。字符串
列式存储,最先接触的可能不是所谓的BigTable,大多数之前的数据仓库都是采用列式存储。列式存储通常行KEY,列KEY(不是列值)都是顺序存储,好比我要查询一个时间段里面,某个值的出现频率,我可能只须要涉及到两个列。集群
在分析上,列式存储要优于行式存储,列式存储的数据库通常状况下也强烈建议用户按需查找,而不是整行数据去获取。列式存储在这方面减小了IO的压力。数据类型
C. 结语im
没有说谁比谁更优,在正真实战的状况,考虑实际状况。好比传统的RDBMS提供ACID原子操做和事务,在大多数列式存储数据库上是不具有的,大多数列式存储数据库对分布式支持友好。
须要知道的是,列式存储以及行式存储在查询和存储上的本质,在技术选型上多点筹码。