数据库简介

常用数据库术语表

分享到

简介

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

本术语表是一个正在进行的工作和一份鲜活的文档。我们计划对其进行更新,以添加新主题并在未来改进现有条目。我们积压了一些希望在不久的将来添加的术语,但如果您有任何希望我们讨论的内容,请打开一个 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 有许多不同的类型,但它们都描述了系统允许的权限和访问模式。
活动记录 ORM
活动记录 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,或简称为数据映射器,是一个应用程序组件,充当数据库表示形式和应用程序中存在的数据结构之间的中介,以进行转换。数据映射器允许您的应用程序逻辑和数据库数据表示形式保持独立。数据映射器管理和转换这两种介质之间的数据,以便每种表示形式都是独立的并且可以智能地构建。
数据类型
数据类型是表达对有效值约束的类别或属性。例如,整数类型指定只有整数才适用于变量或字段并被期望用于变量或字段。数据类型允许您在定义字段或容器时指定关于数据的期望和要求。然后,编程语言或应用程序可以验证引入的数据是否满足必要的标准。数据类型还有助于确定可以对数据片段执行的可用操作。
数据库
数据库是用于组织、构建和存储数据的结构。数据库通常由数据库管理系统管理,该系统提供一个界面来操作和与数据库及其管理的数据进行交互。数据库可以是高度结构化的,也可以允许更灵活的数据存储模式,并且可以存储许多不同类型的数据,从而可以在检索时查询、调用和组合数据。
数据库抽象层
数据库抽象层是一个编程接口,旨在抽象底层数据库技术之间的差异,从而为应用程序层提供统一的体验或界面。数据库抽象层通常对开发人员很有帮助,因为它们有助于规范化各种产品之间的实现差异,并且即使底层技术不断发展,也可以保持稳定。但是,也存在一些挑战,例如抽象泄漏、向用户屏蔽特定于实现的特性或优化,以及创建可能难以消除的依赖项。
数据库管理员 (DBA)
数据库管理员 (DBA) 是负责配置、管理和优化数据库系统以及相关软件和硬件生态系统的角色。他们可能参与的一些职责包括架构规划、配置、模式和变更管理、迁移、复制和负载均衡、分片、安全注意事项、管理备份策略等等。数据库管理员通常应具备数据库设计和理论方面的专业知识,并能够帮助组织就数据库技术选择和实施做出决策。在许多现代组织中,传统上由 DBA 承担的职责现在分布在开发和运营团队的各个成员之间,或者已外包给外部提供商,以简化工作的一些基础设施管理部分。
数据库引擎
数据库引擎是数据库管理系统的一部分,负责定义数据的存储和检索方式,以及与系统和数据交互支持的操作。一些数据库管理系统支持提供不同特性和设计的多个数据库引擎,而其他系统仅支持旨在与软件目标保持一致的单个数据库引擎。
数据库管理系统 (DBMS)
数据库管理系统 (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` 值来填充从一个表或另一个表中缺少的行的行。
交互式事务
交互式事务是数据库事务功能,允许客户端以临时方式手动指定事务操作。交互式事务不是事务围绕一组可以按顺序执行而无需暂停的查询的包装器,而是允许开发人员短暂暂停其数据库操作以执行其他逻辑,然后再继续进行事务处理。这提供了事务处理的灵活性,但如果管理不当,可能会导致不必要的事务运行时间。
隔离
在数据库的上下文中,隔离是描述数据和操作在事务内部和事务之间如何可见的属性。隔离级别可以由数据库管理员或查询作者设置,以定义隔离级别和性能之间的权衡。隔离是 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 是一种有吸引力的策略。只有实际上发生冲突的事务才会遭受性能损失(它们将被回滚并且必须重新启动),而所有非冲突事务都可以执行,而无需等待查看是否会发生冲突。
外连接
外连接是一种关系数据库操作,它通过返回每个组件表中的所有行来连接两个表,即使在 companion 表中没有匹配的记录也是如此。连接操作通过匹配在每个表中的指定比较列中具有相同值的记录来构造虚拟行。外连接的结果将包含列值匹配的两个表中的行,并且还将包含每个表中的所有不匹配的行。对于这些行,在另一个表中没有匹配项的列将用 `NULL` 值填充,以指示未找到匹配的行。
参数化查询
参数化查询,也称为预准备语句,是一种数据库查询,它被设计为将用户输入作为参数,而不是通过将字符串与用户输入连接来获取用户输入。参数化查询允许您提前指定查询,包括未知的输入,然后在稍后提供应在语句中替换的值。这可以防止 SQL 注入漏洞,在这种漏洞中,精心制作的输入可用于使数据库系统错误地解释查询,从而将值视为可执行的 SQL 代码。
持久性
持久性是数据的一种质量,表明状态将比创建它的进程更长寿。持久性是大多数数据库系统的关键部分,并允许在数据库进程或服务器本身重新启动后再次加载数据。应用程序和数据库可以具有不同级别的持久性,以防止不同类型的故障情况,如单系统持久性、远程持久性和集群持久性。
持久存储
持久存储是指任何能够在系统断电或断开连接后维护数据的存储介质。维护更永久的数据存储库需要持久存储。通常,持久存储比临时存储(如内存数据)慢,因此数据库系统使用各种流程在两种存储系统之间按需传输数据,以利用和平衡两种类型的缺点。
悲观并发控制
悲观并发控制(PCC)是数据库系统用于处理并发操作冲突的一种策略。与乐观并发控制相反,悲观并发控制会在冲突可能性出现时立即短路事务。如果频繁发生冲突,此策略非常有用,因为它确保系统不会浪费时间执行由于冲突而无法提交的事务。相反,它在可能发生冲突时强制执行更串行化的执行方法,这种方法速度较慢,但避免了非生产性处理。
幻读
幻读是一种隔离异常,可能在某些隔离级别下的事务中发生。当事务期间由于事务外部的更改而为 `SELECT` 操作返回不同的行时,会发生幻读。例如,如果您尝试 `SELECT` 表中的所有记录,第一次可能会返回 8 行,但如果另一个事务提交了额外的行,则重复原始查询将显示不同的结果。
PostgreSQL
PostgreSQL 是一个流行的、高性能的关系数据库系统,以其对各种 SQL 标准的合规性而闻名。PostgreSQL 专注于提供单一、灵活的数据库引擎,而不是为不同的用例提供多个引擎。它具有高度的可扩展性,并拥有大量的社区附加组件和客户端应用程序。
精确率(搜索)
在搜索性能的上下文中,精确率是衡量检索到的结果与给定查询的相关程度的指标。具体而言,搜索精确率定义为相关结果数与返回的所有结果数之比。高精确率的查询不会检索许多与查询无关的项目。
主键
主键是一种数据库键,被指定为唯一寻址数据库行的主要方式。虽然其他键可能能够提取单个行,但主键专门为此目的标记,系统强制执行唯一性和非 `NULL` 一致性检查。主键可以是自然键(在记录中自然唯一的键)或代理键(专门添加以用作主键的键),并且可以由单个或多个列组成。
查询
在数据库中,查询是用于向数据库管理系统发出请求的格式化命令,使用查询语言。数据库系统处理查询以了解要执行的操作以及要返回给客户端的数据。通常,查询用于请求与特定模式匹配的数据、将新数据插入现有结构或修改和保存对现有记录的更改。除了针对数据项之外,查询通常还可以操作诸如表结构和服务器设置之类的项目,使其成为系统的通用管理界面。SQL,或结构化查询语言,是与关系数据库一起使用的最常见的数据库查询语言。
查询构建器
查询构建器是应用程序开发中使用的数据库抽象,使针对数据库的编程更容易。与 ORM 类似,查询构建器提供了一个从应用程序内部与数据库系统交互的接口。但是,查询构建器不是尝试将应用程序对象直接映射到数据库记录,而是专注于提供与数据库操作密切相关的本机函数和方法。这允许您以比直接使用 SQL(或其他数据库语言)字符串更安全、更灵活的方式以编程方式构建查询。
查询语言
查询语言是一种编程语言,专门用于在数据库中搜索、检索和操作数据。SQL,或结构化查询语言,是世界上最常见的查询语言,主要用于管理关系数据库系统中的数据。查询语言操作可以根据过程的重点和目标分为数据定义语言 (DDL)(当它们用于定义数据结构时)、数据控制语言 (DCL)(当它们用于系统管理任务时)和数据操作语言 (DML)(当它们用于修改数据时)。
查询计划器
查询计划器是数据库系统的内部组件,负责将客户端提供的查询转换为可用于实际搜索数据库并构建所需响应的步骤。设计良好的查询计划器可以考虑多种潜在的解决方案,并选择能够提供最佳优化结果的选项。有时,查询计划器不会选择最佳解决方案,数据库管理员必须手动调整选择标准。
Raft 共识算法
Raft 共识算法是一种旨在协调跨节点集群的信息共享、管理责任和故障恢复的算法。该算法提供了一种确保每个成员就数据操作达成一致的方法,并包括在网络分区或节点中断情况下进行领导者选举的机制。它通常被认为是一种比诸如 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 在许多不同的语言中都有绑定,并且它作为内部存储系统广泛部署在应用程序中。
消毒输入
消毒输入,也称为输入验证,是用于使用户提供的值对于进一步处理安全的过程。它用于防止恶意输入,这些输入可能导致应用程序或数据库将数据值错误解释为有效的应用程序或查询代码。可以采用多种不同的方式来消毒输入,例如限制有效字符列表、删除对正在使用的系统具有特殊含义的字符以及转义值。一般来说,与其消毒输入,不如使用预处理语句被认为更安全。
扩展
扩展是扩展分配给您的应用程序或工作负载的资源的过程,以便获得更好的性能或处理更多并发活动。扩展策略通常分为两类:横向扩展(也称为水平扩展)和纵向扩展(也称为垂直扩展)。横向扩展涉及向可以处理传入工作的池添加额外的worker。这通常意味着添加额外的服务器,这些服务器都可以执行相同的操作,从而分配负载。纵向扩展涉及向已经处理请求的服务器添加额外的资源,如处理器、RAM 或存储。扩展允许您处理更多并发操作,但它可能会增加应用程序架构的复杂性。
模式
数据库模式是描述数据应如何在数据库系统中组织的结构。它定义了每个表、字段、索引、关系、函数以及数据库中保存的任何其他结构的格式。模式是告诉数据库系统对象的外观以及允许和不允许与对象关联的数据的定义。在 PostgreSQL 中,数据库模式具有稍微不同的含义,因为它被实现为数据库对象的子对象,该对象充当其他数据库对象的命名空间。
可序列化隔离级别
可序列化隔离级别是关系数据库系统的事务隔离级别,它提供最严格的隔离保证。在可序列化级别,脏读、不可重复读、幻读和序列化异常都被阻止。数据库系统通过中止可能发生冲突的任何事务来做到这一点,这确保了可以像串行应用一样应用并发事务。可序列化隔离提供强大的隔离,但由于可能会中止冲突事务并且必须重新提交,因此可能会遭受严重的性能问题。
序列化异常
序列化异常是并发事务可能发生的问题,其中并发事务的提交顺序会影响结果数据。发生序列化异常是因为不同事务中的操作可以基于其他事务可能正在更新的数据进行计算。为了防止序列化异常,事务必须使用可序列化隔离级别,通过回滚冲突事务之一来防止这些情况。
分片
数据库分片是由数据库对象存储的记录段,出于性能原因,该段被分离出来并由不同的数据库节点管理。例如,具有 900 万条记录的数据库表可以分为三个单独的分片,每个分片管理 300 万条记录。数据通常根据“分片键”进行划分,分片键是一个键,用于确定记录应由哪个分片管理。每个分片管理其记录子集,并且需要协调组件通过引用分片键将客户端查询定向到适当的分片。分片可以帮助某些类型的大型数据集的性能,但它通常需要进行权衡,这可能会降低其他类型的性能(例如,在需要协调多个分片之间的操作时)。
陈旧数据
在使用数据存储时,陈旧数据是指任何不能准确反映数据最新状态的数据。这通常主要是缓存中的问题,因为数据片段可能会在被更改使失效后很长时间内仍被保留和使用。
标准列族
标准列族是一种列族数据库对象,它通过定义与类似于列的键值对关联的行键来存储数据。每行可以定义和使用自己的列,因此生成的数据集不像关系数据库表那样规则。但是,行键与列标签和值组合在一起仍然有点像表。标准列族为基于键的数据检索提供了良好的性能,因为它们能够将与键关联的所有信息存储在同一位置,并且可以轻松地修改该键的数据结构。
词干提取
词干提取是全文搜索索引中使用的一种技术,其中具有相同词干的单词被折叠成单个条目。这增加了被认为相关的结果数量,但略微降低了精确率。例如,“cook”、“cooked”和“cooks”等词可能占用单个条目,其中对任何术语的搜索都将返回整个条目的结果。
停用词
在全文搜索上下文中,停用词是不适用于搜索查询的单词列表。这些通常是语言中最常见的单词,它们本身缺乏太多含义,或者模糊到不相关的程度。英语中的一些例子是“the”、“it”和“a”等词。
存储引擎
存储引擎是数据库管理系统中负责在数据库中插入、删除、查询和更新数据的底层组件。许多数据库功能,如执行事务的能力,实际上是底层存储引擎的属性。一些数据库系统,如 MySQL,有许多不同的存储引擎,可以根据您的用例的需求使用。其他系统,如 PostgreSQL,则专注于提供在所有典型场景中都有用的单个存储引擎。
存储过程
存储过程是在数据库中定义一组操作的一种方式,客户端可以轻松运行这些操作。由于它们存储在数据库中,因此它们有时可以提高性能并避免网络延迟。存储过程与用户定义的函数不同,因为它们必须使用特殊语句显式调用,而不是合并到其他查询中,并且不能在所有相同的场景中使用。
超级列族
超级列族是一种列族数据库对象,它通过定义与列族关联的行键来存储数据。每行可以包含多个列族,作为一种比标准列族更进一步细分数据的方式。
超键
超键是关系数据库模型中可用于唯一标识记录的任何属性集。所有其他键类型(主键、候选键、复合键等)都是超键的示例。平凡超键包含所有可用属性,而候选键是任何无法通过删除其他列来简化的超键。
在关系数据库中,表是一种数据库结构,它以列的形式定义不同的属性,并以行的形式存储具有关联列值的记录。表列定义的约束和数据类型以及其他表级要求描述了可以存储在表中的数据类型。由于表是规则的数据结构,因此数据库系统了解其中包含的数据的形状,这有助于在某些情况下使查询性能更可预测。
表别名
表别名是在查询时为现有或计算的表或类表数据库对象指定的名称。如果原始名称长或不明确,或者表由查询本身生成并且需要标签以在查询的其他部分或显示中引用回它,则表别名可能很有用。
三层架构
三层应用程序架构是用于部署 Web 应用程序的常见基础设施架构。第一层由一个或多个 Web 服务器组成,这些服务器响应客户端请求、提供静态内容并生成对后续层的请求。第二层由应用服务器处理,负责通过执行代码为前端生成响应来生成动态内容。第三层由数据库系统处理,负责响应来自中间层的请求,以获取用于生成内容的自定义值。
令牌
在自然语言处理和全文搜索中,令牌是系统识别的离散词,可以根据不同的特征进行分类。令牌可以与信息一起存储,包括其在文本片段中的相对位置、其类型(数字、单词、短语等)以及任何可能有用的其他元数据。
事务
数据库事务是组合成单个单元的一组操作,可以由数据库系统原子地执行。事务确保其中的所有操作都成功完成,或者它们都被回滚以返回到起始状态。这有助于维护数据完整性,并允许在客户端可能在数据库中执行的不同不相关操作之间进行隔离。数据库事务提供的保证由 ACID(原子性、一致性、隔离性和持久性)属性概括。
两阶段提交
两阶段提交是一种用于在分布式系统中实现事务的算法。两阶段提交的工作原理是将提交过程分为两个通用阶段。在第一阶段,收到更改的服务器将潜在的更改传达给协调组件。协调器请求所有相关服务器投票决定是否提交。如果投票成功,则开始第二阶段,其中事务实际上由每个单独的成员提交。该算法允许分布式系统维护一致的数据集,但代价是与协调投票程序相关的开销。
两阶段锁
两阶段锁,有时缩写为 2PL,是一种用于并发控制的策略,以确保事务是可序列化的。这两个阶段指的是扩展事务持有的锁数量的操作和触发锁释放的操作。两阶段锁定通过使用互斥锁和共享锁来协调读写操作。需要读取数据的事务可以请求共享读锁,该锁允许其他事务读取相同的数据,但阻止写入操作。由于这是一个共享锁,因此每个连续的读取操作都可以同时请求读锁,并且数据将保持不可修改,直到所有锁都被释放。需要修改数据的事务请求互斥写锁,这会阻止其他写锁和任何读锁的发出。
Upsert
Upsert 是一种数据库操作,用于更新现有条目,或者在未找到当前条目时插入新条目。Upsert 操作由查询组件组成,该组件用于搜索要更新的匹配记录,以及一个突变组件,该组件指定应更新哪些值。通常,需要为其他字段提供其他值,以处理必须创建新记录的情况。
在谈论数据库时,值是数据库系统存储在其数据结构中的任何数据片段。借助其他上下文(如存储值的字段名称),可以为该值分配超出其内在含义的含义。特定的存储结构(如列或表)可能会定义关于它存储的值类型的要求。
纵向扩展
纵向扩展,也称为向上扩展,是一种扩展策略,涉及向服务器或组件分配额外的资源(如 CPU、RAM 或存储),以提高其性能或负载容量。纵向扩展通常是扩展工作负载的最简单策略,因为它不会增加当前部署的架构复杂性。虽然纵向扩展在许多情况下都能很好地工作,但一些缺点包括依赖于单点故障以及单个机器可以合理管理的资源量的限制。
顶点
在图数据库中,顶点是可以保存属性并通过边连接到其他顶点的实体。顶点类似于其他数据库系统中的记录或文档,因为它们具有指示它们表示的对象类型的标签或名称,并且它们具有提供特定附加信息的属性,以区分特定顶点与其类型的其他顶点。顶点通过定义它们之间关系的边连接到其他顶点。例如,“作者”顶点可以通过“written by”边连接到“book”顶点。
视图
在关系数据库中,视图是存储查询的类表表示。视图可以在许多上下文中用作表,但它们不是底层数据结构的一部分,而是从其查询的结果派生的。视图对于构建比底层模式中存在的数据更复杂的表示形式很有用。例如,视图可以连接几个表并仅显示几个相关列,这可以帮助使数据更可用,即使由于一致性或性能原因,不同的结构对于存储是更可取的。
易失性存储
易失性存储是任何依赖持续供电来持久保存数据的存储类型。例如,存储在 RAM 中的数据通常被认为是易失性的,因为它会在断电时丢失且无法恢复。
宽列存储
宽列存储是一种 NoSQL 数据库,它使用标准列族和超级列族将其数据组织成行和列。行键用于检索所有关联的列和超级列。每行可以包含完全不同的列,因为列定义和值都存储在行结构本身中。
预写式日志 (WAL)
预写式日志或 WAL 是一种数据修订管理方法,它提高了系统数据在崩溃和故障期间损坏的弹性。如果没有像 WAL 这样的技术,如果在对数据库的更改仅部分完成时系统崩溃,则可能会发生损坏。在这种情况下,数据将既不处于初始状态也不处于预期状态。使用预写式日志记录,系统在执行操作之前将其意图记录到持久的预写式日志中。这样,数据库可以通过在恢复期间查看日志并重做最初未正确完成的任何操作来恢复数据的已知良好状态。
权重(搜索)
在搜索的上下文中,搜索权重是分配给不同数据类别的任意值,旨在影响项目在分析相关性时的优先级。为特定类型的信息分配较高的权重将导致查询引擎在编译相关结果列表时,与其他类别相比,更重视该类别。
旁路缓存
旁路缓存是一种缓存模式,其中写入查询直接发送到后备数据库,而不是首先写入缓存。由于缓存中与更新相关的任何项目现在都将过时,因此此方法需要一种使这些项目的缓存结果无效化的方法,以便后续读取。这种技术几乎总是与缓存读取策略结合使用,以控制读取行为。这种方法最适合写入或更新后不经常读取的数据。
回写缓存
回写缓存是一种缓存方法,其中写入查询被发送到缓存而不是后备数据库。然后,缓存定期捆绑写入操作,并将它们发送到后备数据库以进行持久化。这是对直写缓存方法的一种修改,目的是减少高吞吐量写入操作造成的压力,但代价是在发生崩溃时耐久性降低。这确保了所有最近写入的数据都可以立即供应用程序使用,而无需额外的操作,但如果缓存在能够将写入持久化到数据库之前崩溃,则可能导致数据丢失。
写入操作
在数据库的上下文中,写入操作是任何修改存储数据的数据库操作。这包括插入新记录、删除记录和将现有记录更新为新值。
直写缓存
直写缓存是一种缓存模式,其中应用程序直接将更改写入缓存,而不是后备数据库。然后,缓存立即将新数据转发到后备数据库以进行持久化。这种策略最大限度地降低了在缓存崩溃时数据丢失的风险,同时确保读取操作可以访问所有新数据。在高写入场景中,过渡到回写缓存以防止后备数据库承受过大压力可能是有意义的。
关于作者
Justin Ellingwood

Justin Ellingwood

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