大部分数据库是行数据库,数据是按照一行一行存储的,这最符合人类的思维模型,但是有人确认为数据可以按列存储,并且认为这样做大有益处,为什么呢?
先看看下面的数据:
| row ID | Student ID | Name | Province | Age |
|---|---|---|---|---|
| 1 | 1001 | 张三 | 北京 | 16 |
| 2 | 1002 | 李四 | 湖北 | 15 |
| 3 | 1003 | 王五 | 河南 | 16 |
| 4 | 1004 | 刘备 | 北京 | 14 |
| 5 | 1005 | 关羽 | 上海 | 16 |
行数据库如何存储数据
在行数据库里这些数据是一行一行存储的,比如“王五”的数据:
| row ID | Student ID | Name | Province | Age |
|---|---|---|---|---|
| 3 | 1003 | 王五 | 河南 | 16 |
要查找某个记录只要找到它的行ID,就可以一次取出这个记录的所有元素。比如上面的王五,只需要找到 row ID == 3 的记录就可以了。
列数据库如何存储数据
列数据库把数据库一列一列的存储在一起。比如上面那张表,它就会存储为下面的形式。

可以看到所有的 Student ID 被存储在一起,所有的 name 被存储在一起,所有的 Province 被存储在一起,当然所有的 Age 也被存储在一起。那么要读取王五的记录,就需要分别读取4列找到王五的记录分别读出来。
为什么说分析数据列数据库有性能优势?
如果我们要统计学生的平均年龄,我们需要把所有的年龄加起来然后再除以学生的人数。
- 行数据库会怎么做呢?
行数据库需要把每行里的 age 数据读出来,如果有上百万行就需要读百万次所有的数据,然后再摘出来age进行统计。 - 列数据库会如何做呢?
列数据库可以一次性读出 age 列里的所有数据,就能进行统计。
列数据库相比行数据库只要四分之一的 I/O 工作量就能完成上面的任务。
为什么说列数据库更易于数据的压缩存储?
由于每列的数据类型都是一样的,这样更便于数据的压缩,所以列数据库可以把数据压缩的更小。
总结
本文介绍了行数据库和列数据库是如何存储数据的。行数据库更适合事务处理,因为行数据库可以一次性读出一条记录所有的内容,而列数据库有数据分析的性能优势,因为会使用更少的I/O,而存储上因为数据类型一样,更易于数据的压缩存储。当然行数据库和列数据库的优势比较不限于此,在明白相关的概念后,我相信大家在做架构设计时就会知道如何选择了。

5355

被折叠的 条评论
为什么被折叠?



