数据库简介

常用数据库术语表

分享到

简介

在处理数据库时,有很多术语是你必须学习的,以便理解这项技术,如何最好地使用它,以及它如何与你环境的其他部分相关联。本术语表旨在收集数据库社区中常用的术语,并提供定义和上下文,以帮助你增长知识。

本术语表是一个正在进行中的工作,也是一份鲜活的文件。我们计划随着时间的推移对其进行更新,以添加新主题并完善现有条目。我们积压了一些希望在不久的将来添加的术语,但如果你有任何希望我们讨论的内容,请打开一个 GitHub issue 以添加你的建议。

术语

1NF
1NF,或第一范式,描述了一种数据库规范化类型,其中每个表列只有一个值。一个列,如果其值是嵌套表或多个值,则不符合 1NF。
2NF
2NF,或第二范式,描述了一种数据库规范化类型,它:1) 满足 1NF 的要求,2) 没有直接绑定到候选键子集的值。换句话说,如果一个关系符合 1NF,并且所有非候选值都完全依赖于组合键,而不仅仅是候选键的一部分,则该关系符合 2NF。例如,如果一个 `book` 表的候选键由 `title` 和 `author` 组成,但它也包含描述作者出生日期的 `dob` 字段,则该表不能符合 2NF。该列值仅依赖于 `author` 的值,如果值不同步,可能会导致不一致。
3NF
3NF,或第三范式,描述了一种数据库规范化类型,它:1) 满足 2NF 的要求,2) 每个非键属性都不传递依赖于键属性。例如,如果一个 `user` 表有一个作为主键的 `user_id` 列、一个 `user_city` 列和一个 `user_state` 列,则它不符合 3NF,因为 `user_state` 通过 `user_city` 传递依赖于 `user_id` (城市和州应该提取到它们自己的表中并一起引用)。
4NF
4NF,或第四范式,描述了一种数据库规范化类型,它:1) 满足 BCNF 的要求,2) 对于每个非平凡的多值依赖,依赖中的决定属性要么是候选键,要么是它的超集。换句话说,如果一个字段有多个彼此独立的依赖字段,则可能导致违反 4NF 规则的冗余。
ACID
ACID — 一个由原子性 (atomicity)、一致性 (consistency)、隔离性 (isolation) 和持久性 (durability) 几个词的首字母缩写组成的缩略词 — 描述了数据库事务旨在提供的一组特性。原子性保证事务中的所有操作都将成功完成或回滚。一致性通常被认为是应用程序而不是数据库维护的属性,通常通过事务来实现,以确保所有相关值一次性更新。事务隔离旨在允许同时执行的事务彼此独立运行。持久性意味着事务在提交时应存储在非易失性存储器上。
访问控制列表 (ACL)
访问控制列表,通常缩写为 ACL,是一个安全策略列表,它规定每个用户或进程可以在哪些资源上执行哪些操作。ACL 有许多不同的类型,但它们都描述了系统允许的权限和访问模式。
Active Record ORM
Active Record ORM 是一种对象关系映射器,它的工作方式是尝试将数据库中的每个表表示为应用程序中的一个类。表中的每个记录都表示为该类的一个实例。数据库条目通过与应用程序中的这些表示交互来添加和管理。
反缓存
反缓存是一种策略,当在更快的内存缓存中找不到数据,必须从较慢的持久存储中检索数据时可以使用该策略。该技术涉及中止事务并启动一个异步操作,以从较慢的介质中将数据提取到内存中。稍后可以重试事务,并且信息将准备好从内存中提供。
原子性
原子性主要是与数据库事务相关联的质量,它意味着封装在事务中的操作以全有或全无的方式处理。这可以防止发生部分更新,即在出现错误条件之前执行了一些操作,从而导致数据不一致。在事务的情况下,要么提交所有操作,要么回滚每个操作,使数据库保持在事务开始时的状态。
属性
属性是描述数据库中某个实体的特征。在 ER(实体-关系)模型中,属性是任何不是关系的附加属性,这些属性添加有关实体的信息。
身份验证
身份验证是验证身份的操作。在计算和数据库中,身份验证主要用作证明请求访问的人员或进程具有凭据以验证他们可以使用特定身份进行操作的方式。实际上,这可能包括提供身份(如用户名)和相关的身份验证材料(如密码、证书或密钥文件,或属于与该身份关联的人员的硬件设备生成的密钥)。身份验证与授权结合使用,以确定用户是否有权在系统上执行操作。
授权
授权是确定是否应允许特定用户或进程执行特定操作的操作。授权涉及根据一组指导方针检查请求的操作,这些指导方针描述了谁应该被允许执行哪些操作。授权通常依赖于在请求之前发生的受信任的身份验证过程,以确认主体的身份。
可用性
可用性是描述系统运行并能够执行工作的程度的属性。就数据库等计算系统而言,对于单台机器,可用性与该计算机上应用程序的正常运行时间同义。对于分布式系统,可用性受规则约束,这些规则规定了如果系统的子集不可用,系统在何种程度上被允许继续运行。
BASE
BASE — 一个由基本可用 (Basically Available)、软状态 (Soft-state) 和最终一致 (Eventually consistent) 几个词的首字母缩写组成的缩略词 — 描述了一些 NoSQL 数据库的一组特性。它被用作对某些不符合 ACID 兼容性(原子性、一致性、隔离性和持久性)描述的属性的数据库的描述。在网络分区的情况下,BASE 数据库选择保持可用性,但牺牲严格的数据一致性。软状态组件指的是系统状态可能处于变化之中,因为不同的成员协商系统中最正确的值。最终一致是另一个相关的声明,表明系统最终将在足够的时间内实现一致性,并假设在此期间不会引入新的不一致性。
BCNF
BCNF,或 Boyce-Codd 范式,描述了一种数据库规范化类型,它:1) 满足 3NF 的要求,2) 其中每个依赖中的决定属性(决定另一个属性值的属性)要么是依赖属性的_超集_,要么是候选键,要么是候选键的超集。
蓝绿部署
蓝绿部署是一种通过管理两组相同基础设施之间的活动流量来部署软件更新的技术,几乎没有停机时间。新版本可以部署到非活动基础设施组并进行独立测试。要发布新版本,流量路由机制会切换,将流量从当前基础设施定向到具有新版本的基础设施。先前活动的 инфраструктура 现在充当下一个更新的目标。此策略很有帮助,因为路由机制可以轻松地来回切换,以便根据部署的成功与否向后或向前滚动。
瓶颈
在计算中,当系统的性能或容量受到围绕单个组件的争用限制时,就会发生瓶颈。在数据库中,这可能与数据库运行的硬件或可用的网络环境有关。应用程序使用模式也会影响哪个资源最受争用。要解决瓶颈,你必须首先确定限制系统性能的资源,然后添加额外的容量或采取措施来降低使用率。
CAP 定理
CAP 定理是关于分布式数据库的陈述,它指出任何系统最多只能提供以下三个质量中的两个:一致性、可用性和分区容错性。通常,人们一致认为分区容错性必须是任何分布式系统的特性(因为避免所有网络分区的唯一方法是拥有非分布式系统)。因此,每个分布式系统都必须决定是优先考虑数据一致性(在发生分区的情况下不接受新更改)还是系统可用性(为了在分区期间仍然能够引入新更改而牺牲一些一致性)。
CRUD
CRUD — 代表创建 (Create)、读取 (Read)、更新 (Update) 和删除 (Delete) 的首字母缩写词 — 描述了用于操作存储数据的基本操作。在 SQL 中,CRUD 的组件大致对应于 `INSERT`、`SELECT`、`UPDATE` 和 `DELETE` 操作,但许多其他操作有助于更精细的操作。更广泛地说,CRUD 也经常在用户界面和 API 的上下文中讨论,作为对系统可能允许的操作类型的描述。
缓存
缓存是系统的一个组件,旨在允许更快地检索高价值或频繁请求的数据片段。一般来说,缓存通过将有用的数据部分存储在性能更高或更靠近客户端的介质上,而不是专注于长期、非易失性存储的通用持久介质上。一般来说,缓存往往具有更高的性能,但往往容量更有限且更昂贵。
旁路缓存
旁路缓存是一种缓存架构,它将缓存置于应用程序和数据库之间的常规路径之外。在这种安排中,如果缓存中可用数据,应用程序将从缓存中获取数据。如果数据不在缓存中,应用程序将向原始数据源发出单独的查询以获取数据,然后将该数据写入缓存以供后续查询使用。缓存和后备数据源之间的最小交叉允许此架构对不可用缓存具有弹性。旁路缓存非常适合读取密集型工作负载。
缓存失效
缓存失效是定位和从缓存中删除特定项的过程。大多数情况下,这是在更新记录时作为例行程序的一部分执行的,以便缓存中的数据不会向客户端提供过时的数据。
金丝雀发布
金丝雀发布描述了一种发布策略,其中软件的新版本被部署到一小部分服务器上,以在影响有限的环境中测试新更改。观察测试组的部署和结果行为,然后团队可以决定是否要回滚更改或继续将更改部署到更广泛的主机。金丝雀发布是一种在生产环境中进行测试的方式,同时限制受任何问题影响的客户端数量。
候选键
关系数据库中的候选键是最小超键的术语。换句话说,候选键是可以用来唯一标识关系中每个记录的任何列或列组合,而不包括无助于特异性的列。在 `cars` 表中,唯一的 `car_id` 列将是一个候选键,`make`、`model` 和 `year` 列的组合也是如此(假设它足够具体以消除任何重复项)。但是,`car_id` 和 `make` 不会是候选键,因为在这种情况下,`make` 对缩小每行记录的唯一性没有任何作用。
级联
在关系数据库中,级联是处理在其他表中具有相关条目的记录的删除或更新操作的一种选项。级联意味着操作(删除或更新)也应应用于子级、依赖行。这有助于你在删除的情况下避免孤立行,在更新的情况下避免不同步的值。
Cassandra
Apache Cassandra 是一个分布式、宽列 NoSQL 数据库,专注于操作和管理大量数据。Cassandra 具有极好的可扩展性,集群中的每个节点都可以接受读取或写入。数据存储在唯一可识别且基于分区键分区的行中。每个分区键返回一行数据,其中列名和值都在内部定义,这意味着同一列族中的每一行可能包含不同的列。
检查约束
检查约束可能是可以添加到关系数据库的最灵活的表或列约束。它被定义为必须满足的布尔条件,以便系统接受建议的数据。由于条件的性质相当开放,检查约束可以用来建模许多不同类型的要求,以确保进入系统的数据符合预期。
集群
在计算中,集群是一组计算机,它们都致力于帮助完成共享任务。与部署在单台计算机上的数据库相比,数据库集群用于提高某些类型操作的容量、可用性和性能。不同的集群系统采用许多不同的拓扑、技术和权衡,以实现不同级别的性能或容错能力。由于不同实现的 다양성,因此很难概括适用于所有集群数据库系统的特定特征。
排序规则
数据库中的排序规则是指不同字符系统的排序和比较特征。大多数数据库允许你分配排序规则设置,这会影响系统中文本的排序、显示以及相互比较的方式。排序规则通常使用一组标签来定义,这些标签描述字符集、语言环境以及关于大小写、重音和其他字符修饰符的敏感性或不敏感性的不同选项。
集合
在文档数据库中,集合是用于将文档组存储在一起的容器。集合可能具有应用程序和数据库设计人员分配的语义含义,但除此之外,它们只是在系统中将不同组的文档彼此分开的一种方式。可以为不同的集合分配不同的属性,并且可以执行针对特定文档集合的操作。
列是面向表的数据库的组件,它标记并可能定义存储在该列中的每个值的类型。在传统的关系数据库中,一系列列的属性是定义表总体属性的主要方式之一。添加到表中的每一行都必须提供符合与表列相关的要求的值。在非关系数据库中,列可以具有许多不同的属性。然而,通常,它们用于标记和定义记录选择存储在该列中的值的特征。
列式数据库
列式数据库或面向列的数据库是一种面向表的数据库,类似于传统的关​​系数据库,它在后台按列而不是按记录存储数据。这意味着与单个列关联的数据存储在一起,而不是将与单个记录关联的所有数据分组在一起。这可以根据使用模式提供不同的性能特征,但通常不会影响用户每天与表中数据的交互方式。尽管在文献中经常混淆,但列式数据库不应与宽列数据库或列族数据库混淆。
列族
列族是一个数据库对象,它存储键值对组,其中每个键是行标识符,每个值是一组列名和值。总而言之,列族构建的东西类似于关系数据库中的表。但是,每行都可以定义自己的列,这意味着行的长度各不相同,并且在表示的列或存储的数据类型中不必相互匹配。
命令查询职责分离
命令查询职责分离是一种应用程序设计模式,允许你根据操作对底层数据库的影响来分离操作。一般来说,这通常意味着为读取数据的查询和更改数据的查询提供不同的机制。分离这两个上下文允许你进行基础设施和系统更改,以独立扩展每个用例,从而提高性能。
提交
在数据库的上下文中,提交数据是你执行和持久存储一组建议操作的过程。许多数据库配置为在系统接收到每个语句时自动提交它,但事务就是一个你可以通过将多个语句组合在一起并将它们作为一个组提交来控制数据库的提交行为的机制。在数据库中提交是实际负责在系统上执行永久操作的操作。
复合键
在关系数据库中,复合键是由两列或多列组成的键,可用于唯一标识表中的任何记录。例如,如果我们有一个 `shirts` 表,该表仅为大小和颜色的每种组合存储一个记录,则可以具有由 `color` 和 `size` 列的组合定义的复合键。
并发
并发是系统同时处理多个任务而不影响总体结果的能力。并发允许系统并行执行操作,从而提高任务组的相对性能。
连接池
连接池是一种用于通过管理应用程序和数据库之间的连接来提高性能并避免连接耗尽的策略。它通过维护到数据库的连接池来实现这一点。通过保持连接打开并将其重用于多个查询,应用程序可以免去每次都必须建立连接的开销,并且数据库的连接限制可以由池组件管理。
一致性
一致性是数据系统的一种属性,它意味着即使引入更改,各个数据实体也不会冲突,并且继续建模它们打算建模的信息。必须验证每条数据和更改,以确保它符合对数据结构施加的规则,并且必须注意平衡任何应该影响其他数据的更改(例如同时借记和贷记不同的帐户)。
约束
约束是对特定列或表施加的限制,它会影响系统接受的值的范围。约束用于定义数据库系统可以强制执行的规则,以确保值符合要求。
游标
数据库游标是客户端以受控、精确的方式迭代记录和查询结果的一种方式。游标主要用于逐页浏览与查询匹配的结果,方法是迭代地返回下一行进行处理。这可以帮助你通过将结果作为队列访问来操作未知数量的记录。使用游标时必须小心,因为它们会占用数据库系统上的资源,可能导致锁定,并且通常会导致比其他情况下需要的更多网络往返。
暗发布
暗发布是一种部署和发布策略,可帮助组织在生产环境中测试新更改,而不会影响用户体验。暗发布涉及与原始功能并行发布新代码。然后,请求和操作被镜像并针对旧代码和新代码运行。虽然从用户的角度来看,系统的行为仅受原始代码的影响,但可以使用真实数据测试新代码,以验证功能并捕获性能和功能问题。在经过适当审查后,可以更改应用程序以专门使用新的代码路径。
数据
从最广泛的意义上讲,数据是事实或信息片段。它们是包含有关某事物的信息的度量或值。在某些情况下,数据被定义为与信息不同,因为信息是经过分析或处理的数据,而数据仅包含原始值。然而,实际上,这些术语通常用作同义词,并且通常封装任何事实以及解释或情境化它所需的上下文。数据几乎是所有通信和活动的重要组成部分,并且当数据被收集、分析和情境化时,它可以获得意义和价值。
数据定义语言 (DDL)
数据定义语言 (DDL) 是一组用于定义数据库结构和对象的命令或操作。它们是关系数据库和其他数据库的关键组件,并且表示为可用于在 SQL 等语言中管理数据的可用命令的子集。数据定义语言是语言中专门用于描述、创建和修改结构以及将保存数据的框架的部分。
数据独立性
数据独立性是一个术语,用于描述数据库客户端或应用程序与负责表示和存储数据的底层结构的分离。如果数据库能够以一种方式抽象结构,使得用户应用程序即使在关系中添加了额外的属性(逻辑独立性)或存储介质的细节发生变化(物理独立性)时,例如,也能继续运行,则可以实现数据独立性。
数据映射器 ORM
数据映射器 ORM,或简称为数据映射器,是一个应用程序组件,充当数据库表示形式和应用程序中存在的数据结构之间的中介,以进行转换。数据映射器允许您的应用程序逻辑和数据库数据表示形式保持独立。数据映射器管理并在这两种媒介之间转换数据,以便每种表示形式都是独立的,并且可以智能地构建。
数据类型
数据类型是一个类别或属性,它表达了对有效值的约束。例如,整数类型指定只有整数才适用于变量或字段并被期望。数据类型允许您在定义字段或容器时指定关于数据的期望和要求。然后,编程语言或应用程序可以验证引入的数据是否满足必要 criteria。数据类型也有助于确定可以对一段数据执行的可用操作。
数据库
数据库是用于组织、结构化和存储数据的结构。数据库通常由数据库管理系统管理,数据库管理系统提供一个界面来操作和与数据库及其管理的数据进行交互。数据库可以是高度结构化的,也可以允许更灵活的数据存储模式,并且可以以允许在检索时查询、回忆和组合数据的方式存储许多不同类型的数据。
数据库抽象层
数据库抽象层是一个编程接口,它试图抽象底层数据库技术之间的差异,从而为应用层提供统一的体验或界面。数据库抽象层通常对开发人员很有帮助,因为它们有助于规范各种产品之间的实现差异,并且即使底层技术不断发展,也能保持稳定。然而,也存在一些挑战,例如抽象泄漏、向用户屏蔽特定于实现的特性或优化,以及创建难以消除的依赖关系。
数据库管理员 (DBA)
数据库管理员,或 DBA,是一个负责配置、管理和优化数据库系统以及相关的软件和硬件生态系统的角色。他们可能参与的一些职责包括架构规划、配置、模式和变更管理、迁移、复制和负载均衡、分片、安全考虑、管理备份策略等等。数据库管理员通常需要具备数据库设计和理论方面的专业知识,并能够帮助组织就数据库技术选择和实施做出决策。在许多现代组织中,传统上由 DBA 承担的职责现在已分配给开发和运维团队的各个成员,或者已外包给外部提供商,以简化工作的基础设施管理部分。
数据库引擎
数据库引擎是数据库管理系统的一部分,负责定义数据如何存储和检索,以及支持与系统和数据交互的操作。一些数据库管理系统支持提供不同特性和设计的多个数据库引擎,而另一些系统只支持一个旨在与软件目标对齐的数据库引擎。
数据库管理系统 (DBMS)
数据库管理系统,通常称为 DBMS,甚至简称为“数据库”,是一个负责组织和管理数据的应用程序。DBMS 可以遵循许多不同的范例并优先考虑某些目标。一般来说,至少,它们负责持久化数据、组织和分类数据以及摄取、操作和查询数据。最常见的是,DBMS 提供客户端/服务器模型,其中服务器负责控制和管理数据,而客户端、库或 API 可用于与服务器交互以添加或查询数据、更改数据结构或管理系统的其他方面。
数据库模型
数据库模型是数据库管理系统用于存储、组织和提供数据访问的总体策略。有许多不同的数据库模型可用,但关系模型可能是最常见的类型,它使用高度结构化的表以特定格式存储数据。其他类型的数据库包括文档数据库、宽列数据库、分层数据库、键值存储等等。一些数据库系统被设计为“多模型”的,这意味着它们支持在同一系统中运行具有不同类型模型的数据库。
数据库代理
数据库代理是一个软件组件,负责管理数据库客户端和数据库服务器之间的连接。使用数据库代理的原因有很多,包括组织对有限数量连接的访问、允许数据库层透明扩展以及为部署和类似场景重定向流量。数据库代理通常被设计为对应用程序透明,这意味着应用程序可以连接到代理,就像它们直接连接到后端数据库一样。
数据集
数据集,有时拼写为数据集合,是数据的单个集合。通常,这代表适用于特定任务、应用程序或关注领域的chunks相关数据。通常,数据集是数据本身以及解释数据所需的结构和上下文的组合。它们通常由定量和定性值的组合组成,这些值可以作为进一步分析和解释的原始数据。
反规范化
反规范化是一个过程,数据库中的数据和结构被“反规范化”或从规范化状态中取出。如果旨在规范化的数据结构定义不明确或管理不善,则可能会意外发生这种情况。但是,在某些情况下,它通常也是有意执行的。反规范化倾向于通过在不同位置冗余地存储值来允许更快地访问数据。这样做带来的缺点是写入性能会受到影响,并且由于使用多个位置来表示相同的数据,因此数据可能会失去同步。
脏读
脏读是一种可能发生的特定类型的异常,其中一个事务可以读取另一个事务尚未提交的数据。如果第二个事务被回滚而不是提交,则第一个事务将使用一个不反映数据库实际状态的值。脏读在事务的某些隔离级别下是可能的,并且代表着在并行操作数据时可能导致不一致的风险。
分布式数据库
分布式数据库是一个跨越多个物理系统的数据库系统。为了性能或可用性,数据分布在多台机器上。虽然分布式系统可以帮助扩展数据库以处理更多负载,但它们也代表着复杂性的显著增加,这可能导致一致性和分区挑战,以及某些负面的性能影响,例如在某些情况下数据写入的增加。
文档
在文档数据库的上下文中,文档被认为是信息的容器,代表包含相关描述性数据的单个记录或对象。文档可以具有灵活的结构,不必与系统上的其他文档匹配,并且通常可以嵌套。文档通常以数据序列化格式(如 JSON 或 YAML)表示,这些格式可以使用标签和元数据组织文档。
文档数据库
文档数据库是一种数据库模型,它以称为文档的单个对象表示项目。虽然文档可以组合在一起进行组织,但它们不必共享相同的结构,并且可以设计为唯一地捕获描述所讨论项目所需的数据。文档数据库通常不支持强大的连接操作来链接不同的文档,但由于它们的灵活性以及在表示程序化数据结构方面的简易性,它们通常因其灵活性和快速的生产力时间而受到赞誉。
持久性
持久性是数据的一种质量,表示数据已被捕获到持久性存储上,即使在程序崩溃的情况下也能幸存下来。通常,这意味着将数据刷新到非易失性存储介质,如不需要电力来维持状态的硬盘驱动器。
编码
编码是一种系统,它在可以表示书面语言中使用的组件的字符系统与计算机可以存储和操作的数字表示形式之间进行转换。已经开发了具有各种字符范围的不同编码系统。有些针对特定语言或语系(如 ASCII),而另一些则试图为适用于多种不同语言的更大字符集提供表示(如 UTF unicode 变体)。
加密传输
加密传输是任何类型的通信过程,它在将消息发送给接收者之前对其进行加密。传输加密对于确保隐私(防止他人看到敏感信息)以及避免篡改(使数据操纵显而易见)是必要的。部署数据库时可以使用许多不同的加密传输系统,包括 TLS/SSL 加密、VPN 和专用网络。
短暂性
短暂性是一种特性,它表明一条数据或情况不是永久性的。在许多方面,它与持久性相反。在数据库中,某些项目(如您希望持久化的数据)不应该是短暂的。但是,其他组件(如用于加密数据库和客户端之间连接的密钥)可以通过防止密钥泄漏影响未来或过去的会话而受益于短暂性。
临时存储
临时存储,有时也称为易失性或非持久性存储,是任何在短时间内持续存在的存储介质,通常与某些条件相关联。例如,在应用程序中,存储在内存中的数据只会在进程运行时幸存下来。同样,存储到临时目录的数据仅在系统重新启动之前可用。通常,临时存储对于临时数据或在数据可以存储在更永久的介质上之前的暂存区域很有用。
最终一致性
最终一致性是对某些分布式计算或数据库系统实施的一致性/可用性策略的描述。分布式系统的 CAP 定理指出,系统必须选择是在网络分区的情况下优先考虑可用性还是数据一致性。最终一致性系统选择通过继续服务请求来支持可用性,即使服务器的对等方不可用以确认操作。最终,当分区解决后,将运行一致性例程来决定任何不一致数据的最正确状态,但在一段时间内,不同服务器上的数据将不一致。
驱逐
在缓存的上下文中,驱逐是从缓存中删除一条数据的过程。这可能是因为当前值已被操作无效,或者可能是由于旨在删除最旧或最少使用的数据的策略而自动发生。
扩展和收缩模式
扩展和收缩模式是一种在不影响现有应用程序的情况下向数据库模式引入新更改的策略。它的工作原理是在仔细控制的阶段引入更改,首先在现有结构旁边添加新的或更改的结构,然后扩展应用程序逻辑以同时使用这两种结构。最终,经过测试后,应用程序可以停止写入原始结构,并且可以将其删除。
提取-转换-加载 (ETL)
提取、转换和加载,通常缩写为 ETL,是将数据从数据源复制和处理到托管系统的过程。首先,从其当前系统提取数据,使其可供目标系统访问。接下来,对数据进行操作和修改,以匹配新系统的要求和格式。最后,将重建的数据加载到新系统中。
功能标志
功能标志或功能开关是一种编程策略,涉及将功能门控在外部开关或控件之后。该开关通常首先设置为指示该功能不应处于活动状态。当组织准备就绪时,他们可以激活该开关,程序将开始使用其新功能。这允许部署新功能而无需立即激活它们。它将新软件的部署与软件的发布分离,从而更好地控制如何引入更改以及在生产环境中进行更多测试。
字段
数据库列或字段是数据库表中特定类型数据的容器。关系数据库中的数据库字段是规则的,因为表中的每一行都将包含相同数量的字段,并且具有相同的特征。数据库字段可以包含的值可以由分配给字段的数据类型以及进一步限制有效值的约束来控制。
平面文件数据库
平面文件数据库是存储在文件中的数据库或类似数据库的结构。这些定义了数据库包含的结构和数据,并采用统一的格式。平面文件数据库的许多示例,如 CSV(逗号分隔值)文件,都是以纯文本编写的,但也存在二进制格式。平面文件数据库和更复杂类型之间的区别之一是,存储格式本身通常负责描述数据之间的关系,而不是数据库系统。
外键
外键是关系数据库中指定的列或列组,用于维护两个表之间的数据完整性。一个表中的外键引用另一个表中的候选键,通常是主键。由于引用了候选键,因此数据库中的每一行都将是唯一的,并且两个表可以逐行链接在一起。这些指定列的值预计在两个表中保持相同。外键约束允许数据库系统通过不允许值不同步来强制执行此要求。
全文搜索描述了一系列技术和功能,允许您搜索数据库系统中文档的完整文本。这与仅依赖于元数据、部分文本源和其他不完整评估的搜索功能直接相反。全文搜索依赖于异步索引,使用自然语言感知解析器来分析和分类文档中的文本。
图数据库
图数据库是一个 NoSQL 数据库,它使用图结构来存储和定义数据片段之间的关系。图数据库使用节点构建,节点表示实体,并且可以包含属性或特性。节点使用边相互连接,边不仅负责链接节点,还负责定义关系的性质。例如,一个节点可能描述一个人,其属性为“教师”。它可以连接到一个类节点,边的名称指定“教授”,但可以连接到另一个人员节点,边的名称指定“已婚”。
GraphQL
GraphQL 是一种可用于查询和操作数据的语言,常用于构建 API。客户端能够指定所需的确切数据,服务器会按照提供的结构制作响应。GraphQL 的优势在于它能够使用自定义结构返回数据、将来自各种后端的数据拼接在一起以及在单个 API 调用中回答复杂查询。
HTAP 数据库
HTAP 数据库,或混合事务/分析数据库,是一类数据库,旨在提供快速、可靠的事务处理以及在同一机器上并发处理繁重、复杂的分析工作负载的能力的优势。这些数据库产品试图允许实时分析,而不是在事后分析数据,这种分析可以快速影响决策的制定方式。
分层数据库
分层数据库是一种将其自身组织成树状结构的数据库模型。每个新记录都附加到单个父记录。随着记录添加到数据库中,当记录从根记录中越来越多地扇出时,就会出现树状结构。可以遍历记录之间的链接以访问其他记录。使用分层模型的系统示例包括 LDAP(轻型目录访问协议)和 DNS(域名系统)。
水平扩展
水平扩展,也称为横向扩展,是一种扩展策略,涉及增加可以执行给定任务的单元数量。这通常意味着增加工作池中可以响应请求的计算机数量。横向扩展具有许多优点,包括成本、灵活性和可以处理的流量级别,但可能会增加协调和复杂性方面的复杂性,尤其是在涉及数据时。
热备份
热备份是在数据库系统正在积极使用时对数据库系统进行的备份。如果可能,它们通常更可取,因为它们不需要数据库系统脱机即可执行操作。热备份并非总是可行,因为它们可能需要锁定数据库的某些部分,或者可能会降低可用于正常数据库任务的 IOPS(每秒输入/输出操作数)。
内存数据库
内存数据库是一种数据库系统,其中整个数据集都可以加载到计算机内存中并在其中进行处理。这种处理模型提供了巨大的性能优势,因为所有数据都已在主内存中,并且没有从较慢的存储中检索数据的延迟。使用内存数据库时必须小心,要有持久化数据或在机器重新启动时重新填充内存信息的策略。
索引
数据库索引是一种创建用于在表中更快查找记录的结构。索引允许数据库系统通过为特定列的值保留单独的结构来有效地查找数据。以索引列为目标的查询可以通过使用比逐行检查每一行更有效的查找策略来快速识别表中的适用行。索引列提高了读取操作的性能,但确实增加了写入操作的开销,因为必须同时更新表和索引。在设计表索引时,平衡这两个考虑因素非常重要。
摄取
摄取数据是将新数据导入数据系统的行为。这可以是一次性数据加载操作,也可以是持续消费其他系统生成的数据。数据摄取是填充和更新分析数据库和大数据存储的常见阶段,因为它们通常涉及整合来自各种来源的数据。
内连接
内连接是一种关系数据库操作类型,它通过仅返回连接列值在两个表中都存在的行来连接两个表。使用内连接,两个表中的连接列都必须匹配。没有使用 `NULL` 值来填充从一个表或另一个表中缺失的行的行。
交互式事务
交互式事务是一种数据库事务功能,允许客户端以 ad-hoc 方式手动指定事务操作。交互式事务不是事务围绕一组可以按顺序执行而无需暂停的查询的包装器,而是允许开发人员短暂暂停其数据库操作以执行其他逻辑,然后再继续进行事务处理。这为事务处理提供了灵活性,但如果管理不当,可能会导致不必要的事务运行时间。
隔离
在数据库的上下文中,隔离是一个属性,描述了数据和操作在事务内部和事务之间如何可见。隔离级别可以由数据库管理员或查询作者设置,以定义隔离级别和性能之间的权衡。隔离是 ACID 缩写词描述的关键保证之一。
隔离级别
隔离级别描述了数据库在处理事务时可以在隔离和性能之间进行的不同类型的权衡。隔离级别决定了事务之间可能发生的数据泄漏类型或可能发生的数据异常类型。一般来说,更高的隔离级别提供更多的保证,但代价是处理速度较慢。
连接
在关系数据库中,连接是一种操作,它基于共享的“连接”列或列连接两个表。连接列中的值在每个表中必须是唯一的。连接操作基于连接列值匹配行,以创建由每个表中的列组成的扩展虚拟行。基于用户想要如何处理在另一个表中没有匹配项的行,可以使用不同类型的连接。
在数据库的上下文中,键是可以用来唯一标识单个行的任何属性、列或属性或列的组。某些数据片段可以用作键,因为它们具有天然的唯一性(自然键),而其他数据集可能需要生成键来标识每个记录(代理键)。每个表或数据集合可以有多个唯一标识行的键(称为候选键),但通常,有一个主键(称为主键)被指定为访问行的主要方式。
键值数据库
键值数据库或键值存储是一种数据库模型,它允许用户使用键存储和检索具有任意结构的数据。键用于标识和访问记录,记录可以由单个值或更复杂数据结构组成。键值数据库中的每个记录都可以定义自己的结构,因此不像关系数据库那样存在统一的表结构。键值数据库很有用,因为它们非常灵活,并且使用的模型对许多面向对象的开发人员来说很熟悉。
左连接
左连接是关系数据库的一种连接操作,其中返回指定的第一个表的所有行,而不管是否找到了第二个表中的匹配行。连接操作通过匹配来自每个表的指定比较列中具有相同值的记录来构造虚拟行。左连接的结果将包含列值匹配的两个表中的行,并且还将额外包含来自第一个表(或左表)的所有不匹配行。对于这些行,与第二个表(或右表)关联的列将填充 `NULL` 值,以指示未找到匹配行。
词位
词位是在自然语言处理和全文搜索上下文中相关的语言级意义单位。通常,当文本被索引时,它被分解成单独的标记,然后使用语言级资源(如字典、同义词库和其他词表)将这些标记分析为词位,以了解如何进一步处理它们。
区域设置
在数据库和一般计算中,区域设置指定在执行操作和呈现结果时应使用的区域、语言、国家/地区和其他上下文数据片段。在数据库中,区域设置设置会影响列排序、值之间的比较、拼写、货币标识符、日期和时间格式等等。在数据库服务器级别定义正确的区域设置或在数据库会话期间请求您需要的区域设置对于确保执行的操作将产生预期的结果至关重要。
在数据库中,锁是一种用于防止修改数据库记录或表的技术,以便在某些操作期间保持一致性。锁可以阻止对锁定资源的任何访问,或者仅阻止执行某些操作。可以为特定记录或整个表发出锁。由于锁阻止并发操作访问锁定数据,因此锁定数据可能会影响性能并导致资源争用。
MariaDB
MariaDB 是一个开源关系数据库系统,其开发目标是在 Oracle 收购 MySQL 后,为 MySQL 提供一个直接替代品,因为社区中的一些人对该项目的未来方向感到不确定。自从最初的分支以来,每个项目都添加了功能,这些功能扩大了两个数据库系统之间的差距。
微服务架构
微服务架构是一种应用程序和服务设计,它影响组件的开发、部署和操作。微服务方法分解应用程序的功能,并将每个职责实现为离散的服务。服务不是内部函数调用,而是使用明确定义的接口通过网络进行通信。微服务通常用于帮助加快开发速度,因为每个组件都可以独立编码和迭代。它还有助于可扩展性,因为每个服务都可以根据需要进行扩展,通常借助服务编排软件。
迁移(数据库、模式)
数据库或模式迁移是用于将数据库结构转换为新设计的过程。这涉及修改数据库或表的现有模式以及转换任何现有数据以适应新结构的操作。数据库迁移通常相互构建,并作为版本控制中的有序列表存储,以便可以通过顺序应用迁移文件从任何以前的版本构建当前数据库结构。通常,开发人员必须就如何最好地修改现有数据以适应新结构做出决策,这可能包括以前不存在的列或难以轻易反转的数据更改。
MongoDB
MongoDB 是当今使用最流行的面向文档的 NoSQL 数据库系统。它使用类似 JSON 的结构存储数据,这些结构可以在数据存储时指定。每个文档都可以有自己的结构,具有所需的复杂性。MongoDB 提供了非 SQL 方法和命令,以编程方式或交互方式管理和查询数据。MongoDB 以其快速的性能、可扩展性和实现快速开发节奏而闻名。
单体架构
单体架构是一个术语,用于指代传统应用程序。在单体应用中,尽管不同的部分可能会在内部进行分解以方便开发,但一旦构建完成,应用程序就是一个具有许多不同功能和职责的单个项目。单体应用可以通过多种方式与外部世界交互,但程序内不同功能的通信和协调发生在内部。单体架构有时被认为更容易实现,但确实存在可伸缩性和可用性方面的不灵活性,因为整个应用程序必须作为一个单元进行纵向扩展和收缩。
多版本并发控制 (MVCC)
多版本并发控制(MVCC)是一种允许多个用户并发访问数据库系统中数据的一种策略,它是行级和表级锁定的替代方案。MVCC 的工作原理是为每个访问数据集的用户创建代表一致数据状态的“快照”。MVCC 的目标是提供一个系统,在该系统中,读取查询永远不会阻塞写入查询,并且写入查询永远不会阻塞读取查询。每个客户端都能够读取和使用数据,就像他们是唯一用户一样,而数据库系统会跟踪每个用户正在读取和更新的数据的多个版本。锁定或正常的事务回滚和冲突管理策略用于解决因更新相同数据而引起的冲突。
MySQL
MySQL 是当今最流行的关系数据库系统之一。MySQL 最初于 1995 年发布,并于 2010 年被 Oracle 收购,它作为强大且易于使用的关系系统有着悠久的历史。它提供了广泛的存储引擎,并拥有非常广泛的社区支持。它被用于许多流行的开源和商业项目,多年来一直被认为是许多互联网服务的关键软件。
Neo4j
Neo4j 是一个高性能的面向图的数据库系统。它提供符合 ACID 的事务处理,采用图数据结构,并使用 Cypher 查询语言来管理和查询存储的数据。Neo4j 使开发人员能够轻松扩展面向图的数据工作负载,并为多种不同的语言提供客户端。
网络数据库
网络数据库是一种早期的数据库模型,它构想的数据对象可以具有比分层数据库更复杂的关系。网络数据库不限制节点与单个父节点和零个或多个子节点的关系,而是允许您表示具有多个父节点的节点。这允许您表示更复杂的结构,但总的来说,该模型已被关系数据库的引入所取代。
NewSQL
NewSQL 是对一类较新的关系数据库产品的描述,这些产品试图弥合关系数据库系统的结构和良好排序保证与 NoSQL 数据库相关的高性能和可伸缩性之间的差距。虽然 NewSQL 是一个相当宽松的分类,但它通常用于指代允许 SQL 或类 SQL 查询、事务保证以及灵活的扩展和分布式处理的数据库。
NoSQL
NoSQL 数据库,有时也称为非关系数据库或不仅仅是 SQL 数据库,是一个广泛的类别,涵盖任何类型的偏离常见关系数据库模型的数据库系统。虽然非关系数据库早已可用,但该类别通常用于指代使用替代模型(如键值存储、面向文档的存储、面向图的存储和列族存储)的新一代数据库。它们通常用于管理不适合关系模型的数据,并非常注重灵活性和可伸缩性。
节点
在数据库中,“节点”通常指代数据库的单个实例。术语“节点”通常在谈论分布式数据库的基础架构时使用,在分布式数据库中,可能涉及多个服务器来处理请求。
不可重复读
不可重复读是一种不希望出现的一致性问题,它可能在某些事务隔离级别下发生。当事务中的重复读取操作可以根据事务外部的提交返回不同的数据时,就会发生不可重复读。这种隔离性破坏是某些事务隔离级别旨在防止的行为类型之一。
规范化
数据库规范化是构造数据库以消除数据冗余并消除引入不一致机会的过程。规范化通常以“范式”来讨论,其中每个范式都比之前的范式添加了额外的检查和保证。在实践中,数据规范化通常是数据完整性保证和性能之间的权衡,因此结构通常不会被置于尽可能高的规范化级别。
OLAP 数据库
OLAP 数据库,或在线分析处理数据库,是一种主要设计用于分析和洞察力生成的数据库系统。用于 OLAP 的数据库不需要与实时事务处理(OLTP 数据库)中涉及的数据库相同的性能特征。相反,它们通常设计用于摄取和处理大型数据集、执行复杂且长时间运行的查询以及生成报告、图表和见解,以帮助做出业务决策。
OLTP 数据库
OLTP 数据库,或在线事务处理数据库,是一种主要设计用于促进快速、近乎实时的数据库任务的数据库系统。通常,OLTP 数据库与多个客户端可能同时访问数据且需要快速响应时间的应用程序一起使用。OLTP 数据库针对可靠性和处理速度进行了优化。
ORM
ORM,或对象关系映射器,是一种数据库工具,旨在在许多数据库使用的关系模型和客户端应用程序中使用的面向对象的数据模型之间进行转换。该工具提供了一种在代码中表示数据库对象并将编程对象转换为适合存储在数据库中的格式的方法。虽然 ORM 可以成为有用的工具,但它们通常不是完美的抽象,并且可能导致不同的模型在如何表示数据上发生冲突的问题。
对象关系阻抗失配
对象关系阻抗失配是一个术语,用于描述许多数据库使用的关系数据模型与许多应用程序中使用的面向对象的数据视图之间普遍存在的张力。阻抗失配是指两种模型之间的差异,使得表示之间的忠实转换变得困难或不可能。这是一个广泛的术语,用于指代该领域中可能发生的许多不同类型的问题,包括表示继承、封装、类型差异、不同的一致性保证等等的问题。
乐观并发控制
乐观并发控制,有时也称为 OCC,是数据库系统用于处理冲突并发操作的一种策略。乐观并发控制假设并发事务可能不会相互干扰,并允许它们继续进行。如果事务尝试提交时发生冲突,则会在此时回滚。如果您认为工作负载中的大多数事务不会相互冲突,那么 OCC 是一种有吸引力的策略。只有确实发生冲突的事务才会受到性能损失(它们将被回滚并且必须重新启动),而所有非冲突事务都可以执行,而无需等待冲突是否会发生。
外连接
外连接是一种关系数据库操作,它通过返回每个组件表中的所有行来连接两个表,即使在伴随表中没有匹配的记录时也是如此。连接操作通过匹配每个表中指定比较列中具有相同值的记录来构造虚拟行。外连接的结果将包含来自两个表的行,其中列值匹配,并且还将包含来自每个表的所有不匹配的行。对于这些行,另一个表中没有匹配项的列将填充 `NULL` 值,以指示未找到匹配行。
参数化查询
参数化查询,也称为预准备语句,是一种数据库查询,它允许将用户输入作为参数,而不是通过将字符串与用户输入连接起来。参数化查询允许您预先指定查询,包括未知输入,然后在以后提供应在语句中替换的值。这可以防止 SQL 注入漏洞,在这种漏洞中,精心设计的输入可用于使数据库系统错误地解释查询,将值视为可执行的 SQL 代码。
持久性
持久性是数据的一种属性,表示状态将比创建它的进程更持久。持久性是大多数数据库系统的关键部分,并允许在数据库进程或服务器本身重启后再次加载数据。应用程序和数据库可以具有不同级别的持久性,以防止不同类型的故障情况,例如单系统持久性、远程持久性和集群持久性。
持久存储
持久存储是指任何能够在系统断电或断开连接后保持数据的存储介质。持久存储是维护更永久的数据存储库所必需的。通常,持久存储比内存数据等临时存储慢,因此数据库系统使用各种流程在两种存储系统之间按需传输数据,以利用并平衡两种类型的缺点。
悲观并发控制
悲观并发控制,或 PCC,是数据库系统用于处理冲突并发操作的一种策略。与乐观并发控制相反,悲观并发控制会在冲突的可能性出现时立即短路事务。如果频繁发生冲突,则此策略很有用,因为它确保系统不会浪费时间执行由于冲突而无法提交的事务。相反,它在可能发生冲突时强制执行更串行化的执行方法,这种方法速度较慢,但避免了非生产性处理。
幻读
幻读是一种隔离异常,它可能在某些类型的隔离级别下的事务中发生。当事务期间的 `SELECT` 操作由于事务外部所做的更改而返回不同的行时,就会发生幻读。例如,如果您尝试 `SELECT` 表中的所有记录,第一次它可能会返回 8 行,但如果另一个事务提交了额外的行,则重复原始查询将显示不同的结果。
PostgreSQL
PostgreSQL 是一个流行的、高性能的关系数据库系统,以其符合各种 SQL 标准而闻名。PostgreSQL 专注于提供单个、灵活的数据库引擎,而不是为不同的用例提供多个引擎。它具有高度可扩展性,并拥有大量的社区添加项和客户端应用程序。
精确率(搜索)
在搜索性能的上下文中,精确率衡量检索到的结果与给定查询的相关程度。具体来说,搜索精确率定义为相关结果数与返回的所有结果数之间的比率。具有高精确率的查询不会检索到许多与查询无关的项目。
主键
主键是一种数据库键,被指定为唯一寻址数据库行的主要方式。虽然其他键可能能够拉取单个行,但主键专门为此目的标记,系统强制执行唯一性并且不进行 `NULL` 一致性检查。主键可以是自然键(在记录中自然唯一的键)或代理键(专门添加以用作主键的键),并且可以由单个或多个列形成。
查询
在数据库中,查询是用于使用查询语言向数据库管理系统发出请求的格式化命令。数据库系统处理查询以了解要执行的操作以及要返回给客户端的数据。通常,查询用于请求与特定模式匹配的数据、将新数据插入现有结构中,或修改和保存对现有记录的更改。除了针对数据项之外,查询通常还可以操作诸如表结构和服务器设置之类的项目,使其成为系统的通用管理界面。SQL,或结构化查询语言,是与关系数据库一起使用的最常见的数据库查询语言。
查询构建器
查询构建器是在应用程序开发中使用的数据库抽象,使针对数据库的编程更容易。与 ORM 类似,查询构建器提供了一个从应用程序内部与数据库系统交互的接口。但是,查询构建器不是尝试将应用程序对象直接映射到数据库记录,而是专注于提供与数据库操作密切相关的本机函数和方法。这允许您以比直接使用 SQL(或其他数据库语言)字符串更安全、更灵活的方式以编程方式构建查询。
查询语言
查询语言是一种专门用于在数据库中搜索、检索和操作数据的编程语言。SQL,或结构化查询语言,是世界上最常见的查询语言,主要用于管理关系数据库系统中的数据。查询语言操作可以根据过程的重点和目标进行分类,分为用于定义数据结构的数据定义语言 (DDL)、用于系统管理任务的数据控制语言 (DCL) 和用于修改数据的数据操作语言 (DML)。
查询计划器
查询计划器是数据库系统的内部组件,负责将客户端提供的查询转换为可用于实际搜索数据库并构造所需响应的步骤。设计良好的查询计划器可以考虑多种潜在的解决方案,并选择能够提供最佳优化结果的选项。有时,查询计划器不会选择最佳解决方案,数据库管理员必须手动调整选择标准。
Raft 共识算法
Raft 共识算法是一种旨在协调跨节点集群的信息共享、管理职责和故障恢复的算法。该算法提供了一种确保每个成员都同意数据操作的方法,并包括在网络分区或节点中断时进行领导者选举的机制。通常认为它是一种比 Paxos 等替代方案更易于实现的算法 Paxos.
读取已提交隔离级别
读取已提交隔离级别是关系数据库系统的一种事务隔离级别,它提供了最少量的隔离保证。在读取已提交级别,事务保证不受脏读的影响,脏读是一种现象,事务可以读取来自尚未提交的其他事务的数据。不可重复读、幻读和序列化异常在这种隔离级别下仍然可能发生。
读取操作
读取操作通常定义为任何检索数据而不进行修改的操作。读取操作通常应表现得好像底层数据是不可变的。它们可能会修改检索到的数据以更改其格式、过滤它或进行其他修改,但数据库系统中存储的底层数据不会更改。
直读缓存
直读缓存是一种缓存策略,其中缓存部署在支持数据源的路径中。应用程序将所有读取查询直接发送到缓存。如果缓存包含请求的项目,则会立即返回。如果缓存请求未命中,则缓存会从支持数据库中获取数据,以便将项目返回给客户端并将其添加到缓存中以供将来查询使用。在这种架构中,应用程序继续将所有写入查询直接发送到支持数据库。
读取未提交隔离级别
读取未提交隔离级别是关系数据库系统的一种事务隔离级别,它基本上不提供任何隔离。使用读取未提交隔离级别执行的事务可能会遭受脏读、不可重复读、幻读和序列化异常的影响。一般来说,读取未提交级别不是很有用,因为它不满足大多数用户对隔离的期望。
召回率
在搜索性能的上下文中,召回率衡量查询能够检索到多少相关项目。召回率专门定义为查询返回的相关结果数与数据集中的相关条目总数之比。具有高召回率的查询会检索到大量可能与搜索查询相关的项目。
记录
在数据库中,“记录”是一组数据,通常表示单个实体。在关系数据库中,“记录”与表中的“行”同义。每个记录可能具有与其关联的多个数据片段或属性(这些将是关系表中的字段)。
Redis
Redis 是一种流行的高性能键值存储,通常部署为缓存、消息队列或配置存储。Redis 主要是一个内存数据库,但可以选择将数据持久化到非易失性存储。它具有多种类型、灵活的部署选项和高可伸缩性。
关系数据库
关系数据库是一种数据库模型,它根据称为表的预定义数据结构组织数据项。表定义具有特定约束和类型的各种列,并且每个记录都作为表中的行添加。高度规则的数据结构的使用为关系数据库系统提供了多种组合各种表中保存的数据以回答单个查询的方法。关系数据库的名称来源于代数关系,它描述了可用于操作规则数据的不同操作。在大多数情况下,关系数据库使用 SQL(结构化查询语言)与数据库系统交互,因为它允许用户以临时方式表达复杂查询。
关系数据库管理系统 (RDBMS)
关系数据库管理系统,也称为 RDBMS,是管理关系数据库的数据库软件。在实践中,术语 RDBMS 通常与关系数据库互换使用,但从技术上讲,RDBMS 管理一个或多个关系数据库。
可重复读隔离级别
可重复读隔离级别是关系数据库系统的一种事务隔离级别,它提供的隔离性比读取已提交级别更好,但不如可序列化级别的隔离性那么强。在可重复读隔离级别,脏读和不可重复读都被阻止。但是,幻读和序列化异常仍然可能发生。这意味着,虽然对单个记录的读取保证保持稳定,但范围查询(如返回多行的 `SELECT` 语句)可能会因事务外部的提交而发生更改。
复制
复制是将数据从一个系统持续复制和更新到另一个系统的过程。在数据库中,这通常涉及服务器共享更改日志,其他服务器可以读取该日志并将其应用于其自身的数据副本。这允许更改在各种服务器之间传播,而无需每个服务器在执行时批准操作。存在许多类型的复制,它们在共享方法、系统从何处复制数据的架构以及控制复制过程的策略方面有所不同。复制是许多系统中用于维护数据可用性、分配负载以及为备份等离线过程提供数据副本的重要功能。
右连接
右连接是关系数据库的连接操作,其中返回指定的第二个表的所有行,无论是否在第一个表中找到匹配的行。连接操作通过匹配每个表中指定比较列中具有相同值的记录来构造虚拟行。右连接的结果将包含来自两个表的行,其中列值匹配,并且还将包含来自第二个表或右表的所有不匹配的行。对于这些行,与第一个表或左表关联的列将填充 `NULL` 值,以指示未找到匹配行。
基于角色的访问控制 (RBAC)
基于角色的访问控制,也称为 RBAC,是一种安全策略,它根据用户的分配角色限制允许用户的操作。对象上的权限和执行操作的特权被分配给角色,角色是使管理访问更容易的标签。要授予用户与角色关联的功能,可以将用户设为该角色的成员。用户可以成为多个角色的成员,以获得每个角色提供的权限的并集。角色作为一种标准化各种角色所需的特权并简化向用户添加或删除访问权限的方式非常有用。
在关系数据库中,“行”是数据库表中单个记录的表示形式。这些数据库中的行具有预定义的结构,其形式为列的集合,这些列指定数据类型以及对可接受值范围的任何约束。关系表中的每一行都具有相同的列或字段,从而形成非常规则的数据结构。
串行扫描
串行扫描是一种搜索技术,它涉及在搜索时针对查询分析每个潜在的项目。这与基于索引的搜索相反,在基于索引的搜索中,项目被预先考虑和组织,以便实现更快的查询响应。
SQL
SQL,或结构化查询语言,是当今使用最广泛的数据库查询语言。它主要用于处理关系数据,并允许用户创建查询以选择、筛选、定义和操作关系数据库中的数据。虽然 SQL 是一个通用标准,但实现细节差异很大,使其不如预期的那样具有软件不可知性。
SQL 注入
SQL 注入是一种可以针对易受攻击的 SQL 支持的应用程序执行的攻击类型。它的工作原理是精心设计输入,这些输入可用于使数据库系统错误地解释查询,将提交的值视为可执行的 SQL 代码。SQL 注入主要是由开发人员尝试使用字符串连接将未经清理的用户输入与查询字符串组合引起的。可以使用预准备语句(也称为参数化查询)来防止这种情况,其中带有占位符的查询与替换值分开提交给数据库,以便查询值的边界明确。
SQLite
SQLite 是一个关系管理数据库系统,编写为 C 语言库。由于它是作为库实现的,因此它不符合传统的客户端/服务器分离模型,而是依赖于库或客户端程序来执行写入本地文件这两个角色。它的功能非常强大,特别适合嵌入式使用。SQLite 在许多不同的语言中都有绑定,并且它作为内部存储系统广泛部署在应用程序中。
清理输入
清理输入,也称为输入验证,是一个用于使用户提供的值对于进一步处理是安全的过程。它用于防止可能导致应用程序或数据库将数据值错误地解释为有效应用程序或查询代码的恶意输入。可以使用多种不同的方式清理输入,例如限制有效字符列表、删除对正在使用的系统具有特殊含义的字符以及转义值。一般来说,与其清理输入,不如使用预准备语句被认为更安全。
扩展
扩展是扩展分配给您的应用程序或工作负载的资源的过程,以便获得更好的性能或处理更多并发活动。扩展策略通常分为两类:横向扩展(也称为水平扩展)和纵向扩展(也称为垂直扩展)。横向扩展涉及向可以处理传入工作的池添加额外的工作人员。这通常意味着添加额外的服务器,这些服务器都可以执行相同的操作,从而分配负载。纵向扩展涉及向已处理请求的服务器添加额外的资源,例如处理器、RAM 或存储。扩展允许您处理更多并发操作,但它可能会增加应用程序架构的复杂性。
模式
数据库模式是描述应如何在数据库系统中组织数据的结构。它定义了每个表、字段、索引、关系、函数以及数据库中保存的任何其他结构的格式。模式是告诉数据库系统对象的外观以及允许与对象关联哪些数据和不允许哪些数据的定义。在 PostgreSQL 中,数据库模式具有稍微不同的含义,因为它被实现为数据库对象的子对象,该数据库对象充当其他数据库对象的命名空间。
可序列化隔离级别
可序列化隔离级别是关系数据库系统的一种事务隔离级别,它提供了最严格的隔离保证。在可序列化级别,脏读、不可重复读、幻读和序列化异常都被阻止。数据库系统通过中止可能发生冲突的任何事务来做到这一点,这确保了可以像串行应用一样应用并发事务。可序列化隔离提供了强大的隔离性,但它可能会因冲突事务可能被中止并且必须重新提交这一事实而遭受严重的性能问题。
序列化异常
序列化异常是并发事务可能发生的问题,其中并发事务的提交顺序会影响生成的数据。发生序列化异常是因为不同事务中的操作可能会基于其他事务可能正在更新的数据进行计算。为了防止序列化异常,事务必须使用可序列化隔离级别,这可以通过回滚其中一个冲突事务来防止这些情况。
分片
数据库分片是数据库对象存储的记录段,出于性能原因,该记录段被分离出来并由不同的数据库节点管理。例如,包含 900 万条记录的数据库表可以分为三个独立的分片,每个分片管理 300 万条记录。数据通常根据“分片键”进行划分,“分片键”是确定应由哪个分片管理记录的键。每个分片管理其记录子集,并且需要一个协调组件,通过参考分片键将客户端查询定向到适当的分片。分片可以帮助某些类型的大型数据集提高性能,但它通常需要做出权衡,这可能会降低其他类型的性能(例如,需要协调多个分片之间的操作)。
过时数据
在使用数据存储时,“过时数据”是指任何不能准确反映数据最新状态的数据。这通常主要是在缓存时关注的问题,因为数据片段可能会在被更改使失效很久之后仍被保留和使用。
标准列族
标准列族是一种列族数据库对象,它通过定义与类似于列的键值对关联的行键来存储数据。每行可以定义和使用自己的列,因此生成的数据集不像关系数据库表那样规则。但是,行键与列标签和值组合起来仍然有点像表。标准列族为基于键的数据检索提供了良好的性能,因为它们能够将与键关联的所有信息存储在同一位置,并且可以轻松地修改该键的数据结构。
词干提取
词干提取是一种用于全文搜索索引的技术,其中具有相同词干的词语被折叠成单个条目。这增加了被认为相关的结果的数量,但以略微降低精确率为代价。例如,“cook”、“cooked”和“cooks”等词语可能占据一个条目,其中搜索任何术语都会返回整个条目的结果。
停用词
在全文搜索上下文中,“停用词”是被认为不适用于搜索查询的单词列表。这些通常是语言中最常见的单词,它们本身缺乏太多含义,或者模棱两可到无关紧要的地步。英语中的一些示例是“the”、“it”和“a”等词。
存储引擎
存储引擎是数据库管理系统中负责在数据库中插入、删除、查询和更新数据的底层组件。许多数据库功能(例如执行事务的能力)实际上是底层存储引擎的属性。某些数据库系统(如 MySQL)具有许多不同的存储引擎,可以根据您的用例的要求使用。其他系统(如 PostgreSQL)则专注于提供在所有典型场景中都有用的单个存储引擎。
存储过程
存储过程是在数据库中定义一组操作的一种方式,客户端可以轻松运行这些操作。由于它们存储在数据库中,因此它们有时可以提供性能改进并避免网络延迟。存储过程与用户定义的函数不同,因为它们必须使用特殊语句显式调用,而不是合并到其他查询中,并且不能在所有相同的场景中使用。
超级列族
超级列族是一种列族数据库对象,它通过定义与列族关联的行键来存储数据。每行可以包含多个列族,作为一种比标准列族更进一步细分数据的方式。
超键
超键是关系数据库模型中可用于唯一标识记录的任何属性集。所有其他键类型(主键、候选键、复合键等)都是超键的示例。平凡超键包含所有可用属性,而候选键是任何无法通过删除其他列来简化的超键。
在关系数据库中,“表”是一种数据库结构,它以列的形式定义不同的属性,并以行的形式存储具有关联列值的记录。表的列定义的约束和数据类型以及附加的表级要求描述了可以存储在表中的数据类型。由于表是规则的数据结构,因此数据库系统了解其中包含的数据的形状,这可以在某些情况下帮助使查询性能更可预测。
表别名
表别名是在查询时为现有或计算的表或类表数据库对象给定的名称。如果原始名称长或不明确,或者表是由查询本身生成的并且需要标签以在查询的其他部分或显示中引用它,则表别名可能很有用。
三层架构
三层应用程序架构是部署 Web 应用程序的常见基础架构架构。第一层由一个或多个 Web 服务器组成,这些服务器响应客户端请求、提供静态内容并生成对后续层的请求。第二层由应用程序服务器处理,负责通过执行代码来生成动态内容,从而为前端生成响应。第三层由数据库系统处理,负责响应来自中间层对用于生成内容的自定义值的请求。
令牌
在自然语言处理和全文搜索中,“词元 (token)” 是指系统中可识别的离散单词,可以根据不同的特征进行分类。词元可能会存储一些信息,包括它在文本片段中的相对位置、类型(数字、单词、短语等)以及任何可能有用的附加元数据。
事务 (Transaction)
数据库事务是一组组合成单个单元的操作,可以由数据库系统原子性地执行。事务确保其中所有操作都成功完成,或者全部回滚以返回到初始状态。这有助于保持数据完整性,并允许在客户端可能在数据库中执行的不同无关操作之间进行隔离。数据库事务提供的保证由 ACID(原子性、一致性、隔离性和持久性)属性概括。
两阶段提交 (Two-phase commit)
两阶段提交是一种用于在分布式系统中实现事务的算法。两阶段提交的工作原理是将提交过程分为两个主要阶段。在第一阶段,收到潜在更改的服务器将其传达给协调组件。协调器请求所有涉及的服务器投票决定是否提交。如果投票成功,则开始第二阶段,在该阶段中,每个单独的成员实际提交事务。该算法允许分布式系统维护一致的数据集,但代价是与协调投票程序相关的开销。
两阶段锁 (Two-phase locking)
两阶段锁,有时缩写为 2PL,是一种用于并发控制的策略,以确保事务是可串行化的。这两个阶段指的是扩展事务持有的锁数量的操作和触发锁释放的操作。两阶段锁的工作原理是使用排他锁和共享锁来协调读写操作。需要读取数据的事务可以请求共享读锁,该锁允许其他事务读取相同的数据,但阻止写操作。由于这是共享锁,因此每个连续的读操作都可以同时请求读锁,并且数据将保持不可修改,直到它们全部释放。需要修改数据的事务请求排他写锁,该锁阻止发出其他写锁和任何读锁。
更新插入 (Upsert)
更新插入是一种数据库操作,它要么更新现有条目,要么在未找到当前条目时插入新条目。更新插入操作由一个查询组件组成,该组件用于搜索要更新的匹配记录,以及一个变更组件,该组件指定应更新哪些值。通常,需要为其他字段提供附加值,以处理必须创建新记录的情况。
值 (Value)
在谈论数据库时,“值”是指数据库系统存储在其数据结构中的任何数据片段。通过附加上下文(如存储值的字段名称),可以为该值赋予超出其内在含义的意义。特定的存储结构(如列或表)可能会定义关于它存储何种类型值的要求。
垂直扩展 (Vertical scaling)
垂直扩展,也称为向上扩展,是一种扩展策略,涉及为服务器或组件分配额外的资源(如 CPU、内存或存储)以提高其性能或负载能力。向上扩展通常是扩展工作负载的最简单策略,因为它不会增加当前部署的架构复杂性。虽然垂直扩展在许多场景中运行良好,但一些缺点包括依赖单点故障以及可以由单台机器合理管理的资源数量的限制。
顶点 (Vertices)
在图数据库中,“顶点”是可以持有属性并通过边连接到其他顶点的实体。顶点类似于其他数据库系统中的记录或文档,因为它们具有标签或名称来指示它们代表的对象类型,并且它们具有属性,这些属性提供特定的附加信息以将特定顶点与其类型中的其他顶点区分开来。顶点通过定义它们之间关系的边连接到其他顶点。例如,“作者”顶点可以通过“由...撰写”边连接到“书籍”顶点。
视图 (View)
在关系型数据库中,“视图”是存储查询的类表表示。视图可以在许多上下文中用作表,但它们不是底层数据结构的一部分,而是从其查询结果派生而来。视图对于构建比底层模式中存在的数据更复杂的数据表示非常有用。例如,视图可能会连接几个表并仅显示几个相关列,这可以帮助使数据更可用,即使不同的结构由于一致性或性能原因更适合存储。
易失性存储 (Volatile storage)
易失性存储是指任何类型的存储,它依赖于持续供电才能持久化数据。例如,存储在 RAM 中的数据通常被认为是易失性的,因为它会在断电的情况下丢失且无法恢复。
宽列存储 (Wide-column store)
宽列存储是一种 NoSQL 数据库类型,它使用标准和超级列族将其数据组织成行和列。行键用于检索所有相关的列和超级列。每行可以包含完全不同的列,因为列定义和值都存储在行结构本身中。
预写式日志 (Write-ahead logging (WAL))
预写式日志 (WAL) 是一种数据修订管理方法,它可以提高系统在崩溃和故障期间抵抗数据损坏的弹性。如果没有像 WAL 这样的技术,则当系统在对数据库的更改仅部分完成时崩溃,可能会发生损坏。在这种情况下,数据将既不处于初始状态也不处于预期状态。使用预写式日志,系统会在执行操作之前将其意图记录到持久的预写式日志中。这样,数据库可以通过在恢复期间审查日志并重做最初未正确完成的任何操作来恢复数据的已知良好状态。
权重(搜索)(Weight (search))
在搜索的上下文中,“搜索权重”是分配给不同数据类别的任意值,旨在影响项目在分析相关性时的优先级。为特定类型的信息分配高权重将导致查询引擎在编译相关结果列表时,与其他类别相比,更重视该类别。
绕写缓存 (Write-around caching)
绕写缓存是一种缓存模式,其中写查询直接发送到后备数据库,而不是先写入缓存。由于缓存中与更新相关的任何项目现在都将变为陈旧,因此此方法需要一种使这些项目的缓存结果无效的方法,以供后续读取。此技术几乎总是与缓存读取策略结合使用,以控制读取行为。此方法最适合一旦写入或更新后不经常读取的数据。
回写缓存 (Write-back caching)
回写缓存是一种缓存方法,其中写查询发送到缓存而不是后备数据库。然后,缓存定期捆绑写操作,并将它们发送到后备数据库以进行持久化。这是对直写缓存方法的修改,旨在减少高吞吐量写操作引起的压力,但代价是在崩溃情况下持久性较差。这确保所有最近写入的数据都可以立即供应用程序使用,而无需额外的操作,但如果缓存在能够将写入持久化到数据库之前崩溃,则可能导致数据丢失。
写操作 (Write operation)
在数据库的上下文中,“写操作”是指任何修改存储数据的数据库操作。这包括插入新记录、删除记录以及将现有记录更新为新值。
直写缓存 (Write-through caching)
直写缓存是一种缓存模式,其中应用程序直接将更改写入缓存,而不是后备数据库。然后,缓存立即将新数据转发到后备数据库以进行持久化。此策略最大限度地降低了在缓存崩溃的情况下数据丢失的风险,同时确保读取操作可以访问所有新数据。在高写入场景中,过渡到回写缓存以防止后备数据库承受压力可能更有意义。
关于作者 (About the Author(s))
Justin Ellingwood

Justin Ellingwood

自 2013 年以来,Justin 一直在撰写关于数据库、Linux、基础设施和开发者工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。