目前大数据存储有两种方案可供选择:行存储(Row-Based)和列存储(Column-Based)。

Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。

列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。

在数据写入上的对比

  • 列式存储将每一列的数据组织在一起。行存储的写入是一次完成。如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,因此可以确定数据的完整性。
  • 列存储由于需要把一行记录拆分成单列保存,写入次数明显比行存储多,再加上磁头需要在盘片上移动和定位花费的时间,实际时间消耗会更大。所以,行存储在写入上占有很大的优势。
  • 还有数据修改,这实际也是一次写入过程。不同的是,数据修改是对磁盘上的记录做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。所以,数据修改也是以行存储占优。

在数据读取上的对比

  • 数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。
  • 列存储每次读取的数据是集合的一段或者全部,不存在冗余性问题。
  • 两种存储的数据分布。由于列存储的每一列数据类型是同质的,不存在二义性问题。

两种存储格式都有各自的优缺点:

  • 行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。
  • 列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域。

列存储的适用场景

  • 一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只关心少数几个数据列。
  • 很多列式数据库还支持列族(column group,Bigtable系统中称为locality group),即将多个经常一起访问的数据列的各个值存放在一起。如果读取的数据列属于相同的列族,列式数据库可以从相同的地方一次性读取多个数据列的值,避免了多个数据列的合并。列族是一种行列混合存储模式,这种模式能够同时满足OLTP和OLAP的查询需求。
  • 由于同一个数据列的数据重复度很高,因此,列式数据库压缩时有很大的优势。

传统行式数据库的特性如下:

  • 数据是按行存储的。
  • 没有索引的查询使用大量I/O。比如一般的数据库表都会建立索引,通过索引加快查询效率。
  • 建立索引和物化视图需要花费大量的时间和资源。
  • 面对查询需求,数据库必须被大量膨胀才能满足需求。

列式数据库的特性如下:

  • 数据按列存储,即每一列单独存放。
  • 数据即索引。
  • 只访问查询涉及的列,可以大量降低系统I/O。
  • 每一列由一个线程来处理,即查询的并发处理性能高。
  • 数据类型一致,数据特征相似,可以高效压缩。比如有增量压缩、前缀压缩算法都是基于列存储的类型定制的,所以可以大幅度提高压缩比,有利于存储和网络输出数据带宽的消耗。

行存储(Row-Based)和列存储(Column-Based)相关推荐

  1. 行存储索引改换成列存储索引_列存储索引增强功能–数据压缩,估计和节省

    行存储索引改换成列存储索引 Data compression is required to reduce database storage size as well as improving perf ...

  2. 行存储索引改换成列存储索引_如何使用列存储索引来改善数据仓库登台环境

    行存储索引改换成列存储索引 My team and I were recently tasked with refactoring older data marts, particularly tho ...

  3. 行存储索引改换成列存储索引_索引策略–第2部分–内存优化表和列存储索引

    行存储索引改换成列存储索引 In the first part we started discussion about choosing the right table structure and d ...

  4. 修改所有列_哪些数据库是行存储?哪些是列存储?有什么区别?

    大多数数据库系统存储一组数据记录,这些记录由表中的列和行组成.字段是列和行的交集:某种类型的单个值. 属于同一列的字段通常具有相同的数据类型.例如,如果我们定义了一个包含用户数据的表,那么所有的用户名 ...

  5. 哪些数据库是行存储?哪些是列存储?有什么区别?

    导读:本文带你了解面向列与面向行的数据库. 作者:Alex Petrov 来源:大数据DT(ID:hzdashuju) 大多数数据库系统存储一组数据记录,这些记录由表中的列和行组成.字段是列和行的交集 ...

  6. 一篇文章告诉你哪些数据库是行存储?哪些是列存储?有什么区别?

    导读:本文带你了解面向列与面向行的数据库. 作者:Alex Petrov 来源:大数据DT(ID:hzdashuju) 大多数数据库系统存储一组数据记录,这些记录由表中的列和行组成.字段是列和行的交集 ...

  7. 整形二维数组中求最大值Max,行(row)和列(colum)。

    已知题目中给出二维数组是4行4列.元素分别为:1,2,18,4,9,8,7,11,-10,10,-5,2,15,4,8,9. #include<stdio.h>               ...

  8. 行存储和列存储小介绍

    .定义 1.1定义 Sybase在2004年左右就推出了列存储的Sybase IQ数据库系统,主要用于在线分析.数据挖掘等查询密集型应用.列存储,缩写为DSM,相对于NSM(N-ary storage ...

  9. 数据库-行存储及列存储区别

    参考:https://blog.csdn.net/Xingxinxinxin/article/details/80939277 目录 概述 什么是列存储? 在数据写入上的对比 在数据读取上的对比 优缺 ...

  10. 数据库:行存储、列存储 利弊分析

    文章来源:(http://www.infoq.com/cn/articles/bigdata-store-choose) PS:可以看一下文章中的概念,后面的结论部分可能存在一些问题,这里只是转载,如 ...

最新文章

  1. (运维)VMware-vCenter-Server-Appliance-5.0安装与部署
  2. mysql-5.7.10产生的日志时间与系统时间不一致
  3. Linux Cache 机制探究
  4. 十、 RDD编程和Spark SQL
  5. spd耗材管理流程图_国药器械山东公司助力济宁医学院附属医院SPD项目成功启动...
  6. 熟悉linux系统内核,[科普] Linux 的内核与 Linux 系统之间的关系
  7. java安全级别过高_Java应该是更高级别还是更低级别?
  8. 智能语音技术新发展与发展趋势
  9. note_maven的pom.xml部分配置说明
  10. hibernate 联合主键
  11. nginx服务企业应用
  12. CentOS 6.7安装Spark 1.5.2
  13. Android软件测试的日志文件问题
  14. 人工智能动物识别系统C语言代码,人工智能作业动物识别系统.doc
  15. C语言从入门到放弃2022年8月2号
  16. 全面剖析雅虎助手以及网络实名的流氓行径(2)
  17. java模板beetl引擎,Beetl java模板引擎
  18. PostgreSQL的XML类型
  19. 按当前位置与其它位置远近排序,按经纬度计算
  20. 【EhCache: 一款Java的进程内缓存框架】EhCache 是什么、代码实战、版本3的改进

热门文章

  1. 已解决ERROR in static/js/vendor.4925c830bef16dced0c0.js from UglifyJs Unexpected token: name (i)
  2. python中国社区-Python中文社区名称的统一
  3. [FirefoxOS_开发]Firefox OS Quick Start
  4. 汇佳学校新推“未来艺术大师”项目 实现学术艺术双赢
  5. hadoop配置eclipse的开发环境
  6. 不用身份证刷手就能坐飞机,掌静脉还能被应用在哪里领域?
  7. Typora高亮颜色设置
  8. 心得 ~ 使用 zlib库 解压缩 zip文件
  9. android移动拼图小游戏的图片,利用ViewDragHelper轻松实现Android拼图游戏
  10. 计算机网络波动大,网络不稳定怎么办,小编教你电脑网络不稳定怎么办