DBMS中面向行和面向列的数据存储的区别

DBMS(Database Management System,数据库管理系统)中的面向行和面向列是两种不同的数据存储方式。

面向行(ROW-Oriented)

在面向行的数据存储方式中,数据被组织成一行一行的形式存储。这种方式可以更好地支持整行数据的读取和更新操作,适用于对单条记录做增删改查操作较多的情况。这种方式需要在磁盘上存储较多的冗余数据,因为每行数据都需要存储一些共同的信息,例如表头、行号等。通常会将数据按照主键进行排序,即“聚簇索引”,这样可以加速对单条记录的查询。

例如,以下是一个面向行存储的样例表格:

姓名 年龄 性别
张三 20
李四 25
王五 18
赵六 30

如果要查询某一行的具体数据,需要读取整行的所有信息。比如,如果要查询李四的年龄,则需要先找到李四这一行,然后读取年龄列的数据。

面向列(COLUMN-Oriented)

在面向列的数据存储方式中,数据被组织成一列一列的形式存储。这种方式可以更好的支持列的聚合操作(如 COUNT、AVG 等),适用于对多条记录做复杂统计的情况。这种方式可以减少存储冗余数据的情况,因为每个列的数据被存储在一起,不需要每行都存储相同的信息。

例如,以下是一个面向列存储的样例表格:

姓名 张三 李四 王五 赵六
年龄 20 25 18 30
性别

如果要查询某一列的具体数据,只需要读取该列的所有数据。比如,如果要统计年龄的平均值,则只需要对年龄这一列的数据做聚合计算即可。

面向列的示例

举个面向列的示例:有如下表格:

Order Date Product Category Sales Profit
1 2014-01-06 Apple Fruits 4500 100
2 2014-01-06 Orange Fruits 3200 50
3 2014-01-07 Banana Fruits 1200 20
4 2014-01-08 Carrot Vegetables 6000 500
5 2014-01-09 Cucumber Vegetables 4200 100

关于总利润是什么。我们可以分别对不同的列进行统计。即可以对利润这一列进行加总。其结果是:$100+50+20+500+100=770$。

这是在面向列的存储策略下对于聚合操作的优点。

小结

面向行和面向列两种数据存储方式各有其优缺点,需要根据具体的应用场景进行选择。面向行适用于对单条记录做增删改查操作较多的情况,而面向列适用于对多条记录做复杂统计的情况。当然在实际应用中,也可以将两种存储方式结合起来使用,根据实际情况灵活配置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:DBMS中面向行和面向列的数据存储的区别 - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • centos7 安装mysql5.7(源码安装)

    Centos7将默认数据库mysql替换成了Mariadb 在接下来的mysql安装过程中,请一定保证自己当前所在目录是正确的!  e g: [root@localhost ~]# 表示当前目录为~ [root@localhost mysql]# 表示当前目录为mysql 一、安装MySQL 1、下载安装包mysql-5.7.17-linux-glibc2.…

    MySQL 2023年4月13日
    00
  • Mysql深入了解联表查询的特点

    Mysql联表查询是指查询不止一个表格并将它们联接起来的查询。本文将为您介绍Mysql深入了解联表查询的特点。 联表查询的语法 在Mysql中,进行联表查询的语法如下: SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name = table2.column_name WHERE …

    database 2023年5月22日
    00
  • 详解MySQL的sql_mode查询与设置

    当我们执行MySQL查询时,默认会启用一组 SQL 模式(sql_mode)来定义数据库行为和约束。有时候需要在查询时更改 SQL 模式或查询当前正在使用的 SQL 模式。本文将详细讲解 MySQL 的 sql_mode 查询与设置,为大家提供一份完整攻略。 一、查询当前 SQL 模式 要查询当前正在使用的 SQL 模式,我们可以使用如下命令: SELECT…

    database 2023年5月22日
    00
  • MySQL (一) 生产环境安装配置

    一、简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。有以下特点: MySQL是一种数据库管理系统。 MySQL是一种关联数据库管理系统。 MySQL软件是一种开放源码软件。 MySQL数据库服务器具有快速、可靠和易于使用的特点。 MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。 有大量可用的共…

    MySQL 2023年4月12日
    00
  • 面试官问你redis是单线程还是多线程该怎么回答?

    近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到redis数据格式、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,就redis单线程,这篇文章做一个简单介绍 Redis采用的是基于内存的采…

    Redis 2023年4月12日
    00
  • mybatis中#{}和${}的区别详解

    下面是针对“Mybatis中#{}和${}的区别详解”的完整攻略: 1. #{}和${}的基本概念 在Mybatis中,#{}和${}都是参数占位符,用于将数据传递到SQL语句中。在执行SQL语句时,#{}会将传入的数据以预编译的形式进行处理,而${}则会将传入的数据直接拼接到SQL语句中。 2. #{}和${}的主要区别 2.1. SQL注入问题 在使用$…

    database 2023年5月21日
    00
  • centos下root运行Elasticsearch异常问题解决

    下面我将详细讲解如何解决centos下root运行Elasticsearch异常问题。 问题描述 在CentOS系统下以root账户运行Elasticsearch时,可能会遇到异常问题。 问题解决 解决此问题的方法如下: 1. 不要以root账户运行Elasticsearch 在CentOS系统下,不建议直接以root账户运行Elasticsearch。可以…

    database 2023年5月21日
    00
  • CentOS命令行下装oracle 12c的方法(命令行模式安装)

    CentOS命令行下装oracle 12c的方法可以分为以下步骤: 1.检查系统配置要求和安装依赖包 在CentOS 7或者8系统中我们需要检查以下的系统配置要求: 需要一个2核以上、至少4GB内存的服务器 需要预留25GB以上硬盘空间用于安装 需要满足安装Oracle 12c的预装条件,安装请使用以下命令 sudo yum install -y oracl…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部