1、行存储与列存储(参考自http://storage.chinabyte.com/491/12390991.shtml)
1)行存储:如MongoDB使用文档型的行存储。
特征:将一行的所有列聚集存储。
优点:写入(一行)是一次完成,且可以更好地保证数据的完整性。
缺点:数据读取时,通常需要先将一行完全读出,再在内存中消除不需要的冗余列。
解析一行数据时,需要在多种数据类型间转换,(在数据量大的时候)比较耗CPU,增加解析时间。
2)列存储:如Hadoop的HBase。
特征:每列的全部数据聚集存储。
优点:数据读取时,每次可以读取某列的部分或全部数据(不存在冗余的问题,对大数据应用很有利)。当然,在读取多列时需要多次移动和定位磁头。
同列的数据都是同质的,更容易解析(更有利于完整性要求不高的大数据分析)。另外,也更容易设计好的索引、压缩/解压算法。
适合频繁读取单列或少数几列数据的应用。比如,查询密集型应用(如在线分析、数据挖掘)一般只关心少数几个字段,此时列存储方式的读取可以大大减少I/O。
缺点:写入次数明显比行存储多,磁头需要多次移动和定位,消耗更多时间。
改进:安装多块硬盘,多线程并行读写多个列;写过程的完整性问题可以使用回滚和校验机制改进。
不断学习中。。。