博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
行存储和列存储
阅读量:6289 次
发布时间:2019-06-22

本文共 959 字,大约阅读时间需要 3 分钟。

hot3.png

列存储的数据库更适合OLAP

行存储的数据库更适合OLTP

所谓的快只是针对于进行olap操作而言

我们知道,数据在存储中的基本单位为页,这也是进行数据读取时候基本单位,一次读取就是一次IO操作

以sql server为例,一个数据页大小为8K,数据页中存储的是数据,数据是连续存储的

那么我假设如下的4*4表格为一个数据页

再假设,有这样一个表格 字段1 字段2

字段1的值为 col1value1,col1value2.....
字段2的值为col2value1,col2value2......

再假设一个excel的单元格为一个存储单位,数据总量占了2个页,

那么以行方式存储大概就这样的:

以列方式存储则是这样的:

这时,如果我需要执行如下查询(oltp典型查询)

select 字段1,字段2 from table where 字段1='col1value1'
以行方式查询(在有适当的索引情况下),那么,执行一次以上查询,只需要扫描一次page1就可以了
以列方式查询,需要投其扫描page1 和page2共2次,分别取得字段1,字段2的单行值

OK,我们换成olap的典型查询

select avg(字段2) from table
--(注意,这里假设字段2为一个整型数据,而且无where条件限制,即需要扫描全部数据)
对于行存储,这个查询需要两次IO将全部数据放入内存后,进行页间数据的跳读(类随机读取)
对于列存储,只需要一次IO将page2放入内存后进行连续读取,如果字段2还有多页的话,也都是进行的物理连续读取

也就是说,在进行olap操作时候,不仅是减小了IO次数,而且把随机读取变为了连续读取

 

详细归纳为如下:

选择列式存储

基于一列或比较少的列计算的时候

经常关注一张表某几列而非整表数据的时候

数据表拥有非常多的列的时候

数据表有非常多行数据并且需要聚集运算的时候

数据表列里有非常多的重复数据,有利于高度压缩

选择HANA行式存储

关注整张表内容,或者需要经常更新数据

需要经常读取整行数据

不需要聚集运算,或者快速查询需求

数据表本身数据行并不多

数据表的列本身有太多唯一性的数据

转载于:https://my.oschina.net/u/2000675/blog/2967574

你可能感兴趣的文章
java 用反射简单应用,将Object简单转换成map
查看>>
Storm中的Worker
查看>>
dangdang.ddframe.job中页面修改表达式后进行检查
查看>>
Web基础架构:负载均衡和LVS
查看>>
Linux下c/c++相对路径动态库的生成与使用
查看>>
SHELL实现跳板机,只允许用户执行少量允许的命令
查看>>
SpringBoot 整合Redis
查看>>
2014上半年大片早知道
查看>>
Android 6.0指纹识别App开发案例
查看>>
正文提取算法
查看>>
轻松学PHP
查看>>
Linux中的网络监控命令
查看>>
this的用法
查看>>
windows下安装redis
查看>>
CentOS7 yum 安装git
查看>>
启动日志中频繁出现以下信息
查看>>
httpd – 对Apache的DFOREGROUND感到困惑
查看>>
分布式锁的一点理解
查看>>
idea的maven项目,install下载重复下载本地库中已有的jar包,而且下载后jar包都是lastupdated问题...
查看>>
2019测试指南-web应用程序安全测试(二)指纹Web服务器
查看>>