行式数据库应用场景
行式数据库属于传统的关系型数据库,数据是按照行数据为基础逻辑存储单元进行存储,一行中的数据在存储介质中以连续存储形式存在。行式数据库通常适用于以下场景:
随机的增、删、改、查(CRUD)操作
行式数据库擅长处理随机的 CRUD 操作,因为它们以行为单位存储和读取数据,适合频繁插入、更新和删除操作。
在行中选取所有属性的查询操作
当需要查询一行中的所有列时,行式数据库可以高效地检索整个行记录,因为数据是以行为单位连续存储的。
需要频繁插入或更新的操作
由于行式数据库以行为单位存储数据,因此在插入或更新数据时,它们可以高效地写入整个行记录,而无需对现有数据进行大量重写。
事务处理
行式数据库通常支持 ACID(原子性、一致性、隔离性和持久性)事务,确保数据的完整性和一致性,适用于需要严格事务控制的应用场景。
然而,行式数据库在读取时存在一个缺陷。由于用户查询的目标数据是埋藏在各行数据单元当中的,因此在读取时需要读取完整的行记录,导致读取效率不高。不过,用户可以通过添加索引来提高查询效率,索引可以帮助快速定位所需的行记录。
行式数据库和列式数据库
行式数据库和列式数据库是两种不同的数据存储方式。它们的主要区别在于数据的逻辑存储单元和查询方式:

行式数据库
属于传统关系型数据库,其中数据是以行为基础逻辑存储单元进行存储的。这意味着一行中包含了该记录的所有列数据。在查询数据时,行式数据库需要逐行扫描整个表,从而获取所需的数据列。这种存储和查询方式对于需要访问大部分列数据的查询来说是高效的,但对于只需访问少数几列数据的查询来说则效率较低。

列式数据库
相对于行式数据库而言,其中的数据是以列为基础逻辑存储单元进行存储的。这意味着同一列中的数据在存储介质上是以连续的形式存在的。在查询数据时,列式数据库可以直接定位到所需数据所在的列,从而实现快速查找。这种存储和查询方式对于只需访问少数几列数据的查询来说是高效的,但对于需要访问大部分列数据的查询来说则效率较低。
列式数据库通常应用于数据仓库和大数据分析等场景,因为这些场景下的查询往往只需要访问数据的一小部分列。而行式数据库则更适用于需要频繁插入、更新和删除操作的在线事务处理(OLTP)系统。
值得注意的是,现代数据库系统通常采用行式和列式存储的混合方式,以平衡不同查询模式的性能需求。
行式数据库优点

效率高且完整
行式数据库采用一次性完成的写入方式,因此不会在数据写入过程中消耗过多时间,写入的效率比较高。这种写入方式能够确保数据的完整性,避免出现数据丢失或损坏的情况。行式数据库的写入效率高和数据完整性是其主要优势之一,使其在需要频繁写入大量数据的场景下表现出色。

数据加载速度快
行式存储结构的一大优点是数据加载速度快。由于行式数据库将数据按行存储在本地,因此在读取数据时无需通过网络从远程服务器获取,从而避免了网络开销。这种本地读取的方式大大提高了数据加载的速度,非常适合需要大量数据扫描的应用场景。此外,行式数据库还能高效处理包含删除和更新操作的实时查询,使其在需要实时数据处理的应用中也表现出众。行式数据库的快速数据加载能力和实时查询处理能力使其成为大数据分析、实时数据处理等领域的理想选择。
行式数据库的发展历史
行式数据库的发展历史可以追溯到 20 世纪 70 年代。以下是其主要发展阶段:
关系模型的提出
1970 年,埃德加・F・科德(Edgar F. Codd)首次提出了关系模型的概念,这标志着行式数据库的理论基础。在此之前,数据库系统主要基于导航式数据模型,如层次模型和网状模型,这些模型使用指针来跟踪记录之间的关系。关系模型则允许通过内容而非链接来访问数据,这是一种全新的思路。
商业化进程
20 世纪 80 年代中期,随着计算机硬件性能的提高,实现 SQL 的关系数据库管理系统(RDBMS)开始广泛部署。到 90 年代初,关系型系统已经主导了大规模数据处理领域。Oracle(原名 Relational Software)成为首家提供商业 SQL 关系数据库管理系统的供应商。
SQL 语言的诞生
在 1970 年代,结构化查询语言(SQL)应运而生,最初被称为结构化英语查询语言(SEQUEL),后来简称为 SQL。这种基于关系模型的语言为行式数据库的实现奠定了基础。
行业主导地位
尽管在 80 年代和 90 年代,面向对象和基于 XML 的数据库曾对行式数据库构成挑战,但关系型数据库仍然保持着主导地位。近年来,NoSQL 数据库作为处理非结构化数据的替代方案出现,但行式数据库依然广受使用。
总的来说,行式数据库的发展历程始于关系模型的提出,经历了 SQL 语言的诞生、商业化进程,最终成为数据管理领域的主导技术。
行式数据库的组成部分
行式数据库是基于关系模型构建的,由 E.F. Codd 于 1970 年提出。行式数据库的主要组成部分包括:
行和列
行(也称为元组或记录)代表单个数据项。列(也称为属性或字段)是元组的标记元素。行式数据库中的数据以行和列的形式存储在表中。
表和视图
表(也称为关系或基本关系变量)是一组具有相同属性的元组的集合。视图或结果集(也称为派生关系变量)是响应查询而生成的任何元组集合。
SQL 语言
行式数据库通常使用结构化查询语言(SQL)来查询和更新数据。它们还经常包括存储过程等功能,其中包含数据处理逻辑,以及索引,可以极大地提高查询性能。
数据定义语言
数据定义语言(DDL)是 SQL 命令,用于设计数据库结构,如创建和修改表、视图和索引等数据库对象。
存储引擎
存储引擎是处理 SQL 字节码并运行预期 SQL 语句的软件组件,可读取和存储数据库文件中的数据。
系模型的灵活性使数据库可以用于最初设计者没有预料到的方式,使其适合长期业务使用。行式数据库还可以根据其对不同类型数据异常的脆弱性进行分类,更高的范式形式表示更少的脆弱性。
行式数据库的工作原理

面向操作型访问模式优化
行式数据库的工作原理是针对操作型访问模式进行优化,在这种模式下,通常只选择特定的字段,很少进行全表扫描(选择所有字段 / 列)。与之相反,列存储数据库更适合于数据仓库中常见的分析型访问模式。操作型数据库(OLTP)受益于使用面向行的 DBMS,而分析型数据库(OLAP)则受益于使用面向列的 DBMS。与维护业务快照的操作系统不同,数据仓库通常维护无限历史记录,这是通过 ETL 过程定期将数据从操作系统迁移到数据仓库来实现的。

按行组织和存储数据
在关系数据库模型中,每个类别都有一个表,类别属性作为列,数据记录作为行。例如,家具零售商可以用一组表来建模,如_房间_和_家具_,其中表通过_房间号_和_家具名称_等列相链接。这些链接列也称为主键。行式数据库中的数据是按行组织和存储的,每一行代表一条完整的数据记录。这种方式可以高效地检索整个记录,因为单个记录的数据存储在连续的位置。

支持高效的记录检索
由于行式数据库按行存储数据,每行包含一条完整的记录,因此可以高效地检索整个记录。当需要访问某个特定记录的所有字段时,行式数据库可以快速地从磁盘读取该记录的所有数据,而无需额外的查找和组装操作。这种存储方式非常适合于操作型数据库,因为它们通常需要频繁地读取和写入完整的记录。
行式数据库的类型

关系型数据库
关系型数据库是最常见和最广泛使用的行式数据库类型。它们将数据存储在由行和列组成的表格中,并使用唯一标识符(键)将不同表格中的数据相互关联。常见的关系型数据库包括 MySQL、PostgreSQL 等。

面向对象数据库
面向对象数据库是在 20 世纪 90 年代兴起的一种行式数据库类型,它将数据视为具有属性和行为的对象。例如,一把椅子的颜色和尺寸等属性可以映射到一个 "椅子数据对象" 中。

网状数据库
网状数据库是早期的一种行式数据库类型,它允许一个子记录拥有多个父记录,反之亦然。比如在一家家具店中,"衣柜"记录可以同时与"卧室"和"儿童房"这两个父记录相关联。

关系型数据库的优势
关系型数据库在 20 世纪 80 年代成为企业中流行的数据库模型,主要由于它的生产力高、灵活性强,并且与当时不断升级的硬件性能相兼容。关系型数据库在结构化数据存储和处理方面表现出色,成为行式数据库中的主导类型。
行式数据库的使用场景
行式数据库广泛应用于各种场景,尤其适合处理事务性工作负载。以下是行式数据库的一些主要使用场景:
在线事务处理系统(OLTP)
行式数据库非常适合用于在线事务处理(OLTP)系统,如银行账户管理、订单处理、库存管理等。这些系统需要快速读写单个记录,并对数据完整性和一致性有很高要求。行式数据库的设计使其能够高效地执行这些操作。
电子商务应用
电子商务网站需要存储和管理大量产品信息、客户信息、订单记录等数据。行式数据库能够轻松处理这些结构化数据,并提供快速的查询和更新能力,满足电子商务应用的需求。
内容管理系统(CMS)
内容管理系统通常需要存储和管理大量结构化和非结构化数据,如文章、博客、评论等。行式数据库可以高效地存储这些数据,并支持快速的搜索和检索操作。
客户关系管理(CRM)
客户关系管理系统需要存储和处理大量客户信息、销售记录、营销活动数据等。行式数据库能够轻松管理这些数据,并支持复杂的查询和分析操作。
物联网(IoT)应用
物联网应用需要存储和处理大量来自各种传感器和设备的数据。行式数据库可以高效地存储这些结构化数据,并支持实时数据处理和分析。
总之,行式数据库在需要处理大量结构化数据、支持快速事务处理和数据完整性要求较高的场景中表现出色,是许多企业和应用的首选数据库解决方案。
如何选择合适的行式数据库

数据访问模式
选择合适的行式数据库时,关键因素是数据的访问模式。对于操作型数据库(OLTP),通常更适合使用行式数据库管理系统,因为它们涉及选择特定字段,而非全表扫描。相比之下,数据仓库则针对分析型访问模式进行了优化,更多地受益于列式数据库管理系统。

数据历史记录
数据仓库通常会维护无限期的数据历史记录,这是通过 ETL 过程实现的,将数据从操作系统迁移到数据仓库中。因此,对于需要保留长期历史数据的系统,行式数据库可能更为合适。

数据仓库复杂程度
数据仓库的复杂程度也是一个需要考虑的因素。离线操作数据仓库、离线数据仓库、实时数据仓库和集成数据仓库代表了不同的演进阶段,复杂程度不同。对于较为简单的数据仓库,行式数据库可能更为合适。

数据结构和查询类型
除了上述因素外,数据结构和需要执行的查询类型也是选择行式数据库的重要考虑因素。关系型数据库适合存储结构化数据,通过主键连接表格进行高效查询和数据检索。而面向对象的数据库则更适合处理复杂的层次结构数据。因此,应根据具体应用程序的需求和需要存储和检索的数据类型来选择合适的数据库。
行式数据库的性能优化技巧
行式数据库是专为事务处理而优化的数据库,主要用于频繁访问和更新单个记录。为了优化行式数据库的性能,可以采取以下几种技术:
水平分区
水平分区是将表按行进行划分,通常在单个数据库实例内完成。这种方式可以减小索引大小和搜索工作量,前提是能够明确识别某一行属于哪个分区。与垂直分区(将列拆分到多个表中)相比,水平分区通常更加灵活。
分片
分片技术用于将大型负载分散到多个较小的服务和服务器上。这有助于提高性能和可扩展性,尤其是在需要将负载分散到多个服务器的分布式计算环境中。
一致性哈希
一致性哈希是一种分片技术,可用于自动将大型负载分散到多个较小的服务和服务器上。这有助于克服性能和可扩展性问题。
综上所述,行式数据库的关键性能优化技术包括水平分区、分片和一致性哈希。这些技术有助于管理大数据量和分布式计算环境。
行式数据库面临的挑战
行式数据库面临的主要挑战在于处理复杂关系和关联数据时的低效率。由于行式数据库采用关系模型存储数据,在查询涉及多个表、多个属性之间的复杂关联关系时,需要执行大量的连接操作,这不仅降低了查询效率,而且对查询复杂关系的能力也有一定限制。此外,在检索关联数据时,还需要考虑外键约束,从而增加了额外的开销。相比之下,图数据库在处理关联数据集时通常更快,并且能更直接地映射到面向对象应用程序的结构。图数据库在扩展到大型数据集时也更具优势,因为它们通常不需要代价高昂的连接操作。
欢迎加入亚马逊云科技培训中心
欢迎加入亚马逊云科技培训中心
-
快速上手训练营
-
账单设置与查看
-
动手实操
-
快速上手训练营
-
第一课:亚马逊云科技简介
本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。
亚马逊云科技技术讲师:李锦鸿第二课:存储与数据库服务
您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。
亚马逊云科技资深技术讲师:周一川第三课:安全、身份和访问管理
在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。
亚马逊云科技技术讲师:马仲凯 -
账单设置与查看
-
-
动手实操
-
快速注册账号 享用免费套餐
快速注册账号 享用免费套餐
-
1 进入注册页面
-
2 设置用户名及密码
-
3 填写企业信息
-
4 企业信息验证
-
5 完成手机验证
-
6 选择支持计划
-
1 进入注册页面
-
注:该链接中的内容显示语言 是与您的网页浏览器设置相一致的,您可以根据需要自行调整语言栏。 *图片点击可放大
-
2 设置用户名及密码
-
3 填写企业信息
-
*图片可点击放大
-
4 企业信息验证
-
*图片可点击放大
-
5 完成手机验证
-
6 选择支持计划