DBMS中面向行和面向列的数据存储的区别
数据存储基本上是存储数据集合的地方,例如数据库、文件系统或目录。在数据库系统中,它们可以通过两种方式存储。它们如下:
- 面向行数据存储
- 用于数据存储
行存储和列存储的比较如下:
Row oriented data stores | Column oriented data stores |
---|---|
数据一次存储和检索一行,因此如果需要一行中的某些数据,就可能读取不必要的数据。 | 在这种类型的数据存储中,数据存储和检索在columns中,因此它只能在需要时读取相关数据。 |
面向行数据存储中的记录很容易读取和写入。 | 在这种类型的数据存储中,与面向行相比,读写操作较慢。 |
面向行的数据存储最适合在线事务系统。 | 面向列的商店最适合在线分析处理。 |
它们在执行适用于整个数据集的操作时效率不高,因此面向行的聚合是一项昂贵的工作或操作。 | 它们可以高效地执行适用于整个数据集的操作,因此支持对多个行和columns进行聚合。 |
典型的压缩机制,提供的结果不如我们从面向列的数据存储中获得的效率。 | 这些类型的数据存储基本上允许高压缩率,因为columns中很少有不同或唯一的值。 |
面向行数据存储的最佳示例是关系数据库,它是一种结构化数据存储,也是一种复杂的查询引擎。随着数据量的增加,提高性能会带来很大的损失。
面向列的数据存储的最佳示例是HBase数据库,它基本上从头设计为提供可伸缩性和分区,以实现高效的数据结构序列化、存储和检索。
关系数据库和HBase的特点如下:
Relational Database | HBase |
---|---|
它基本上是基于固定模式的。 | 它完全没有模式。 |
它是一个面向行的数据存储的示例。 | 它是面向列的数据存储的一个例子。 |
它主要用于存储规范化数据。 | 它主要用于存储非规范化数据。 |
它基本上包含很薄的表。 | 它基本上包含宽且面向稀疏的填充表。 |
它没有内置的分区支持。 | 它基本上支持自动分区。 |