列式存储

简介: 在大数据的HBase中与Hive中都有用到列(族)式存储,列式存储被广泛应用,有关于HBase讲解,请访问我的 https://yq.aliyun.com/articles/376750?spm=a2c4e.11155435.0.0.62bc19c8kgVjfV。

在大数据的HBase中与Hive中都有用到列(族)式存储,列式存储被广泛应用,有关于HBase讲解,请访问我的

https://yq.aliyun.com/articles/376750?spm=a2c4e.11155435.0.0.62bc19c8kgVjfV。

今天来说一下什么是列式存储。

首先行式存储大家都知道,就是一行一行的存储,传统的关系型数据库都是这样存储的,

列式存储简单的理解就是将一列数据单独存储在一个文件中,但是正真的存储并不是这样子。假如说有一张表,两个列

column1,column2,我们想象的可能会如下图所示

2238e8d066fa8e47b187c3bb6eda7f952a49ac1b

但是在分布式多线程,对进程访问数据的时候,是不会产生这种形式,因为在大数据的MapReduce或Spark中的任务中,

每一个子任务都会读取一部分的数据,假如我们现在有很多Map来并行读取,所有的Map task在逻辑上都必须是一样的,

假如现在两个Map,要分别读取两个文件,而在图中column1与column2数据类型都不一样,压缩算法也不一样,

读取方法不一样,所以没有办法将文件分配哪个Map task处理。


列式存储到底是怎么存储的呢,再看下面的图

c68658f43e721a35d18c1c33df6df1f596b544fc


假如我们一个User表的文件,事实上一个表的所有数据都存在一个表中,我们User表中有很多行数据,首先我们先横向的切分,

每一百行切分,我们起个名字叫stripe,第一个stripe存前100行用户数据,再看右面部分的单个stripe,我们再次切分为多个

block块(block里才是列存),第一个block存前100行中Name列的数据,第二个存这100行中Score列的数据。讲到这里也就是说,

数据先安照行来切,然后针对行再做列存。

好处:

针对上面所说在执行MR或spark任务时候,有多个map task同时执行,那么我们每个stripe对应一个map task,

这样每个map task处理的逻辑都是一样的。

假如我们要读取Name是张三的数据,Map  task内部只读存Name列的block就好了。

这里需要注意的是,在所有的查询分析器中,仍然需要将查询出的列的信息拼出成行,放在内存中做计算。


另外一个不得不提的是,列式存储天生就是适合压缩,因为同一列里面的数据类型基本是相同,笔者在之前使用普通的gzip压缩,200MB的字符串数据,经过压缩之后只剩下8MB。当然gzip并不属于增量压缩,我们可以选择增量压缩的方式来满足一些数据的随机查找。


来看一下各自特点。

9a8000aa23f8958e22b3173bfb69445e5647d685





上述所写如有不对之处,还请各位前辈指出赐教。--五维空间










相关文章
|
9月前
|
弹性计算 监控 Cloud Native
云原生时代,“信任”才是开发者的核心基础设施:4个技术维度筑牢增长底盘
在云原生时代,信任已成为技术发展的基础设施。本文深入剖析为何“信任”决定开源项目、API与云产品的成败,并从行为一致、承诺可验证、错误修复、输出稳定四大技术维度,揭示构建长期信任的实操路径,助力开发者实现可持续增长。
486 1
|
10月前
|
数据采集 人工智能 安全
|
10月前
|
机器学习/深度学习 编解码 机器人
YOLOv11 改进 - C2PSA | C2PSA融合Mask Attention掩码注意力,可学习掩码矩阵破解低分辨率特征提取难题 | 2025 预印
本文提出MaskAttn-UNet,融合卷积效率与注意力全局视野,通过可学习掩码选择性关注关键区域,提升低分辨率图像分割精度。模块集成至YOLOv11,兼顾性能与效率,适用于资源受限场景,在多任务中表现优异。
YOLOv11 改进 - C2PSA | C2PSA融合Mask Attention掩码注意力,可学习掩码矩阵破解低分辨率特征提取难题 | 2025 预印
|
缓存 JavaScript 前端开发
《凭什么撼动Node.js?Bun和Zig性能优势深度揭秘》
Node.js长期主导服务器端运行时,但新兴的Bun和Zig正带来新挑战。Bun是一款高性能JavaScript运行时,基于Zig语言开发,启动速度快4倍于Node.js,依赖管理效率提升25倍。它集成了打包、转译、测试等功能,简化开发流程。Zig则以精细的内存管理和跨平台能力助力Bun性能飞跃,同时在服务端渲染、命令行工具开发等场景中表现出色。尽管Node.js生态成熟,Bun和Zig正逐步改写JavaScript运行时格局,推动技术进步。
931 15
|
监控 Java Maven
《服务治理》容错机制详解与实践
容错机制是分布式系统的核心,通过熔断、重试、降级等策略,在部分组件故障时保障系统可用性。本文系统介绍了Resilience4j实战、智能决策、监控告警及生产最佳实践,助力构建高韧性应用。
|
10月前
|
机器学习/深度学习 自然语言处理 搜索推荐
搜索引擎是如何进行查询纠错的?
当用户输入错误查询词时,搜索引擎通过查询纠错功能自动识别并修正错误。该过程分为三步:首先判断输入是否存在错误,利用字典或语言模型评估置信度;接着召回候选词,基于拼音、字形或编辑距离生成可能的正确词;最后对候选词打分排序,选出最优结果。结合查询推荐,搜索引擎能更好理解用户意图,提升检索效果。
|
机器学习/深度学习 人工智能 安全
AI的万亿商机:红杉资本眼中的人工智能新时代
AI不仅仅是不可避免的趋势,而是已经到来的现实,其市场规模将远超过去的任何一次技术变革。这不是一场可以观望的比赛,而是一场必须全力以赴参与的革命。
673 22
|
存储 弹性计算 调度
阿里云服务器实例选型参考:共享型与企业级实例性能与使用场景区别及选择参考
阿里云服务器实例从产品规格角度来说,主要分为共享型和企业级。共享型主要有突发性能 t5、t6 实例以及共享 N4、S6 以及经济型e等实例规格,企业级(也称独享型)实例有计算型、通用型、内存型等众多实例规格,那么,这两种类型的实例究竟有什么区别?作为用户又应该如何做出合适的选择呢?接下来,本文为大家介绍共享型与企业级实例性能与使用场景区别及选择参考。
807 10
|
数据采集 边缘计算 定位技术
ar景区导航导览开发方案:核心技术架构与功能设计
本方案针对传统景区导航吸引力弱、互动性差等问题,融合三维建模、多源定位与AR引擎技术,实现室内外精准导航与AR互动体验。支持AR寻宝等功能,提升游客体验与景区竞争力。
877 0
|
前端开发 JavaScript UED
第五章(原理篇) 微前端技术之模块联邦与动态加载
第五章(原理篇) 微前端技术之模块联邦与动态加载
1054 0

热门文章

最新文章