代码编织梦想

01、概述

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

 

02、什么是列存储?

列式存储(column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表:

Ø Row-based storage storesatable in a sequence of rows.

Ø Column-based storage storesatable in a sequence of columns.

从上图可以很清楚地看到,行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了。

03、在数据写入上的对比

1)行存储的写入是一次完成。如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,数据的完整性因此可以确定。

2)列存储由于需要把一行记录拆分成单列保存,写入次数明显比行存储多(意味着磁头调度次数多,而磁头调度是需要时间的,一般在1ms~10ms) ,再加上磁头需要在盘片上移动和定位花费的时间,实际时间消耗会更大。所以,行存储在写入上占有很大的优势。

3)还有数据修改,这实际也是一次写入过程。不同的是,数据修改是对磁盘上的记录做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。所以,数据修改也是以行存储占优。

04、在数据读取上的对比

1)数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。

2)列存储每次读取的数据是集合的一段或者全部,不存在冗余性问题。

3) 两种存储的数据分布。由于列存储的每一列数据类型是同质的,不存在二义性问题。比如说某列数据类型为整型(int),那么它的数据集合一定是整型数据。这种情况使数据解析变得十分容易。相比之下,行存储则要复杂得多,因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间。所以,列存储的解析过程更有利于分析大数据。

4)从数据的压缩以及更性能的读取来对比

 

 

05、优缺点

显而易见,两种存储格式都有各自的优缺点:

1)行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。

2)列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。

两种存储格式各自的特性都决定了它们的使用场景。

06、列存储的适用场景

1)一般来说,一个OLAP类型的查询可能需要访问几百万甚至几十亿个数据行,且该查询往往只关心少数几个数据列。例如,查询今年销量最高的前20个商品,这个查询只关心三个数据列:时间(date)、商品(item)以及销售量(sales amount)。商品的其他数据列,例如商品URL、商品描述、商品所属店铺,等等,对这个查询都是没有意义的。

而列式数据库只需要读取存储着“时间、商品、销量”的数据列,而行式数据库需要读取所有的数据列。因此,列式数据库大大地提高了OLAP大数据量查询的效率

OLTP OnLine TransactionProcessor 在线联机事务处理系统(比如Mysql,Oracle等产品)

OLAP OnLine AnalaysierProcessor 在线联机分析处理系统(比如Hive Hbase等)

  

 2)很多列式数据库还支持列族(column group,Bigtable系统中称为locality group),即将多个经常一起访问的数据列的各个值存放在一起。如果读取的数据列属于相同的列族,列式数据库可以从相同的地方一次性读取多个数据列的值,避免了多个数据列的合并。列族是一种行列混合存储模式,这种模式能够同时满足OLTP和OLAP的查询需求。

3)此外,由于同一个数据列的数据重复度很高,因此,列式数据库压缩时有很大的优势。

例如,Google Bigtable列式数据库对网页库压缩可以达到15倍以上的压缩率。另外,可以针对列式存储做专门的索引优化。比如,性别列只有两个值,“男”和“女”,可以对这一列建立位图索引:

如下图所示

“男”对应的位图为100101,表示第1、4、6行值为“男”

“女”对应的位图为011010,表示第2、3、5行值为“女”

如果需要查找男性或者女性的个数,只需要统计相应的位图中1出现的次数即可。另外,建立位图索引后0和1的重复度高,可以采用专门的编码方式对其进行压缩。

当然,如果每次查询涉及的数据量较小或者大部分查询都需要整行的数据,列式数据库并不适用。

07、最后总结如下 

①数据是按行存储的。

②没有索引的查询使用大量I/O。比如一般的数据库表都会建立索引,通过索引加快查询效率。

③建立索引和物化视图需要花费大量的时间和资源。

④面对查询需求,数据库必须被大量膨胀才能满足需求。

列式数据库的特性如下:

①数据按列存储,即每一列单独存放。

②数据即索引。

③只访问查询涉及的列,可以大量降低系统I/O。

④每一列由一个线程来处理,即查询的并发处理性能高。

⑤数据类型一致,数据特征相似,可以高效压缩。比如有增量压缩、前缀压缩算法都是基于列存储的类型定制的,所以可以大幅度提高压缩比,有利于存储和网络输出数据带宽的消耗。

Bitmap位图大法-爱代码爱编程

Bitmap是位图的意思,使用位数字表示数据的状态,可以对大量数据进行快速的查找,统计。   面试过程中很多都会涉及到大量数据少量内存来进行判断该元素是否存在?判断某一个ip重复次数最多,进行排序找出前100的数据等问题 其实这一类问题用位图可以解决,还有的方法就是读取部分后写入,其实所有的方法都有点分而治之的思想。但是今天不讲分治法,只讲Bitma

java项目本地部署宝塔搭建实战报修小程序springboot版系统源码_web测评的博客-爱代码爱编程

大家好啊,我是测评君,欢迎来到web测评。 有个朋友前两天发了一套java的源码给我,让我录制一个搭建视频,我抽空看了一下,本期就给大家带来这套Java开发的报修小程序springboot版系统源码。 技术架构

在 idea 中用 nacos2.1.0 源码启动集群模式并调试_魔道不误砍柴功的博客-爱代码爱编程

单机模式 1、源码 clone 下来之后 2、导入 IDEA 3、compile 编译(主要是让 proto 和 istio 能够自动生成 Java 类),如果没生成,切换个 Maven直接再来一次即可。 4、单机模

java项目:ssh在线电影售票选座版网站平台系统_夜未央5788的博客-爱代码爱编程

作者主页:夜未央5788  简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为前后台项目,首先分为管理员和普通用户,游客。 游客可以进入首页,必须注册成为普通用户才能进行影片的购买。管理员和普通用户进行分权限登录,登录后进入不同页面。 普通用户登录后进入首页,首页有影片推荐,用户可以点击进

计算机毕业设计=基于微信小程序的停车场管理系统_qq_2693978338的博客-爱代码爱编程

摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,智能停车场管理系统也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而智能停车场管理系统能很

java计算机毕业设计毕业生派遣系统mybatis+系统+数据库+调试部署_云清网络的博客-爱代码爱编程

JAVA计算机毕业设计毕业生派遣系统Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计毕业生派遣系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:Layui、HTML、CSS、JS、JQuery等技术 后端技术:JA

django基于大数据的应届生求职系统--python-计算机毕业设计_qq626162193的博客-爱代码爱编程

项目介绍 随着信息化时代的到来,管理系统都趋向于智能化、系统化,基于大数据的应届生求职系统也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显

django基于python的酒店预订管理系统--宾馆管理系统-计算机毕业设计_qq626162193的博客-爱代码爱编程

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,宾馆管理系统就是信息时代

spring + mybatis 整合使用_欧尼熊不懂的博客-爱代码爱编程

文章目录 集成 MyBatis操作流程DruidSqlSessionFactorySqlSession 接口对象声明 Dao 接口对象单独注册扫描注册 声明 service 对象 测试

mysql主从复制详解-爱代码爱编程

文章目录 1. 简介1.1 应用场景1.2 复制形式 2. 复制原理3. 复制类型3.1 异步复制3.2 同步复制3.3 半同步复制 4. 复制方式4.1 语句复制(Statement格式)4.

基于java演唱会购票系统计算机毕业设计源码+系统+数据库+lw文档+部署_ssh 演唱会门票预约管理系统-爱代码爱编程

基于JAVA演唱会购票系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA演唱会购票系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:Layui、HTML、CSS、JS、JQuery等技术 后端技术

pycharm连接远程数据库_pycharm连接clickhouse-爱代码爱编程

创建连接 首先我们需要点击Database,创建所需的数据库连接(这里使用PostgreSQL做演示)。 配置SSH信息 随后在弹出的窗口中选择SSH/SSL一栏,勾选User SSH tunnel 点击小省略号

(附源码)计算机毕业设计ssm宠物短期寄养平台_基于ssm宠物寄养中心系统-爱代码爱编程

项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。

图数据库 gstore 1.0 版本正式发布-爱代码爱编程

2022年10月1日,面向大规模知识图谱应用的原生图数据库系统gStore 最新的1.0版本正式上线发布。 gStore系统源于2011年北京大学邹磊教授在VLDB发表的论文:“gStore: Answering SPARQL Queries via Subgraph Matching”。北京大学邹磊教授团队十余年在坚持图数据管理领域不断原始学术创新

jsp+servlet + tomcat实现用户登录(三)实现登出功能【javaweb、无数据库】_jsp servlet logout-爱代码爱编程

1.添加退出标签 在登录成功的页面下,添加以下代码 <form action="logout"> <input type="submit" value="退出登录" /> </for

计算机毕业设计之java+javaweb的新冠疫情下的校园出入系统_基于javaweb出入校园管理系统数据表设计-爱代码爱编程

项目介绍 随着信息化时代的到来,管理系统都趋向于智能化、系统化,新冠疫情下的校园出入系统也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而新冠疫情下的

oracle form -爱代码爱编程

问题现象 最近在工作中遇到一个诡异的问题:背景是我开发了一个主从结构的表单,而且主从块都使用了文件夹功能;问题现象是,在查询出结果后,点击主块的标题执行排序,主块突然变成了只显示一行 查看排序前后主块的last query发现异样: 图一为排序前主块last query的WHERE条件,year=2019是块属性里面设置的Where子句,year

mybatis的使用_mybatis 用法-爱代码爱编程

在前面我们操作数据库的时候都是使用JDBC,我们发现它的操作太繁琐,为了解决这个问题,就提出了MyBatis。MyBatis就是更加简单的完成程序和数据库交互的工具,MyBatis是一个ORM框架(Object Relational Mapping),也就是对象映射。 在该框架中: 数据库表(table)被映射为类(class); 记录(record

swagger整合springboot并使用(超级详细)_swagger+springboot配置-爱代码爱编程

CSDN话题挑战赛第2期 参赛话题:Java技术分享 目录 1.注入相关的依赖 2.相关的配置类 2.1.SwaggerConfig配置类 2.2.静态资源映射配置 2.3在权限验证这块,放开相关不需要处理的请求路径 3.Swagger常用注解 3.1.@ApiModel和@ApiModelProperty使用实例 3.2.@Api和