数据的行式存储和列式存储

本文介绍了数据的行式存储和列式存储。行式存储适合OLTP,适合处理个体事务,但在大数据分析时磁盘IO和内存占用高。列式存储适合OLAP,利于数据统计分析,能有效压缩数据,但在增删数据时效率较低。


数据的行式存储和列式存储

最近在公司接触到了与大数据有关的内容,其中要对一个框架进行升级, 其中很重要的一个概念就是将数据的存储由传统的行式存储转换到利于数据分析的列式存储.这其中需要一个比较大的思维上的转变,在网上查阅了很多的资料之后,自己进行了一个小小的总结

一. 传统的行式存储

传统的行式存储看起来是那么的自然,那么理所应当.大家日常生活中使用的成绩单,Excel表,学校中学习的数据库都是以这种数据格式进行存储.行式存储在逻辑上将数据看成一个个的实体.例如一个学生有名字,性别,年龄等,例如(marklau,male,21)这样属性聚合起来构成了一个实体.

行式存储非常符合日常生活的处理逻辑,在生活中,大家都是作为一个个独立的个体的存在,并且与另外的个体进行不同的交互.例如:大家去学校的教务网站去查询自己的成绩,在商店购买一样商品等.在这些场景中大家都是针对某一个个体进行操作.

1.行式存储在磁盘的存储

以下面的一张mysql表为例

// 表结构
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | var
### 列式存储行式存储的区别、优缺点及使用场景 #### 一、列式存储行式存储的区别 列式存储行式存储的核心区别在于数据的组织方行式存储为单位进数据存储,即将整数据连续地存储在一起[^2];而列式存储则以列为单位进数据存储,将同一列的数据集中存储[^2]。 #### 二、列式存储的特点及优缺点 ##### 特点 - 列式存储将相同类型的数据集中存放,便于对特定列进操作。 - 数据压缩效果更好,因为同一列中的数据类型一致且分布相似[^3]。 ##### 优点 - **读取效率高**:当查询只需要访问少数几列时,列式存储能够显著减少磁盘 I/O 开销,因为它只需读取相关的列数据[^4]。 - **压缩效果好**:由于相同类型的数据存储在一起,可以应用更高效的压缩算法,从而减少存储空间占用[^4]。 - **便于统计分析**:列式存储非常适合进排序、过滤聚合等操作,特别适用于复杂的数据分析任务[^4]。 ##### 缺点 - **写入性能较低**:由于列式存储需要对每一列分别进更新或插入操作,其写入性能通常低于行式存储[^1]。 - **随机查询性能较差**:对于需要频繁访问完整的场景,列式存储可能不如行式存储高效[^1]。 #### 三、行式存储的特点及优缺点 ##### 特点 - 行式存储为单位存储数据,适合需要快速检索整数据的场景。 - 数据的完整性较高,因为一中的所有字段都存储在一起[^2]。 ##### 优点 - **写入性能高**:行式存储在插入或更新数据时效率较高,因为每次操作只需处理一数据。 - **随机查询性能好**:对于需要频繁访问完整的场景,行式存储能够更快地提供所需数据[^1]。 ##### 缺点 - **读取效率低**:当查询只需要访问少数几列时,行式存储会读取整个数据,导致不必要的 I/O 开销。 - **压缩效果差**:由于行式存储中不同列的数据类型多样,难以实现高效的压缩[^3]。 #### 四、适用场景 ##### 列式存储适用场景 - **数据分析**:列式存储非常适合用于大数据分析场景,如数据仓库、商业智能(BI)机器学习等。 - **只读查询**:当查询主要涉及读取操作且只需要访问部分列时,列式存储是更好的选择。 ##### 行式存储适用场景 - **事务处理**:行式存储广泛应用于在线事务处理(OLTP)系统,如银交易、订单管理等,这些场景需要频繁的插入、更新删除操作[^1]。 - **随机查询**:对于需要快速检索完整数据的应用,行式存储表现更佳。 ```python # 示例代码:比较列式存储行式存储的读取效率 import pandas as pd # 模拟行式存储读取 row_data = pd.read_csv('row_storage.csv') # 模拟列式存储读取 column_data = pd.read_parquet('column_storage.parquet', columns=['specific_column']) ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值