数据库检查点:提升性能与数据安全的关键技术
简介
本检查点旨在帮助您评估从我们的数据库入门文章中学到的知识,该文章定义了数据库并介绍了常见的数据库管理系统。您可以使用此检查点来测试您对这些主题的理解程度,回顾关键术语和命令,并找到继续学习的资源。
数据库是任何逻辑建模的信息或数据的集合。当人们在谈论网站、应用程序和云的上下文中提到“数据库”时,通常指的是一个管理存储在计算机上的数据的计算机程序。这些程序被正式称为数据库管理系统(DBMS),可以与其他程序(如Web服务器和前端框架)结合以形成可投入生产的应用。
在此检查点中,您将找到两个部分,总结引论文章的核心思想:关于数据库是什么的简要说明(包括关系型和非关系型数据库的子部分),以及如何通过命令行或图形用户界面与您的数据库管理系统进行交互的部分。在每个部分中,都有互动组件帮助您测试知识。在此检查点的结尾,您将找到继续学习数据库管理系统、完全托管的数据库以及使用后端数据库构建您的应用程序的机会。
资源
- 数据库入门
- 理解SQL约束
- SQLite vs MySQL vs PostgreSQL:关系数据库管理系统比较
- NoSQL数据库管理系统和模型比较
- 如何在Ubuntu 22.04上安装和保护Redis
- 如何在MongoDB中执行CRUD操作
数据库是什么?
数据库是任何逻辑建模的信息集合,而数据库管理系统就是大多数人在想到数据库时所想的东西!您使用数据库管理系统(DBMS),这是一个设计用于与信息交互的计算机程序,来访问和操作存储在您的数据库中的信息。
信息:需要了解的术语
先给以下术语下定义,然后使用下拉菜单功能来检查您的答案。
复制
复制是指将数据同步到多个独立数据库的做法。这种做法提供了冗余性,提高了可伸缩性,降低了读取延迟。
切分
数据库切分是一种架构实践,将数据分割成称为逻辑切片的块,并分布在称为物理切片的独立节点上。关于这种实践的更多信息,您可以查看我们关于理解数据库切分的文章。
数据库系统有三种常见的关系模型被使用:
关系模型 | 关系 |
---|---|
一对一 | 在一对一关系中,一个表(有时称为父表)中的行与另一个表(有时称为子表)中的一行且仅一行相关联。 |
一对多 | 在一对多关系中,初始表(有时称为父表)中的一行可以与另一个表(有时称为子表)中的多行相关联。 |
多对多 | 在多对多关系中,一个表中的行可以与另一个表中的多行相关联,反之亦然。虽然这些表也可以被称为父表和子表,但多向关系并不需要层次关系。 |
这些关系模型定义了数据库之间的关系结构。
数据库管理有两类:关系型数据库和非关系型数据库。在下面的小节中,您将了解到每种类型以及这些类型的常用数据库管理系统。
关系数据库
关系数据库通过关系来组织信息,您可能会将其识别为一张表格。
信息:检查自己
构成一个关系的元素是什么?
关系是一组元组或者表中的行,每个元组共享一组属性或者列。元组是表中所存储数据类型的独特实例,而属性指定了允许在列中存储的数据类型。
主键和外键之间的区别是什么?
主键指的是在关系表中每一行的唯一标识列,而外键是主键的副本插入到第二个关系中,以创建两个表之间的关联。
当信息存储在数据库中并按关系组织时,可以通过查询来访问信息,查询是对信息进行结构化请求的方式。许多关系型数据库使用结构化查询语言(SQL)来管理对数据库的查询。
在设计数据库时,您可以使用SQL约束。这些约束对表中的数据所能进行的更改施加了限制。
信息:请自行检查
为什么要对数据库加上约束呢?
- 业务规则:约束让数据库管理员能够确保数据库与制定的政策和程序相匹配,满足业务需求和期望。
- 数据完整性:数据输入容易出现错误,所以约束提供了额外的参数以确保正确的数据。
SQL标准定义的五个约束是什么?
- 主键(PRIMARY KEY)要求给定列的每个条目都是唯一且不为空,并允许您使用该列来标识表中的每一行。
- 外键(FOREIGN KEY)要求给定列的每个条目必须已存在于另一个表的特定列中。
- 唯一(UNIQUE)禁止在给定列中添加重复值。
- 检查(CHECK)定义了对列的要求,即所谓的谓词,要求输入进该列的每个值都必须满足。
- 非空(NOT NULL)禁止在给定列中添加任何空值。
一些使用SQL构建的开源关系数据库管理系统包括MySQL、MariaDB、PostgreSQL和SQLite。继续通过《了解关系数据库》来学习关系数据库,并通过《SQLite vs MySQL vs PostgreSQL:关系数据库管理系统比较》来回顾常见的关系数据库管理系统。
信息:掌握的关系数据库术语
通过每篇文章,您已经掌握了关于关系数据库的词汇。解释以下每个术语,然后使用下拉功能来检查您的答案。
约束
约束是应用于列或表的任何规则,它限制了可以输入到其中的数据。
数据类型
数据类型规定了可以在列中允许的条目类型。
对象数据库
对象数据库使用面向对象的结构来存储信息。PostgreSQL是一个关系数据库,它融合了一些对象数据库的特性。
无服务器
无服务器数据库(例如SQLite)允许访问数据库的任何进程直接读写数据库磁盘文件。这种行为与其他关系数据库引擎实现的进程间通信相反。您可以编写无服务器函数来练习运行无服务器应用程序。
有符号和无符号整数
某些数值数据类型是有符号的,意味着它们可以表示正数和负数,而其他数值数据类型是无符号的,只能表示正数。
现在您了解关系数据库,您可以理解它们的对应物:非关系数据库。
非关系型和非SQL数据库
如果您需要以非结构化方式存储数据,则非关系型数据库提供了另一种模型。由于非关系型数据库不使用SQL,因此有时被称为NoSQL数据库。
对于非关系型数据库,有多种可用选项,比如键-值存储、列式数据库、文档存储和图形数据库。每个模型都解决了使用关系型数据库时可能遇到的问题,包括水平扩展、节点间的最终一致性以及非结构化数据管理。
信息:了解的非关系型数据库术语
每个非关系型数据库模型都有其独特的特点。定义模型类型,然后使用下拉功能以核对您的工作。
键值数据库
键值数据库存储和管理包含键值对的关联数组,其中键是检索相关值的唯一标识符。
列式数据库
列式数据库是面向列的,意味着它们将数据存储在列中。数据按记录顺序显示,其中一列的第一个条目与其他列的第一个条目相关。
面向文档的数据库
也称为文档存储,这些是存储数据以文档形式的NoSQL数据库。每个文档包含用于结构化数据的元数据,可以使用API或查询语言检索文档。
图数据库
图数据库是文档存储的一个子类别,这种类型的数据库强调文档之间的关系。
您可以通过以下交互式下拉功能,检查您对哪些受欢迎的非关系数据库管理系统与数据库模型类型相符的了解。
信息:请核对一下,将以下数据库管理系统与其操作数据库模型相匹配。
- Redis
- Couchbase
- Cassandra
- OrientDB
- MongoDB
- Neo4j
- MemcacheDB
- Apache HBase
请使用下拉菜单功能来比较您的答案。
操作数据库模型
示例DBMS
- 键值存储:Redis,MemcacheDB
- 列式数据库:Cassandra,Apache HBase
- 文档存储:MongoDB,Couchbase
- 图数据库:OrientDB,Neo4j
无论您使用关系型数据库还是非关系型数据库,您可能正在构建一个应用程序,其中包含一个数据库管理系统作为其堆栈的一部分。
构建应用堆栈
数据库管理系统通常作为更大应用的一个重要组成部分进行部署。这些应用有时被称为栈,比如LAMP栈或弹性栈。
信息:检查自己
使用下拉功能获取答案。
什么构成了LAMP堆栈?
LAMP是构成此堆栈的技术的首字母缩写:
- L:Linux操作系统
- A:Apache Web服务器
- M:MySQL数据库
- P:用于动态内容处理的PHP
还有其他L*MP选项,比如LEMP堆栈,其中E代表Nginx,或者LOMP堆栈,其中O代表OpenLiteSpeed。
什么构成了弹性堆栈?
弹性堆栈建立在Elasticsearch之上,它既是搜索引擎又是面向文档的数据库。
这是文章《数据库检查点》的第2部分(共2部分)。
如果您使用应用堆栈设置了一个远程服务器,建议您加密数据以保护系统免受恶意干扰。您可以使用传输层安全性(TLS)加密通信,将数据转换为只能由正确密码解密的密文。除非使用提供静态数据加密的数据库管理系统(DBMS),否则您存储在数据库中的静态数据将保持未加密状态。
要管理您的数据库,您可以选择通过命令行界面或图形用户界面来进行操作。
使用命令行与您的数据库管理系统进行操作
通过我们关于云服务器的入门文章,您开始使用 Linux 命令行,并通过关于网络服务器解决方案的入门文章配置了一个网络服务器。通过有关数据库的文章,您继续熟悉命令行,并使用了诸如下列命令进行开发:
grep
:用于在纯文本数据中搜索特定文本或字符串。netstat
:用于检查网络配置,结合-lnp
标志可显示监听套接字(-l
)、数字地址(-n
)以及每个套接字的进程ID和程序名称(-p
)。systemctl
:用于控制 systemd 服务。
您还尝试使用不同数据库管理系统附带的命令行工具来与数据库安装进行交互。CLI 工具使您能够在数据库服务器上执行命令,并且可以在终端窗口中实时操作。下表列出了常见的数据库管理系统及其关联的 CLI 工具:
DBMS | CLI 工具 |
---|---|
MongoDB | MongoDB Shell |
MySQL | mysql |
PostgreSQL | psql |
Redis | redis-cli |
一些数据库管理系统也有第三方的命令行客户端,比如 Redis 的 Redli。
当您使用命令行与数据库系统交互时,您会打开一个特定于数据库的服务器提示符,通常与您在数据库管理系统中的用户帐户相关联。例如,如果您打开一个 MySQL 服务器提示符并使用 MySQL 用户登录,您将会看到如下数据库提示符:
每个数据库管理系统的命令行客户端都有自己的命令语法。
在学习了 SQL 约束之后,您可以运行以下命令在 MySQL 数据库中使用这些约束:
CREATE DATABASE
:用于创建数据库。USE
:用于选择数据库。CREATE TABLE
:用于创建表,并指定列及其应用的约束。ALTER TABLE
:结合ADD
用于向现有表添加约束,结合DROP CONSTRAINT
用于从现有表删除约束。
您可以通过《如何使用 SQL 系列》继续提升您的 MySQL 数据库技能。
在使用 Redis 安装和保护 Redis 时,您使用了以下命令并尝试重命名命令:
auth
:用于客户端认证以访问数据库。exit
和quit
:用于退出 Redis-CLI 提示符。get
:用于检索键值。ping
:用于测试连接。set
:用于设置键。
在 MongoDB Shell 中,您可以使用二进制 JSON(也称为 BSON)运行 CRUD 操作,并使用以下查询过滤方法:
count
方法:用于检查指定集合中的对象数量。deleteOne
:用于删除符合规范的第一个文档。deleteMany
:用于一次删除多个对象。find
:用于检索 MongoDB 数据库中的文档,并具有美观打印功能以提高可读性。insertOne
方法:用于创建单个文档。insertMany
方法:用于在单个操作或集合中插入多个文档。ObjectId
对象数据类型:用于存储对象标识符。updateOne
:用于更新具有指定键的单个文档。updateMany
:用于更新集合中所有符合指定过滤条件的文档。
您可能会在许多数据库管理系统中使用“增删改查”操作与数据进行交互。
信息
检查自己
CRUD 代表什么?
CRUD 是一个缩写词,用于描述以下四种基本数据操作:
- 创建 (Create)
- 读取 (Read)
- 更新 (Update)
- 删除 (Delete)
虽然您可以选择直接从命令行管理数据库,但您也可以使用图形用户界面(GUI)来管理许多常见的数据库管理系统。
使用图形用户界面
如果您决定不使用命令行工具,还有许多不同的 GUI 工具可用于与您的数据库进行工作。
要通过网络处理 MySQL 管理,您可以通过在许多不同的操作系统上安装和保护 phpMyAdmin,或者远程连接到一个 MySQL 托管数据库来使用 phpMyAdmin。您还可以使用 MySQL Workbench 来远程连接到一个 MySQL 服务器。
与 phpMyAdmin 类似,pgAdmin 是用于管理 PostgreSQL 的 Web 界面。您可以在服务器模式下安装和配置 pgAdmin,或者使用它来安排 pgAgent 自动备份。
对于 MongoDB,您可以考虑使用 MongoDB Compass 作为访问数据库的图形界面。
无论您选择使用命令行还是图形界面来管理数据库,您现在都有管理数据库系统所需的工具。
接下来怎么办?
通过更深入地理解数据库和流行的数据库管理系统,您可以存储和管理您的数据,或者构建一个使用数据库系统的应用程序。
若想了解与特定数据库管理系统协作的更多信息,请关注我们的《如何使用 SQL》和《如何使用 MongoDB 管理数据》系列。如果您在使用 MySQL 时遇到问题,可以根据《如何在 MySQL 中解决问题》进行调试。至于 MongoDB 的问题,请参考《如何执行 MongoDB 中的 CRUD 操作》来评估您的问题与之相关性。
当您准备用数据库构建您的应用程序时,尝试按照这些常见应用程序堆栈设置的教程进行操作:
- 如何安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈在 Ubuntu 22.04 上
- 如何安装 Linux、Nginx、MySQL、PHP (LEMP) 堆栈在 Ubuntu 22.04 上
- 如何安装 Linux、OpenLiteSpeed、MariaDB、PHP (LOMP) 堆栈在 Ubuntu 22.04 上
如果您喜欢使用全托管的数据库构建应用程序,可以查看 Silicon Cloud 提供的托管 MongoDB 集群、MySQL 或 PostgreSQL 托管以及托管 Redis。您还可以选择 Silicon Cloud Marketplace 中的一键安装来使用流行的数据库选项。
通过对数据库的新认识,您可以继续在容器和安全方面深入学习云技术。如果您还没有看过我们关于云服务器和 Web 服务器的入门文章,不妨去看一看。