数据库简介

常见数据库术语表

分享到

简介

在处理数据库时,你需要学习大量的术语才能理解这项技术、如何最佳地使用它以及它与环境的其他部分的关系。这个术语表旨在收集数据库社区中常用的术语,并提供定义和上下文,帮助你扩展知识。

这个术语表正在不断完善,是一个活文档。我们打算随着时间的推移更新它,添加新的主题并完善现有条目。我们有一个术语积压,希望在不久的将来添加,但如果你有任何想要讨论的主题,请打开一个GitHub 问题来添加你的建议。

术语

1NF
1NF 或第一范式描述了一种数据库规范化类型,其中每个表列都只有一个值。如果一个列包含嵌套表作为值或多个值,则它不符合 1NF。
2NF
2NF 或第二范式描述了一种数据库规范化类型,它:1)满足 1NF 的要求,2)没有直接绑定到候选键子集的值。换句话说,如果一个关系满足 1NF,并且所有非候选值都依赖于整个组合键,而不是仅依赖于组合键的一部分,则该关系处于 2NF。例如,一个包含 `title` 和 `author` 作为组合键的 `book` 表,如果它还包含描述作者出生日期的 `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——由原子性、一致性、隔离性和持久性组成的首字母缩略词——描述了一组数据库事务应该提供的特性。原子性保证事务中的所有操作都将成功完成,或者将被回滚。一致性通常被认为是应用程序而不是数据库维护的属性,通常通过事务来实现,以确保所有相关值都同时更新。事务隔离旨在允许同时执行的事务独立执行。持久性意味着事务在提交时应该存储在非易失性存储上。
访问控制列表 (ACL)
访问控制列表,通常简称为 ACL,是一种安全策略列表,它规定每个用户或进程可以在哪些资源上执行哪些操作。存在许多不同类型的 ACL,但它们都描述了系统允许的权限和访问模式。
活动记录 ORM
活动记录 ORM 是一种对象关系映射器,它的作用是尝试将数据库中的每个表表示为应用程序中的一个类。表中的每个记录都表示为该类的实例。通过与应用程序中的这些表示形式交互来添加和管理数据库条目。
反缓存
反缓存是一种策略,可以在数据未在更快的内存中缓存中找到并且必须从更慢的持久存储中检索时使用。该技术涉及中止事务并启动一个异步操作,以从较慢的介质获取数据到内存。事务可以稍后重试,并且信息将准备好从内存中提供。
原子性
原子性是主要与数据库事务相关的质量,它意味着封装在事务中的操作以全有或全无的方式处理。这可以防止出现部分更新,其中一些操作在出现错误条件之前执行,从而导致数据不一致。在事务的情况下,所有操作要么都提交,要么所有操作都回滚,使数据库保持与事务开始时相同的状态。
属性
属性是描述数据库中某个实体的特征。在 ER(实体关系)模型中,属性是除了关系之外的任何其他属性,这些属性为实体添加信息。
身份验证
身份验证是一种验证身份的操作。在计算和数据库中,身份验证主要用作一种方法来证明请求访问的个人或进程是否拥有凭据来验证他们可以使用特定身份进行操作。在实践中,这可能包括提供身份(如用户名)和关联的身份验证材料(如密码、证书或密钥文件,或属于与该身份关联的个人的硬件设备生成的密钥)。身份验证与授权一起使用来确定用户是否有权对系统执行操作。
授权
授权是一种操作,它确定某个用户或进程是否应该被允许执行某个操作。授权涉及将请求的操作与描述谁应该被允许执行哪些操作的一组准则进行比较。授权通常依赖于在请求之前进行受信任的身份验证过程,以确认主体的身份。
可用性
可用性是一种属性,描述了系统运行和能够执行工作的程度。在数据库等计算系统方面,对于单个机器,可用性与该计算机上应用程序的正常运行时间同义。对于分布式系统,可用性受规则约束,这些规则规定如果系统的某个子集不可用,系统可以继续运行的程度。
BASE
BASE——由基本可用、软状态和最终一致组成的首字母缩略词——描述了一些 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` 列的组合定义组合键。
并发
并发是指系统同时处理多个任务而不会影响总体结果的能力。并发允许系统并行执行操作,从而提高任务组的相对性能。
连接池
连接池是一种用于提高性能并避免连接耗尽的策略,它通过管理应用程序和数据库之间的连接来实现。它通过维护一个连接池来实现。通过保持连接打开并将其重复用于多个查询,应用程序可以避免每次建立连接的开销,并且数据库的连接限制可以由池组件管理。
一致性
一致性是数据系统的属性,这意味着各个数据实体之间不冲突,并且即使引入更改,它们也会继续建模它们想要的信息。必须验证每个数据片段和更改,以确保它符合施加在数据结构上的规则,并且必须注意平衡任何应影响其他数据的更改(例如,同时对不同的帐户进行借方和贷方)。
约束
约束是对特定列或表施加的限制,它会影响系统接受的值范围。约束用于定义数据库系统可以强制执行的规则,以确保值符合要求。
游标
数据库游标是客户端以受控的、精确的方式迭代记录和查询结果的一种方式。游标主要用于通过以迭代方式返回要处理的下一行,逐一浏览与查询匹配的结果。这可以帮助您通过将结果作为队列访问来操作未知数量的记录。使用游标时必须小心,因为它们会占用数据库系统的资源,会导致锁定,并且通常会导致比其他方式需要的网络往返次数更多。
暗启动
暗启动是一种部署和发布策略,它可以帮助组织在生产环境中测试新更改,而不会影响用户体验。暗启动涉及将新代码并行发布到原始功能。然后镜像请求和操作,并针对旧代码和新代码运行。虽然系统从用户角度的行为仅受原始代码的影响,但可以使用真实数据测试新代码以验证功能并发现性能和功能问题。经过适当的验证后,可以更改应用程序以专门使用新的代码路径。
数据
从最广泛的意义上讲,数据是事实或信息片段。它们是包含有关某事物的信息的度量或值。在某些情况下,数据被定义为与信息不同,信息是经过分析或处理的数据,而数据仅包含原始值。然而,在实践中,这些术语经常被用作同义词,并且通常封装任何事实以及解释或对其进行背景化的必要相关上下文。数据是几乎所有通信和活动的重要组成部分,它在收集、分析和 contextualize 过程中可以获得意义和价值。
数据定义语言 (DDL)
数据定义语言 (DDL) 是一组用于定义数据库结构和对象的命令或操作。它们是关系数据库和其他数据库的关键组成部分,并且被表示为可用于管理 SQL 等语言中的数据的可用命令的子集。数据定义语言是该语言中用于描述、创建和修改结构以及将保存数据的框架的一部分。
数据独立性
数据独立性是一个术语,用于描述数据库客户端或应用程序与负责表示和存储数据的底层结构的分离。如果数据库能够以一种允许用户应用程序即使向关系添加了附加属性(逻辑独立性)或存储介质的详细信息更改(物理独立性)也能继续运行的方式抽象结构,则可以实现数据独立性,例如。
数据映射器 ORM
数据映射器 ORM(或简称为数据映射器)是一个应用程序组件,充当数据库表示与应用程序中存在的数据结构之间的桥梁。数据映射器允许您的应用程序逻辑和数据库数据表示保持独立。数据映射器管理并在这两个介质之间转换数据,以便每个表示都是独立的,并且可以智能地进行结构化。
数据类型
数据类型是表达对有效值的约束的类别或属性。例如,整数类型指定仅允许使用整数,并且对变量或字段的预期值。数据类型允许您在定义字段或容器时指定有关数据的期望和要求。然后,编程语言或应用程序可以验证引入的数据是否满足必要的标准。数据类型还有助于确定可以对数据片段执行的可用操作。
数据库
数据库是一种用于组织、结构化和存储数据的结构。数据库通常由数据库管理系统管理,数据库管理系统提供了一个用于操作和与数据库及其管理的数据进行交互的接口。数据库可以高度结构化或允许更灵活的数据存储模式,并且可以以允许在检索时查询、回忆和组合数据的方式存储许多不同类型的数据。
数据库抽象层
数据库抽象层是一个编程接口,它试图抽象底层数据库技术之间的差异,以便为应用程序层提供统一的体验或接口。数据库抽象层通常对开发人员很有帮助,因为它们有助于规范各种产品之间的实现差异,并且即使底层技术发展,也能保持稳定。然而,也有一些挑战,例如泄漏抽象、屏蔽用户对实现特定功能或优化的访问,以及创建难以消除的依赖关系。
数据库管理员 (DBA)
数据库管理员 (DBA) 是一种负责配置、管理和优化数据库系统及其相关软件和硬件生态系统的人员。他们可能参与的一些职责包括架构规划、配置、模式和变更管理、迁移、复制和负载均衡、分片、安全考虑因素、管理备份策略等等。数据库管理员通常被期望精通数据库设计和理论,并能够帮助组织做出有关数据库技术选择和实施的决策。在许多现代组织中,DBA 传统上承担的职责现在由开发和运营团队的各个成员分担,或者已外包给外部提供商,以简化工作中的一些基础设施管理部分。
数据库引擎
数据库引擎是数据库管理系统的一部分,负责定义数据的存储和检索方式,以及支持与系统和数据交互的操作。一些数据库管理系统支持多个数据库引擎,这些引擎提供不同的功能和设计,而其他系统只支持一个数据库引擎,该引擎旨在与软件的目标保持一致。
数据库管理系统 (DBMS)
数据库管理系统,通常称为 DBMS 或甚至只是“数据库”,是一个负责组织和管理数据的应用程序。DBMS 可以遵循许多不同的范式,并优先考虑某些目标。通常,至少,它们负责持久化数据,组织和分类数据,以及摄取、操作和查询数据。最常见的是,DBMS 提供客户端/服务器模型,其中服务器负责控制和管理数据,而客户端、库或 API 可以用于与服务器交互以添加或查询数据、更改数据结构或管理系统的其他方面。
数据库模型
数据库模型是数据库管理系统用于存储、组织和提供数据访问的总体策略。有许多不同的数据库模型可用,但关系模型(使用高度结构化的表以特定格式存储数据)可能是最常见的类型。其他类型的数据库包括文档数据库、宽列数据库、层次数据库、键值存储等等。一些数据库系统被设计为“多模型”,这意味着它们支持在同一系统中运行不同类型模型的数据库。
数据库代理
数据库代理是一个软件组件,负责管理数据库客户端和数据库服务器之间的连接。数据库代理用于许多原因,包括组织对有限数量连接的访问、允许透明地扩展数据库层,以及为部署和类似场景重定向流量。数据库代理通常被设计为对应用程序透明,这意味着应用程序可以像直接连接到后端数据库一样连接到代理。
数据集
数据集(有时拼写为数据集)是单个数据集合。通常,这代表与特定任务、应用程序或关注领域相关的相关数据的块。通常,数据集是数据本身以及解释它所需的结构和上下文。它们通常由定量和定性值的组合组成,这些值可以作为进一步分析和解释的原始数据。
反规范化
反规范化是一个过程,其中数据库中的数据和结构被“反规范化”或从规范化状态中删除。如果旨在规范化的数据结构定义不明确或管理不善,则可能意外发生这种情况。但是,它也经常在某些情况下有意执行。反规范化通常通过在不同位置冗余存储值来允许更快地访问数据。这样做是缺点是写性能会下降,并且由于使用多个位置来表示相同的数据,因此有可能数据会不同步。
脏读
脏读是一种特定的异常类型,它可能发生在一个事务可以读取另一个事务尚未提交的数据的地方。如果第二个事务回滚而不是提交,第一个事务将使用一个不反映数据库实际状态的值。在某些事务隔离级别,脏读是可能的,并且代表了一种风险,在并行操作数据时会导致不一致。
分布式数据库
分布式数据库是一个跨多个物理系统的数据系统。为了提高性能或可用性,数据分布在多台机器上。虽然分布式系统可以帮助扩展数据库以处理更多负载,但它们也代表着复杂性的显著增加,这会导致一致性和分区挑战,以及某些负面的性能影响,例如在某些情况下数据写入的增加。
文档
在文档数据库的上下文中,文档被认为是包含代表单个记录或对象的信息的容器,其中包含相关的描述性数据。文档可以具有灵活的结构,该结构不必与系统中的其他文档匹配,并且通常可以嵌套。文档通常以 JSON 或 YAML 等数据序列化格式表示,可以对文档进行标签和元数据组织。
文档数据库
文档数据库是一种数据库模型,它将项目表示为称为文档的独立对象。虽然文档可以分组以进行组织,但它们不需要共享相同的结构,并且可以设计为独特地捕获描述所讨论项目的所需数据。文档数据库通常不支持用于将不同文档链接在一起的强大联接操作,但由于其灵活性和易于表示编程数据结构,因此经常因其灵活性和快速生产时间而受到称赞。
持久性
持久性是数据的质量,表示它已捕获到持久存储中,该存储将在程序崩溃时幸存下来。通常,这意味着将数据刷新到非易失性存储介质(如硬盘驱动器)上,该介质不需要电力来维护状态。
编码
编码是一种系统,它在可以表示书面语言中使用的组件的字符系统和计算机可以存储和操作的数字表示之间进行转换。已经开发出具有各种字符范围的不同编码系统。一些针对特定语言或语言族(如 ASCII),而另一些则试图为适合多种语言的更大的字符集提供表示(如 UTF unicode 变体)。
加密传输
加密传输是指在将消息发送给接收者之前对其进行加密的任何类型的通信过程。传输加密对于确保隐私(防止其他人查看敏感信息)以及避免篡改(使数据的操纵变得明显)是必要的。在部署数据库时,可以使用许多不同的加密传输系统,包括 TLS/SSL 加密、VPN 和专用网络。
短暂性
短暂性是一种特征,表示数据或情况不永久。在许多方面,它与持久性的相反。在数据库中,某些项目(如您希望持久化的数据)不应该短暂。但是,其他组件(如用于加密数据库和客户端之间连接的密钥)可以通过防止密钥泄露影响未来或过去会话来从短暂性中受益。
短暂存储
短暂存储,有时也称为易失性存储或非持久性存储,是指任何持续时间很短的存储介质,通常与某些条件相关联。例如,在应用程序中,存储在内存中的数据仅在进程运行时才能保留。同样,存储到临时目录中的数据仅在系统重新启动之前可用。通常,短暂存储对于临时数据或作为在将数据存储到更永久的介质之前进行保存的区域很有用。
最终一致性
最终一致性是对某些分布式计算或数据库系统实施的一致性/可用性策略的描述。分布式系统的 CAP 定理指出,系统必须选择在网络分区的情况下优先考虑可用性还是数据一致性。最终一致系统选择通过继续处理请求来优先考虑可用性,即使服务器的同行无法确认操作。最终,当分区解决后,将运行一致性例程以确定任何不一致数据的最正确状态,但将在不同服务器上的数据不一致一段时间。
驱逐
在缓存的上下文中,驱逐是一个过程,其中数据从缓存中删除。这可能是因为当前值已通过操作失效,或者可能是由于旨在删除最旧或使用最少数据的策略而自动发生的。
扩展和收缩模式
扩展和收缩模式是一种策略,用于在不影响现有应用程序的情况下将新的更改引入数据库模式。它通过在仔细控制的阶段引入更改来工作,首先在现有结构旁边添加新的或更改的结构,然后扩展应用程序逻辑以同时使用这两种结构。最终,在测试后,应用程序可以停止写入原始结构,并且可以将其删除。
提取-转换-加载 (ETL)
提取、转换和加载,通常缩写为 ETL,是从数据源复制和处理数据到管理系统的过程。首先,从其当前系统中提取数据以使其可供目标系统访问。接下来,操作和修改数据以匹配新系统的要求和格式。最后,将重建的数据加载到新系统中。
功能标志
功能标志或功能切换是一种编程策略,涉及在外部开关或控制后面设置功能。该开关通常首先设置为指示该功能不应处于活动状态。当组织准备就绪时,他们可以激活开关,程序将开始使用其新功能。这允许新功能部署,而不会立即激活它们。它将新软件的部署与软件的发布分离,提供对更改引入方式以及在生产环境中进行更多测试的更大控制。
字段
数据库列或字段是数据库表中特定类型数据的容器。关系数据库中的数据库字段是规则的,因为表中的每一行都将包含相同数量的具有相同特征的字段。数据库字段可以包含的值可以由分配给该字段的数据类型以及进一步限制有效值的约束来控制。
平面文件数据库
平面文件数据库是存储在文件中的数据库或类似数据库的结构。这些定义了数据库中包含的结构和数据,采用统一的格式。许多平面文件数据库的示例(如 CSV(逗号分隔值)文件)是用纯文本编写的,但也有二进制格式。平面文件数据库与更复杂类型之间的区别之一在于,存储格式本身通常负责描述数据之间的关系,而不是数据库系统。
外键
外键是关系数据库中指定的列或列组,用于维护两个表之间的数据完整性。一个表中的外键引用另一个表中的候选键,通常是主键。由于引用了候选键,因此数据库中的每一行都是唯一的,并且这两个表可以按行进行关联。这些指定列的值预计将在两个表中保持一致。外键约束允许数据库系统通过不允许值不同步来强制执行此要求。
全文搜索描述了一系列技术和功能,这些技术和功能允许您搜索数据库系统中文档的完整文本。这与仅依赖元数据、部分文本来源和其他不完整评估的搜索功能直接相反。全文搜索依赖于使用自然语言感知解析器进行异步索引,以分析和分类文档中的文本。
图数据库
图数据库是一种 NoSQL 数据库,它使用图结构来存储和定义数据片之间的关系。图数据库是使用节点构建的,节点表示实体,可以包含属性或属性。节点使用边相互连接,边不仅负责连接节点,还负责定义关系的性质。例如,一个节点可能描述一个人,其属性为“教师”。它可能连接到一个类节点,该节点有一个名为“教授”的边,但也可能连接到另一个具有名为“已婚”的边的个人节点。
GraphQL
GraphQL 是一种语言,可用于查询和操作数据,通常用于构建 API。客户端能够指定所需的确切数据,服务器会根据提供的结构构建响应。GraphQL 的优势在于它能够使用自定义结构返回数据、将来自不同后端的数据拼接在一起以及在单个 API 调用中回答复杂的查询。
HTAP 数据库
HTAP 数据库或混合事务/分析数据库是数据库类别,旨在提供快速、可靠的事务处理和在同一台机器上并发处理繁重、复杂的分析工作负载的能力的优势。这些数据库产品不像事后分析数据那样,而是试图允许实时分析,从而可以快速影响决策方式。
层次数据库
层次数据库是一种数据库模型,它将自身组织成树状结构。每个新记录都附加到单个父记录。随着将记录添加到数据库中,当记录从根记录越来越多地展开时,就会出现树状结构。可以遍历记录之间的链接以到达其他记录。使用层次模型的系统示例包括 LDAP(轻量级目录访问协议)和 DNS(域名系统)。
水平扩展
水平扩展,也称为横向扩展,是一种扩展策略,涉及增加可以执行给定任务的单元数量。这通常意味着增加工作池中可以响应请求的计算机数量。扩展出去有很多优势,包括成本、灵活性和可以处理的流量级别,但可能会在协调和复杂性方面增加复杂性,尤其是在涉及数据时。
热备份
热备份是在数据库系统处于活动使用状态时进行的备份。如果可能,它们通常是可取的,因为它们不需要将数据库系统脱机以执行操作。热备份并不总是可能的,因为它们可能需要锁定数据库的某些部分,或者会降低可用于正常数据库任务的 IOPS(每秒输入/输出操作)。
内存数据库
内存数据库是一种数据库系统,其中整个数据集都可以加载到计算机内存中并在其中进行处理。这种处理模型提供了巨大的性能优势,因为所有数据都已在主内存中,并且从较慢的存储中检索数据没有任何延迟。在使用内存数据库时,必须小心谨慎地制定持久化数据的策略或在机器重启时重新填充内存信息。
索引
数据库索引是一种结构,旨在允许在表中更快地查找记录。索引允许数据库系统通过为特定列的值维护一个单独的结构来有效地查找数据。针对索引列的查询可以通过使用比逐行检查每个行更有效的查找策略来快速识别表中的适用行。索引列提高了读取操作,但会给写入操作增加开销,因为表和索引都必须更新。在设计表索引时,重要的是权衡这两个因素。
摄取
摄取数据是指将新数据导入数据系统。这可能是一次性数据加载操作,也可能是对其他系统生成的数据进行持续消费。数据摄取是填充和更新分析数据库和大型数据存储的常见阶段,因为它们通常涉及整合来自各种来源的数据。
内联接
内联接是一种关系数据库操作,它通过仅返回联接列值同时存在于两个表中的行来联接两个表。使用内联接,两个表中的联接列必须匹配。没有使用 `NULL` 值来填充一个表或另一个表中缺少的行。
交互式交易
交互式事务是数据库事务的一种功能,允许客户端以即席方式手动指定事务操作。与将事务视为可顺序执行且无暂停的一组查询的包装器不同,交互式事务允许开发人员短暂暂停其数据库操作以执行其他逻辑,然后再继续进行事务处理。这为事务处理提供了灵活性,但如果管理不善,会导致事务运行时间过长。
隔离
在数据库环境中,隔离是一种描述事务内和事务间数据和操作可见性的属性。数据库管理员或查询作者可以设置隔离级别,以定义隔离级别和性能之间的权衡。隔离是 ACID 首字母缩写词所描述的关键保证之一。
隔离级别
隔离级别描述了数据库在处理事务时,隔离和性能之间不同类型的权衡。隔离级别确定事务之间可能发生哪些类型的數據泄漏或可能发生哪些数据异常。通常,更高的隔离级别提供更多保证,但以较慢的处理速度为代价。
联接
在关系型数据库中,联接是一种基于共享的“联接”列或列将两个表连接起来的操作。联接列中的值在每个表中必须是唯一的。联接操作根据联接列值匹配行,以创建由每个表中的列组成的扩展虚拟行。根据用户希望对没有匹配项的行的处理方式,可以使用不同的联接类型。
在数据库环境中,键是任何属性、列或属性或列组,可用于唯一地标识单个行。某些数据片段可以用作键,因为它们具有自然的唯一性(自然键),而其他数据集可能需要生成键以标识每个记录(代理键)。每个表或数据集合可以有多个键来唯一地标识一行(称为候选键),但通常,有一个主键(称为主键)被指定为主访问行的方式。
键值数据库
键值数据库或键值存储是一种数据库模型,允许用户使用键存储和检索具有任意结构的数据。该键用于标识和访问记录,该记录可以包含单个值或更复杂数据的结构。键值数据库中的每个记录都可以定义自己的结构,因此与关系型数据库中没有统一的表结构。键值数据库很有用,因为它们非常灵活,并且使用对许多面向对象的开发人员来说熟悉的模型。
左联接
左联接是关系型数据库的联接操作,其中返回指定第一个表的全部行,无论是否找到第二个表中的匹配行。联接操作通过匹配每个表中指定比较列中具有相同值的记录来构建虚拟行。左联接的结果将包含来自两个表的匹配列值的行,以及来自第一个或左侧表的全部不匹配行。对于这些行,与第二个或右侧表关联的列将用 `NULL` 值填充,以指示未找到匹配行。
词素
词素是在自然语言处理和全文搜索环境中相关的语言级语义单元。通常,当索引文本时,它会被分解成单个词符,然后使用语言级资源(如词典、词库和其他词表)将这些词符分析为词素,以了解如何进一步处理它们。
区域设置
在数据库和一般计算中,区域设置指定在执行操作和呈现结果时应使用的区域、语言、国家/地区和其他上下文数据。在数据库中,区域设置可能会影响列排序、值之间的比较、拼写、货币标识符、日期和时间格式等。在数据库服务器级别定义正确的区域设置或在数据库会话期间请求所需的区域设置对于确保执行的操作将产生预期的结果至关重要。
在数据库中,锁是一种用于防止修改数据库记录或表的技术,以便在某些操作期间保持一致性。锁可以阻止对锁定的资源的任何访问,或者仅阻止执行某些操作。它们可以针对特定记录或整个表发出。由于锁阻止并发操作访问锁定的数据,因此锁定的数据可能会影响性能并导致资源竞争。
MariaDB
MariaDB 是一种开源关系型数据库系统,其开发目标是在 Oracle 收购 MySQL 后提供一个可替代的方案,当时社区中有些人对该项目的未来发展方向感到不确定。自最初的 fork 以来,每个项目都添加了功能,扩大了这两个数据库系统之间的差距。
微服务架构
微服务架构是一种应用程序和服务设计,会影响组件的开发、部署和操作。微服务方法将应用程序的功能分解,并将每个职责实现为一个独立的服务。这些服务不是通过内部函数调用,而是通过网络使用明确定义的接口进行通信。微服务通常用于加快开发速度,因为每个组件都可以独立地编码和迭代。它还有助于可扩展性,因为每个服务可以根据需要进行扩展,通常借助服务编排软件。
迁移(数据库、架构)
数据库或架构迁移是用于将数据库结构转换为新设计的流程。这涉及修改数据库或表的现有架构的操作,以及将现有数据转换为适合新结构的操作。数据库迁移通常相互构建,并以有序列表的形式存储在版本控制中,以便可以通过按顺序应用迁移文件来从任何先前版本构建当前数据库结构。通常,开发人员必须就如何最好地修改现有数据以适合新结构做出决策,这可能包括以前不存在的列,或者对难以轻松撤消的数据进行更改。
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 服务器组成。第二层由应用程序服务器处理,负责通过执行代码来生成动态内容以生成前端的响应。第三层由数据库系统处理,负责响应中间层对用于生成内容的自定义值的请求。
标记
在自然语言处理和全文搜索中,标记是系统识别的离散单词,可以根据不同的特征进行分类。标记可能与信息一起存储,包括其在文本片段中的相对位置、类型(数字、单词、短语等)以及可能很有用的任何其他元数据。
事务
数据库事务是一组操作,它们组合成一个单元,可以由数据库系统原子地执行。事务确保它们中的所有操作都成功完成,或者它们全部回滚以返回到起始状态。这有助于保持数据完整性,并允许客户端在数据库中执行的不同无关操作之间进行隔离。数据库事务提供的保证由 ACID(原子性、一致性、隔离性和持久性)属性概括。
两阶段提交
两阶段提交是一种用于在分布式系统中实现事务的算法。两阶段提交通过将提交过程分为两个一般阶段来工作。在第一阶段,接收潜在更改的服务器将其与协调组件进行通信。协调器向所有相关服务器请求投票,以确定是否提交。如果投票成功,则第二阶段开始,其中每个成员实际提交事务。该算法允许分布式系统以协调投票程序相关的开销为代价来维护一致的数据集。
两阶段锁定
两阶段锁定(有时缩写为 2PL)是一种并发控制策略,用于确保事务是可串行化的。两个阶段是指扩展事务持有的锁数量的操作以及触发锁释放的操作。两阶段锁定通过使用排他锁和共享锁来协调读写操作。需要读取数据的交易可以请求共享读锁,该锁允许其他交易读取相同数据,但阻止写入操作。由于这是一个共享锁,因此每个后续读取操作都可以同时请求读取锁,并且数据将保持不可修改,直到它们都被释放。需要修改数据的交易请求排他写锁,这将阻止其他写锁和任何读锁被发出。
Upsert
Upsert 是一个数据库操作,它要么更新现有条目,要么在找不到当前条目时插入新条目。Upsert 操作包含一个用于搜索要更新的匹配记录的查询组件和一个指定应更新哪些值的变异组件。通常,需要为其他字段提供其他值以处理必须创建新记录的情况。
在谈论数据库时,值是数据库系统在其数据结构中存储的任何数据。在存储值字段的名称等附加上下文中,可以将含义分配给值,而不仅仅是内在地存在的含义。诸如列或表之类的特定存储结构可能会定义有关其存储的值类型的要求。
垂直扩展
垂直扩展,也称为向上扩展,是一种扩展策略,它涉及为服务器或组件分配更多资源(如 CPU、RAM 或存储),以提高其性能或负载能力。向上扩展通常是最简单的扩展工作负载的策略,因为它不会增加当前部署的架构复杂性。虽然垂直扩展可以在许多场景中很好地工作,但一些缺点包括依赖于单点故障以及对单个机器可以合理管理的资源数量的限制。
顶点
在图数据库中,顶点是可以通过边连接到其他顶点的实体,这些边可以保存属性。顶点类似于其他数据库系统中的记录或文档,因为它们具有标签或名称来指示它们表示的对象类型,并且它们具有属性,这些属性提供特定附加信息以区分特定顶点与其类型的其他顶点。顶点通过定义它们之间关系的边连接到其他顶点。例如,“作者”顶点可以通过“由...撰写”边连接到“书籍”顶点。
视图
在关系数据库中,视图是存储查询的类似表的表示。视图可以在许多上下文中用作表,但它们不是作为底层数据结构的一部分,而是从其查询的结果派生而来的。视图对于构建比底层模式中存在的更复杂的数据表示非常有用。例如,视图可能加入几个表并仅显示几个相关的列,这有助于使数据更易于使用,即使由于一致性或性能原因,其他结构更适合存储。
易失性存储
易失性存储是任何依赖于持续供电来保存数据的存储类型。例如,存储在 RAM 中的数据通常被认为是易失性的,因为在断电的情况下,它将丢失且无法恢复。
宽列存储
宽列存储是一种 NoSQL 数据库类型,它使用标准和超级列族将数据组织成行和列。行键用于检索所有关联的列和超级列。每行可以包含完全不同的列,因为列定义和值本身存储在行结构中。
预写日志 (WAL)
预写日志或 WAL 是一种数据修订管理方法,它提高了系统在崩溃和故障期间数据损坏的弹性。如果没有像 WAL 这样的技术,如果系统在更改数据库时仅部分完成时发生崩溃,则可能会发生损坏。在这种情况下,数据将既不是初始状态也不是预期状态。使用预写日志,系统会在执行操作之前将其意图记录到持久的预写日志中。这样,数据库可以通过在恢复期间查看日志并重做最初未正确完成的任何操作来恢复数据的已知良好状态。
权重(搜索)
在搜索的背景下,搜索权重是分配给不同数据类别的任意值,旨在影响分析相关性时项目的优先级。对特定类型的信息分配较高的权重将导致查询引擎在编译相关结果列表时,与其他类别相比,对该类别赋予更大的重要性。
绕写缓存
绕写缓存是一种缓存模式,其中写入查询直接发送到后端数据库,而不是先写入缓存。由于缓存中与更新相关的任何项现在都将过期,因此此方法需要一种方法来使后续读取的这些项的缓存结果失效。此技术几乎总是与缓存读取策略相结合以控制读取行为。这种方法最适合写入或更新后很少读取的数据。
回写缓存
回写缓存是一种缓存方法,其中写入查询发送到缓存,而不是发送到后端数据库。然后,缓存定期将写入操作捆绑在一起并将其发送到后端数据库以实现持久化。这是对写通缓存方法的修改,以减少由高吞吐量写入操作引起的压力,但代价是如果缓存在能够将写入持久化到数据库之前发生崩溃,则持久性降低。这确保所有最近写入的数据都可以立即供应用程序使用,而无需其他操作,但如果缓存崩溃,则可能会导致数据丢失,因为它无法将写入持久化到数据库。
写入操作
在数据库的背景下,写入操作是修改存储数据的任何数据库操作。这包括插入新记录、删除记录以及将现有记录更新为新值。
写通缓存
写直通缓存是一种缓存模式,应用程序将更改直接写入缓存,而不是写入底层数据库。然后缓存立即将新数据转发到底层数据库以持久化。这种策略最大限度地降低了缓存崩溃时数据丢失的风险,同时确保读取操作可以访问所有新数据。在高写入场景中,可能需要切换到写回缓存,以防止过度使用底层数据库。
作者
Justin Ellingwood

Justin Ellingwood

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