Mysql框架<二> 行式存储与列式存储

本文探讨了数据处理的两种主要场景——OLTP(联机事务处理)和OLAP(联机分析处理),OLTP适合日常事务处理,而OLAP适用于大数据分析。接着,分析了行式存储和列式存储的特点,行式存储适合随机增删改查,列式存储则在海量数据查询和空间效率上有优势。列式存储在读取数据分析、更新一行、添加一行和事务操作上表现出更好的效率。
摘要由CSDN通过智能技术生成

数据处理场景分类

OLTP 联机事务处理

OLTP : on-line transaction processing
为传统的数据库的主要应用场景。偏向事务处理方向的

适合:
增删改查,事务处理

不适合:
海量数据处理

OLAP 联机分析处理

OLAP: on-line analytical processing
为分布式数据库主要应用场景,通常应用于数据报表。

适合:
海量数据;
不适合:
实时性要求高,

行式存储和列式存储
概念

在这里插入图片描述
行式存储:数据一行一行存储。
传统关系型数据库:Oracle,DB2,MySQL,SQL SERVER等
一行的数据在存储介质中连续内存;

列式存储:数据一列一列存储。
分布式数据库:Hbase,HP Vertica, EMC Greenplum等
一列的数据在存储介质中连续内存;

其他:
文档式JSON存储:ElasticSearch,MongoDB,Solr,Splunk等。
缓存中间件:Redis,noSQL等

特点

行式存储
适合:
1、随机增删改查;
2、整行查询。
3、频繁插入更新
不适合:
海量数据搜索

列式存储:
优点:
1、低延迟:查询过程中,可针对各列的运算并发执行,最后在内存中聚合完整记录集,最大可能降低查询响应时间;
2、查找数据高效:无需维护索引,查询过程中能够尽量减少无关IO,避免全表扫描
3、节省空间:因为各列独立存储,且数据类型已知,可以针对该列的数据类型、数据量大小等因素动态选择压缩算法,以提高物理存储利用率;如果某一行的某一列没有数据,那在列存储时,就可以不存储该列的值,这将比行式存储更节省空间。

不适合:
数据需要频繁更新的交易场景,表中列属性较少的小量数据库场景,不适合做含有删除和更新的实时操作。

对比

1 读取数据分析
假设:从2^30行中取出100001 ~ 200000行的name, status列

行存储成本分析:
场景:读取10W行数据的2列
先取行,再取列:从连续的空间取出10w行,从10w行结果集合中取出name和status列
1行平均10KB:10W行=10W * 10kb ≈ 1G数据
Buffer如何是4M,将进行256次读取
10W过滤操作

列存储成本分析:
场景:读取10W行数据的2列
先取列,再取行:从2列中取出10w条
1列的一个条目平均20Byte,10W行的两列=20 byte * 10W ≈ 2M
Buffer如何是4M,将进行1次读取
不需要更多的过滤操作

2 更新一行多个值分析
行存储:一行数据
列存储:多列数据(次数多)

3 添加一行数据分析
行存储:一行数据
列存储:多列数据(次数多)

4 事务操作分析
行存储:锁一行数据
列存储:锁对应的列(范围大)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四库全书的酷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值