常用数据库术语词汇表
介绍
在处理数据库时,您需要学习大量术语才能理解这项技术、如何最好地使用它以及它与环境中其他部分的关系。本词汇表旨在收集数据库社区中使用的常见术语,并提供定义和上下文以帮助您增长知识。
本词汇表是一个进行中的项目,也是一个动态文档。我们打算随着时间的推移更新它,以添加新主题并完善现有条目。我们有一堆希望在不久的将来添加的术语,但如果您有任何希望我们讨论的内容,请打开一个GitHub issue来添加您的建议。
术语
第一范式(1NF)
1NF,或第一范式,描述了一种数据库范式,其中每个表列只有一个值。具有嵌套表作为值或多个值的列不符合1NF。
第二范式(2NF)
2NF,或第二范式,描述了一种数据库范式,它
- 满足1NF的要求,
- 没有直接绑定到候选键子集的值。换句话说,如果一个关系在1NF中,并且所有非候选值都完全依赖于复合键,而不仅仅是候选键的一部分,那么这个关系就在2NF中。例如,一个具有由
title和author组成的候选键的book表,如果它还包含描述作者出生日期的dob字段,则不能处于2NF中。该列值仅依赖于author的值,如果值不同步,可能导致不一致。
第三范式(3NF)
3NF,或第三范式,描述了一种数据库范式,它
- 满足2NF的要求,
- 每个非键属性不传递依赖于键属性。例如,如果一个
user表有一个user_id列作为主键,一个user_city列和一个user_state列,它将不符合3NF,因为user_state通过user_city传递依赖于user_id(城市和州应该提取到它们自己的表中并一起引用)。
第四范式(4NF)
4NF,或第四范式,描述了一种数据库范式,它
- 满足BCNF的要求,
- 对于每个非平凡的多值依赖,依赖中的决定属性要么是候选键,要么是它的超集。换句话说,如果一个字段有多个相互独立的依赖字段,它可能导致违反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,或巴斯-科德范式,描述了一种数据库范式,它
- 满足3NF的要求,
- 其中每个依赖中的决定属性(决定另一个属性值的属性)要么是依赖属性的超集,要么是候选键,要么是候选键的超集。
蓝绿部署
蓝绿部署是一种软件更新部署技术,通过管理两组相同基础设施之间的活动流量,实现几乎零停机。新版本可以部署到非活动基础设施组并独立测试。为了发布新版本,流量路由机制会切换,将流量从当前基础设施导向具有新版本的基础设施。之前活动的 инфраструктура 现在作为下次更新的目标。这种策略的优点是,路由机制可以轻松地来回切换,根据部署的成功与否进行回滚或前进。
瓶颈
在计算中,瓶颈是指系统性能或容量受到单个组件竞争限制的情况。在数据库中,这可能与数据库运行的硬件或可用的网络环境有关。应用程序使用模式也可能影响哪个资源最受竞争。要解决瓶颈,您必须首先确定限制系统性能的资源,然后增加额外容量或采取措施降低使用率。
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 具有出色的可扩展性,集群中的每个节点都可以接受读取或写入。数据以行形式存储,每行具有唯一的标识符并基于分区键进行分区。每个分区键返回一行数据,其中包含内部定义的列名和值,这意味着同一列族中的每行可能包含不同的列。
检查约束
检查约束可能是关系数据库中最灵活的表或列约束。它被定义为一个布尔条件,提出的数据必须满足该条件才能被系统接受。由于条件的性质相当开放,检查约束可以用来建模许多不同类型的需求,以确保进入系统的数据符合预期。
集群
在计算中,集群是一组计算机,都致力于帮助完成共享任务。数据库集群用于与部署在单台计算机上的数据库相比,提高某些类型操作的容量、可用性和性能。不同的集群系统采用许多不同的拓扑、技术和权衡,以实现不同级别的性能或容错能力。由于不同实现的 다양性,很难概括适用于所有集群数据库系统的特定特性。
排序规则
数据库中的排序规则是指不同字符系统的排序和比较特性。大多数数据库允许您分配排序规则设置,这会影响系统中文本的排序、显示以及相互比较的方式。排序规则通常使用一组标签来定义,这些标签描述了字符集、语言上下文以及关于大小写、重音和其他字符修饰符的敏感性或不敏感性等不同选项。
集合
在文档数据库中,集合是用于存储文档组的容器。集合可以具有由应用程序和数据库设计人员分配的语义含义,但除此之外,它们只是在系统中将不同文档集彼此分区的一种方式。不同的集合可以分配不同的属性,并且可以执行针对特定文档集合的操作。
列
列是面向表的数据库的组成部分,它标记并可能定义存储在该列中每个值的类型。在传统关系数据库中,一系列列的属性是定义表一般属性的主要方式之一。添加到表中的每一行都必须提供符合表列相关要求的值。在非关系数据库中,列可以有许多不同的属性。然而,通常,它们用于标记和定义记录选择存储在该列中的值的特性。
列式数据库
列式数据库或面向列的数据库是一种面向表的数据库,类似于传统的关系数据库,它在后台按列而不是按记录存储数据。这意味着与单个列相关的数据存储在一起,而不是将与单个记录相关的所有数据分组。这可以根据使用模式提供不同的性能特性,但通常不会影响用户日常与表中数据的交互方式。尽管在文献中经常混淆,但列式数据库不应与宽列数据库或列族数据库混淆。
列族
列族是一个数据库对象,它存储键值对组,其中每个键都是行标识符,每个值都是一组列名和值。总而言之,列族构建了一个类似于关系数据库中表的结构。但是,每行可以定义自己的列,这意味着行的长度不同,并且在表示的列或存储的数据类型上不必相互匹配。
命令查询职责分离(CQRS)
命令查询职责分离是一种应用程序设计模式,它允许您根据操作对底层数据库的影响来分离操作。通常,这意味着为读取数据的查询与更改数据的查询提供不同的机制。分离这两个上下文允许您进行基础设施和系统更改,以独立扩展每个用例,从而提高性能。
提交
在数据库上下文中,提交数据是执行并持久存储一组提议操作的过程。许多数据库配置为在系统接收到每个语句时自动提交,但事务(例如)是一种机制,通过它可以控制数据库的提交行为,将多个语句分组并作为一个组提交。数据库中的提交是实际负责在系统上执行永久操作的行为。
复合键
在关系数据库中,复合键是由两个或多个列组成的键,可用于唯一标识表中的任何记录。例如,如果有一个shirts表,它只存储每个尺寸和颜色组合的单个记录,那么它可以有一个由color和size列组合定义的复合键。
并发性
并发性是系统同时处理多个任务而不影响整体结果的能力。并发性允许系统并行执行操作,提高任务组的相对性能。
连接池
连接池是一种用于通过管理应用程序和数据库之间的连接来提高性能并避免连接耗尽的策略。它通过维护一个数据库连接池来实现这一点。通过保持连接开放并将其重用于多个查询,应用程序可以避免每次建立连接的开销,并且数据库的连接限制可以通过池组件进行管理。
一致性
一致性是数据系统的一个属性,意味着单个数据实体不会冲突,并且即使引入了更改,也继续建模它们打算表示的信息。必须验证每个数据片段和更改,以确保它符合对数据结构施加的规则,并且必须注意平衡任何可能影响其他数据的更改(例如同时借记和贷记不同的帐户)。
约束
约束是对特定列或表施加的限制,会影响系统接受的值范围。约束用于定义数据库系统可以强制执行的规则,以确保值符合要求。
游标
数据库游标是客户端以受控、精确的方式迭代记录和查询结果的一种方式。游标主要用于通过迭代返回下一行进行处理来逐个分页查询结果。这可以帮助您通过将结果作为队列访问来操作未知数量的记录。使用游标时必须小心,因为它们会占用数据库系统的资源,可能导致锁定,并且通常会导致比其他情况下更多的网络往返次数。
灰度发布
灰度发布是一种部署和发布策略,旨在帮助组织在生产环境中测试新更改而不影响用户体验。灰度发布涉及与原始功能并行发布新代码。然后,请求和操作会被镜像,并同时针对旧代码和新代码运行。虽然从用户的角度来看,系统的行为仅受原始代码影响,但新代码可以使用真实数据进行测试,以验证功能并发现性能和功能问题。经过适当验证后,应用程序可以更改为专门使用新代码路径。
数据
从最广义上讲,数据是事实或信息片段。它们是包含有关某事信息的度量或值。在某些上下文中,数据被定义为与信息不同,因为信息是经过分析或处理的数据,而数据仅由原始值组成。然而,实际上,这些术语通常被用作同义词,并且通常包含任何事实以及解释或情境化它所需的任何相关上下文。数据几乎是所有通信和活动的基本组成部分,并且随着它的收集、分析和情境化,它可以获得意义和价值。
数据定义语言(DDL)
数据定义语言,简称DDL,是一组用于定义数据库结构和对象的命令或操作。它们是关系数据库和其他数据库的关键组成部分,并以SQL等语言中可用于管理数据的可用命令的子集形式表达。数据定义语言是该语言中专门用于描述、创建和修改结构以及将保存数据的框架的部分。
数据独立性
数据独立性是一个术语,用于描述数据库客户端或应用程序与负责表示和存储数据的底层结构的分离。如果数据库能够以一种方式抽象结构,使得即使向关系中添加了额外的属性(逻辑独立性)或者存储介质的细节发生变化(物理独立性),用户应用程序也能继续运行,那么就实现了数据独立性。
数据映射器 ORM
数据映射器ORM,或简称为数据映射器,是一个应用程序组件,它作为数据库表示和应用程序中存在的数据结构之间的中间层进行转换。数据映射器允许您的应用程序逻辑和数据库数据表示保持独立。数据映射器管理和转换这两种介质之间的数据,以便每个表示都是独立的,并且可以智能地构造。
数据类型
数据类型是一种类别或属性,表达了对有效值的约束。例如,整数类型指定只有整数才适合变量或字段。数据类型允许您在定义字段或容器时指定对数据的期望和要求。然后,编程语言或应用程序可以验证引入的数据是否符合必要的标准。数据类型还有助于确定可以对数据执行的可用操作。
数据库
数据库是一种用于组织、构造和存储数据的结构。数据库通常由数据库管理系统管理,该系统提供一个界面来操纵和交互数据库及其管理的数据。数据库可以是高度结构化的,也可以允许更灵活的数据存储模式,并且可以以一种允许在检索时查询、召回和组合数据的方式存储许多不同类型的数据。
数据库抽象层
数据库抽象层是一种编程接口,它试图抽象底层数据库技术之间的差异,为应用层提供统一的体验或接口。数据库抽象层通常对开发人员很有帮助,因为它们有助于规范各种产品之间的实现差异,并且即使底层技术发展,也能保持稳定。然而,也存在一些挑战,例如抽象泄露、向用户掩盖特定于实现的特性或优化,以及创建难以摆脱的依赖项。
数据库管理员 (DBA)
数据库管理员(DBA)是负责配置、管理和优化数据库系统以及相关的软件和硬件生态系统的角色。他们可能涉及的一些职责包括架构规划、配置、模式和变更管理、迁移、复制和负载均衡、分片、安全考虑、管理备份策略等等。数据库管理员通常需要具备数据库设计和理论方面的专业知识,并能够帮助组织做出关于数据库技术选择和实施的决策。在许多现代组织中,DBA传统上承担的职责现在分布在开发和运营团队的各个成员之间,或者已外包给外部提供商,以简化该工作中基础设施管理的部分。
数据库引擎
数据库引擎是数据库管理系统的一部分,负责定义数据如何存储和检索,以及支持与系统和数据交互的操作。一些数据库管理系统支持提供不同功能和设计的多个数据库引擎,而其他系统只支持一个已设计为与软件目标一致的数据库引擎。
数据库管理系统(DBMS)
数据库管理系统,通常称为DBMS,甚至简称为“数据库”,是一种负责组织和管理数据的应用程序。DBMS可以遵循许多不同的范式并优先考虑某些目标。通常,至少,它们负责持久化数据、组织和分类数据,以及摄取、操作和查询数据。最常见的是,DBMS提供客户端/服务器模型,其中服务器负责控制和管理数据,而客户端、库或API可用于与服务器交互以添加或查询数据、更改数据结构或管理系统的其他方面。
数据库模型
数据库模型是数据库管理系统用于存储、组织和提供数据访问的整体策略。有许多不同的数据库模型可用,但关系模型使用高度结构化的表以特定格式存储数据,可能是最常见的类型。其他类型的数据库包括文档数据库、宽列数据库、层次数据库、键值存储等等。一些数据库系统被设计为“多模型”,这意味着它们支持在同一系统中运行不同类型模型的数据库。
数据库代理
数据库代理是负责管理数据库客户端和数据库服务器之间连接的软件组件。数据库代理用于多种原因,包括组织对有限数量连接的访问、允许数据库层的透明扩展以及重定向部署和类似场景的流量。数据库代理通常设计为对应用程序透明,这意味着应用程序可以连接到代理,就像它们直接连接到后端数据库一样。
数据集
数据集,有时写作data set,是数据的单个集合。通常,这表示适用于特定任务、应用程序或关注领域的一块相关数据。通常,数据集是数据本身以及解释它所需的结构和上下文的组合。它们通常由定量和定性值的组合组成,可以作为进一步分析和解释的原始数据。
反规范化
反规范化是一个过程,其中数据库中的数据和结构被“反规范化”或从规范化状态中移除。如果打算规范化的数据结构定义不明确或管理不当,这可能会意外发生。然而,在某些情况下,它也经常有意执行。反规范化倾向于通过在不同位置冗余存储值来允许更快地访问数据。缺点是写入性能下降,并且由于使用多个位置来表示相同的数据,数据可能会不同步。
脏读
脏读是一种特定类型的异常,当一个事务可以读取另一个事务尚未提交的数据时发生。如果第二个事务被回滚而不是提交,则第一个事务将使用一个不能反映数据库实际状态的值。脏读在某些事务隔离级别下是可能的,并且在并行操作数据时代表着可能导致不一致的风险。
分布式数据库
分布式数据库是跨越多个物理系统的数据库系统。数据分散在多台机器上,以提高性能或可用性。虽然分布式系统可以帮助扩展数据库以处理更多负载,但它们也带来了显著的复杂性增加,可能导致一致性和分区挑战,以及某些负面性能影响,例如在某些情况下数据写入的增加。
文档
在文档数据库的上下文中,文档被视为信息的容器,表示单个记录或对象,其中包含相关的描述性数据。文档可以具有灵活的结构,不必与系统上的其他文档匹配,并且通常可以嵌套。文档通常以JSON或YAML等数据序列化格式表示,这些格式可以使用标签和元数据组织文档。
文档数据库
文档数据库是一种数据库模型,它以称为文档的单个对象表示项目。虽然文档可以分组以进行组织,但它们不必共享相同的结构,并且可以设计为独特地捕获描述相关项目所需的数据。文档数据库通常不支持强大的连接操作来链接不同的文档,但由于其灵活性和易于表示程序化数据结构,因此通常因其灵活性和快速生产力时间而受到赞扬。
持久性
持久性是数据的一种特性,表示它已被捕获到持久存储上,即使程序崩溃也能幸存。通常,这意味着将数据刷新到非易失性存储介质,例如不需要电力来维持状态的硬盘。
编码
编码是一种系统,用于在表示书面语言组成部分的字符系统与计算机可以存储和操作的数字表示之间进行转换。已经开发出具有各种字符范围的不同编码系统。有些针对特定语言或语系(如ASCII),而另一些则试图为许多不同语言(如Unicode UTF系列)提供表示,涵盖更大的字符集。
加密传输
加密传输是任何在发送消息给接收方之前对其进行加密的通信过程。传输加密对于确保隐私(防止他人看到敏感信息)以及避免篡改(使数据操纵变得明显)是必要的。在部署数据库时可以使用许多不同的加密传输系统,包括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 以其快速性能、可伸缩性以及实现快速开发周期而闻名。
整体架构
整体式架构(Monolithic architecture)是用来指代传统应用程序的术语。在整体式应用中,尽管为了方便开发,内部可能会被拆分成不同的部分,但一旦构建完成,应用程序就是一个拥有多种不同功能和职责的单一实体。整体式应用可以通过多种方式与外部世界交互,但程序内部不同功能之间的通信和协调都在内部进行。整体式架构有时被认为更容易实现,但随着整个应用程序必须作为一个单一单元进行扩展和缩减,它在扩展性和可用性方面会显得缺乏灵活性。
多版本并发控制 (MVCC)
多版本并发控制(MVCC)是一种在数据库系统中允许并发访问数据的策略,作为行和表锁定的替代方案。MVCC 的工作原理是为每个访问一组数据的用户拍摄“快照”,这些快照代表了一致的数据状态。MVCC 的目标是提供一个系统,其中读查询永远不会阻塞写查询,并且写查询也永远不会阻塞读查询。每个客户端都将能够像他们是唯一用户一样读取和使用数据,而数据库系统则跟踪每个用户正在读取和更新的数据的多个版本。锁定或正常的事务回滚和冲突管理策略用于解决因更新相同数据而引起的冲突。
MySQL
MySQL 是当今最流行的关系型数据库系统之一。它于 1995 年首次发布,并于 2010 年被 Oracle 收购,MySQL 作为强大且易于使用的关系型系统拥有悠久的历史。它提供多种存储引擎,并拥有非常广泛的社区支持。它被用于许多流行的开源和商业项目,多年来被认为是许多互联网服务的关键软件。
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 可能是有用的工具,但它们通常不是完美的抽象,并且可能导致不同模型在如何表示数据方面发生冲突的问题。
对象关系阻抗不匹配
对象关系阻抗不匹配(Object relational impedance mismatch)是一个术语,用于描述许多数据库使用的数据关系模型与许多应用程序使用的面向对象数据视图之间存在的普遍张力。阻抗不匹配指的是两种模型之间的差异,这些差异使得表示之间的忠实转换变得困难或不可能。这是一个广义术语,用于指代该领域中可能发生的许多不同类型的问题,包括表示继承、封装、类型差异、不同的一致性保证等等问题。
乐观并发控制(OCC)
乐观并发控制,有时简称为 OCC,是数据库系统用来处理冲突并发操作的策略。乐观并发控制假设并发事务很可能不会相互干扰,并允许它们继续进行。如果事务尝试提交时发生冲突,它将在此时回滚。如果您认为工作负载中的大多数事务不会相互冲突,那么 OCC 是一个有吸引力的策略。只有实际发生冲突的事务才会受到性能损失(它们将被回滚并必须重新启动),而所有非冲突事务都可以执行而无需等待冲突的发生。
外连接
外连接是一种关系型数据库操作类型,它通过返回每个组成表中的所有行来连接两个表,即使伴随表中没有匹配记录。连接操作通过匹配每个表中指定比较列中具有相同值的记录来构造虚拟行。外连接的结果将包含列值匹配的两个表中的行,并将额外包含每个表中所有不匹配的行。对于这些行,在另一个表中没有匹配的列将用 NULL 值填充,以表示未找到匹配行。
参数化查询
参数化查询,也称为预处理语句,是一种数据库查询,它被准备为将用户输入作为参数,而不是通过将字符串与用户输入连接起来。参数化查询允许您提前指定查询,包括未知输入,然后稍后提供应在语句中替换的值。这可以防止 SQL 注入漏洞,即精心设计的输入可以使数据库系统通过将值视为可执行的 SQL 代码来错误解释查询。
持久性
持久性是数据的一种特性,表示其状态将比创建它的进程更长久。持久性是大多数数据库系统的关键部分,允许数据在数据库进程或服务器本身重新启动后再次加载。应用程序和数据库可以具有不同级别的持久性,以防范不同类型的故障情况,例如单系统持久性、远程持久性和集群持久性。
持久存储
持久存储指的是任何能够在系统断电或断开连接后保持数据的存储介质。持久存储是维护更永久的数据存储库所必需的。通常,持久存储比内存数据等短暂存储慢,因此数据库系统会根据需要使用各种进程在这两种存储系统之间传输数据,以利用和平衡两者的缺点。
悲观并发控制(PCC)
悲观并发控制(PCC)是数据库系统用来处理冲突并发操作的策略。与乐观并发控制相反,悲观并发控制在冲突的可能性一出现时就立即中止事务。如果频繁发生冲突,这种策略很有用,因为它可以确保系统不会浪费时间执行因冲突而无法提交的事务。相反,当可能发生冲突时,它会强制采用一种更序列化的执行方法,这种方法较慢,但避免了非生产性处理。
幻读
幻读是一种隔离异常类型,在某些隔离级别下可能在事务中发生。幻读发生在事务期间,由于事务外部所做的更改,`SELECT` 操作返回不同的行。例如,如果您尝试 `SELECT` 表中的所有记录,第一次可能返回 8 行,但如果另一个事务提交了额外的一行,则重复原始查询将显示不同的结果。
PostgreSQL
PostgreSQL 是一个流行的高性能关系型数据库系统,以其符合各种 SQL 标准而闻名。PostgreSQL 专注于提供一个单一、灵活的数据库引擎,而不是为不同的用例提供多个引擎。它具有高度可扩展性,并拥有大量的社区附加功能和客户端应用程序。
精确度(搜索)
在搜索性能的上下文中,精确度是衡量检索到的结果与给定查询的相关程度。具体而言,搜索精确度定义为返回的所有结果中相关结果数量的比例。高精确度查询不会检索到许多与查询不相关的项。
主键
主键是一种数据库键,被指定为唯一标识数据库行。虽然其他键可能能够提取单个行,但主键专门为此目的进行标记,系统强制执行唯一性和非 NULL 一致性检查。主键可以是自然键(在记录中自然唯一的键)或代理键(专门为充当主键而添加的键),并且可以由单个或多个列组成。
查询
在数据库中,查询是使用查询语言向数据库管理系统发出请求的格式化命令。数据库系统处理查询以了解要采取的操作和要返回给客户端的数据。通常,查询用于请求与特定模式匹配的数据,将新数据插入现有结构,或修改和保存对现有记录的更改。除了针对数据项外,查询通常还可以操作表结构和服务器设置等项,使其成为系统的通用管理界面。SQL(结构化查询语言)是与关系型数据库一起使用的最常见数据库查询语言。
查询构建器
查询构建器是应用程序开发中使用的数据库抽象,旨在简化针对数据库的编程。与 ORM 类似,查询构建器提供了一个用于从应用程序内部与数据库系统交互的接口。然而,查询构建器不是试图将应用程序对象直接映射到数据库记录,而是专注于提供与数据库操作紧密对应的原生函数和方法。这允许您以比直接使用 SQL(或其他数据库语言)字符串更安全、更灵活的方式以编程方式构建查询。
查询语言
查询语言是一种专门用于在数据库中搜索、检索和操作数据的编程语言。SQL(结构化查询语言)是世界上最常见的查询语言,主要用于管理关系型数据库系统中的数据。查询语言操作可以根据过程的焦点和目标进行分类,当它们用于定义数据结构时属于数据定义语言(DDL),当它们用于系统管理任务时属于数据控制语言(DCL),当它们用于修改数据时属于数据操纵语言(DML)。
查询规划器
查询规划器是数据库系统的一个内部组件,负责将客户端提供的查询转换为可以实际搜索数据库并构建所需响应的步骤。精心设计的查询规划器可以考虑多种潜在解决方案并选择能够给出最优结果的选项。有时,查询规划器不会选择最佳解决方案,数据库管理员必须手动调整选择标准。
Raft 共识算法
Raft 共识算法是一种旨在协调节点集群中的信息共享、管理职责和故障恢复的算法。该算法提供了一种方法来确保每个成员都同意数据操作,并包括在网络分区或节点中断情况下进行领导者选举的机制。它通常被认为比 Paxos 等替代方案更简单的实现算法。 Paxos.
读已提交隔离级别
读已提交隔离级别是关系型数据库系统的一种事务隔离级别,提供最低限度的隔离保证。在读已提交级别,事务保证没有脏读现象,即事务可以读取其他尚未提交的事务的数据。在此隔离级别下,不可重复读、幻读和序列化异常仍然可能发生。
读操作
读操作通常被定义为任何不修改数据的检索操作。读操作通常应表现为底层数据是不可变的。它们可能会修改检索到的数据以改变其格式、过滤它或进行其他修改,但存储在数据库系统中的底层数据不会改变。
穿透式缓存
穿透式缓存(Read-through caching)是一种缓存策略,其中缓存部署在通往后端数据源的路径上。应用程序将所有读查询直接发送到缓存。如果缓存包含请求的项,它会立即返回。如果缓存请求未命中,缓存会从后端数据库获取数据,以将项返回给客户端并将其添加到缓存中以供将来查询。在这种架构中,应用程序继续将所有写查询直接发送到后端数据库。
读未提交隔离级别
读未提交隔离级别是关系型数据库系统的一种事务隔离级别,它基本上不提供隔离。使用读未提交隔离级别执行的事务可能受到脏读、不可重复读、幻读和序列化异常的影响。一般来说,读未提交级别用处不大,因为它不满足大多数用户对隔离的期望。
召回率
在搜索性能的背景下,召回率衡量的是查询能够检索到的相关项目数量。召回率具体定义为查询返回的相关结果数量与数据集中相关条目总数之比。高召回率的查询会检索到大量可能与搜索查询相关的项目。
记录
在数据库中,记录是一组数据,通常代表一个实体。在关系型数据库中,记录与表中的行是同义词。每条记录可以关联多个数据或属性(这些在关系表中将是字段)。
Redis
Redis 是一种流行的高性能键值存储,通常用作缓存、消息队列或配置存储。Redis 主要是一个内存数据库,但可以选择将数据持久化到非易失性存储。它具有多种类型、灵活的部署选项和高可扩展性。
关系型数据库
关系型数据库是一种数据库模型,它根据称为表(tables)的预定义数据结构组织数据项。表定义了具有特定约束和类型的各种列,每个记录作为一行添加到表中。高度规则的数据结构的使用为关系型数据库系统提供了许多组合各种表中数据以回答单个查询的方法。关系型数据库的名称来源于代数关系,代数关系描述了可用于操作规则数据的不同操作。在大多数情况下,关系型数据库使用 SQL(结构化查询语言)与数据库系统交互,因为它允许用户以即席方式表达复杂的查询。
关系型数据库管理系统 (RDBMS)
关系型数据库管理系统,也称为 RDBMS,是管理关系型数据库的数据库软件。实际上,RDBMS 一词通常与关系型数据库互换使用,尽管从技术上讲,RDBMS 管理一个或多个关系型数据库。
可重复读隔离级别
可重复读隔离级别是关系型数据库系统的一种事务隔离级别,它提供比读已提交级别更好的隔离,但不如可串行化级别隔离程度高。在可重复读隔离级别,脏读和不可重复读都被阻止。但是,幻读和序列化异常仍然可能发生。这意味着虽然单个记录的读取保证保持稳定,但范围查询(如返回多行的 `SELECT` 语句)可能会因事务外部的提交而改变。
复制
复制是将数据从一个系统持续复制和更新到另一个系统的过程。在数据库中,这通常涉及一个服务器共享更改日志,其他服务器可以读取并将其应用于自己的数据副本。这允许更改在各个服务器之间传播,而无需每个服务器在执行时批准操作。存在多种类型的复制,它们在共享方法、哪些系统从何处复制数据的架构以及控制复制过程的策略方面有所不同。复制是许多系统中维护数据可用性、分发负载以及为备份等离线过程提供数据副本的重要功能。
右连接
右连接是关系型数据库的一种连接操作,它返回第二个指定表中的所有行,无论是否在第一个表中找到匹配的行。连接操作通过匹配每个表中指定比较列中具有相同值的记录来构造虚拟行。右连接的结果将包含列值匹配的两个表中的行,并将额外包含第二个或右表中所有不匹配的行。对于这些行,与第一个或左表关联的列将用 `NULL` 值填充,以表示未找到匹配行。
基于角色的访问控制(RBAC)
基于角色的访问控制,也称为 RBAC,是一种安全策略,它根据用户的分配角色限制其允许的操作。对象权限和执行操作的特权被分配给角色,这些标签使访问管理更容易。为了授予与角色相关联的能力给用户,可以将用户设为该角色的成员。用户可以成为多个角色的成员,以获得每个角色提供的权限的并集。角色有助于标准化各种角色所需的特权,并简化添加或删除用户访问权限。
行
在关系型数据库中,行是数据库表中单个记录的表示。这些数据库中的行具有预定义的结构,形式为指定数据类型和可接受值范围的约束的列集合。关系表中的每行都具有相同的列或字段,从而形成非常规则的数据结构。
顺序扫描
顺序扫描是一种搜索技术,它涉及在搜索时针对查询分析每个潜在项。这与基于索引的搜索相反,后者提前对项进行计数和组织,以实现更快的查询响应。
SQL
SQL,或结构化查询语言,是当今最常用的数据库查询语言。它主要用于处理关系型数据,并允许用户创建查询来选择、过滤、定义和操作关系型数据库中的数据。虽然 SQL 是一个通用标准,但实现细节差异很大,使其不像人们期望的那样与软件无关。
SQL 注入
SQL 注入是一种针对易受攻击的 SQL 支持应用程序的攻击类型。它通过精心制作输入,使数据库系统通过将提交的值视为可执行的 SQL 代码来错误解释查询。SQL 注入主要由开发人员尝试使用字符串拼接将未经净化的用户输入与查询字符串组合而引起。可以使用预处理语句(也称为参数化查询)来防止它,其中带有占位符的查询与替代值分开提交给数据库,从而使查询值的边界明确。
SQLite
SQLite 是一个用 C 语言库编写的关系型数据库管理系统。由于它实现为库,因此它不符合传统的客户端/服务器分离模型,而是依赖于库或客户端程序来执行这两个角色以写入本地文件。它以其大小而言功能非常强大,特别适用于嵌入式用途。SQLite 具有许多不同语言的绑定,它作为内部存储系统广泛部署在应用程序中。
净化输入
净化输入,也称为输入验证,是一种用于使用户提供的值在进一步处理时安全的过程。它用于防范恶意输入,恶意输入可能导致应用程序或数据库错误地将数据值解释为有效的应用程序或查询代码。可以通过多种不同方式净化输入,例如限制有效字符列表、删除对所用系统具有特殊含义的字符以及转义值。一般来说,与其净化输入,不如使用预处理语句被认为安全得多。
扩展
扩展是增加分配给应用程序或工作负载的资源以实现更好性能或处理更多并发活动的过程。扩展策略通常分为两类:向外扩展(也称为横向扩展)和向上扩展(也称为纵向扩展)。横向扩展涉及向池中添加额外的工人以处理传入的工作。这通常意味着添加额外的服务器,它们都可以执行相同的操作,从而分发负载。向上扩展涉及向已经处理请求的服务器添加额外的资源,例如处理器、RAM 或存储。扩展允许您处理更多并发操作,但它可能会增加应用程序架构的复杂性。
Schema
数据库模式(Schema)是一种描述数据在数据库系统中应如何组织的结构。它定义了每个表、字段、索引、关系、函数以及数据库中包含的任何其他结构的格式。模式是定义,它告诉数据库系统对象是什么样子,以及允许或不允许将哪些数据与对象关联。在 PostgreSQL 中,数据库模式具有略微不同的含义,因为它被实现为数据库对象的子对象,充当其他数据库对象的命名空间。
可串行化隔离级别
可串行化隔离级别是关系型数据库系统的一种事务隔离级别,提供最严格的隔离保证。在可串行化级别,脏读、不可重复读、幻读和序列化异常都被阻止。数据库系统通过中止任何可能发生冲突的事务来实现这一点,这确保并发事务可以像串行应用一样应用。可串行化隔离提供了强大的隔离,但由于冲突事务可能被中止并不得不重新提交,因此它可能会遇到显著的性能问题。
序列化异常
序列化异常是并发事务可能发生的一种问题,其中并发事务的提交顺序可能会影响最终数据。序列化异常的发生是因为不同事务中的操作可能基于其他事务正在更新的数据进行计算。为了防止序列化异常,事务必须使用可串行化隔离级别,该级别通过回滚其中一个冲突事务来防止这些情况。
分片
数据库分片是数据库对象存储的一段记录,为了性能原因,它被分离并由不同的数据库节点管理。例如,一个拥有 900 万条记录的数据库表可以被分成三个独立的分片,每个分片管理 300 万条记录。数据通常根据“分片键”进行划分,分片键是确定记录应由哪个分片管理的关键。每个分片管理其记录子集,并且需要一个协调组件通过引用分片键将客户端查询定向到适当的分片。分片可以帮助处理非常大型数据集中的某些类型的性能,但它通常需要做出权衡,这可能会降低其他类型的性能(例如,在需要多个分片之间协调的操作上)。
陈旧数据
在处理数据存储时,陈旧数据指的是任何不能准确反映数据最新状态的数据。这通常主要在缓存时引起关注,因为数据片段可能会在更改使其失效很久之后仍被保留和使用。
标准列族
标准列族是一种列族数据库对象类型,它通过定义与键值对(类似于列)关联的行键来存储数据。每行可以定义和使用自己的列,因此生成的数据集不像关系型数据库表那样规则。但是,行键与列标签和值结合在一起,仍然有点类似于表。标准列族为基于键的数据检索提供了良好的性能,因为它们能够将与键关联的所有信息存储在同一位置,并且可以轻松修改该键的数据结构。
词干提取
词干提取是一种用于全文搜索索引的技术,其中具有相同词干的词被合并为一个条目。这增加了考虑的相关结果的数量,但代价是精确度略有下降。例如,“cook”、“cooked”和“cooks”这些词可能占据一个条目,搜索其中任何一个词都会返回整个条目的结果。
停用词
在全文搜索语境中,停用词是指被认为不适用于搜索查询的词语列表。这些通常是语言中最常见的词,它们本身缺乏太多意义,或者含糊不清到无关紧要的地步。英语中的一些例子包括“the”、“it”和“a”等词。
存储引擎
存储引擎是数据库管理系统中的底层组件,负责在数据库中插入、删除、查询和更新数据。许多数据库功能,如执行事务的能力,实际上是底层存储引擎的属性。一些数据库系统,如 MySQL,有许多不同的存储引擎,可以根据用例的要求使用。其他系统,如 PostgreSQL,专注于提供一个在所有典型场景中都有用的单一存储引擎。
存储过程
存储过程是一种在数据库中定义一组操作的方式,客户端可以轻松运行。由于它们存储在数据库中,它们有时可以提供性能改进并避免网络延迟。存储过程与用户定义函数不同,它们必须使用特殊语句显式调用,而不是合并到其他查询中,并且不能用于所有相同的场景。
超列族
超列族是一种列族数据库对象类型,它通过定义与列族关联的行键来存储数据。每行可以包含多个列族,作为比标准列族进一步细分数据的方式。
超键
超键是关系型数据库模型中任何可以唯一标识记录的属性集。所有其他键类型(主键、候选键、复合键等)都是超键的例子。一个平凡的超键包含所有可用属性,而一个候选键是任何不能通过删除额外列来简化的超键。
表
在关系型数据库中,表是一种数据库结构,它以列的形式定义不同的属性,并以行的形式存储具有相关列值的记录。表列定义的约束和数据类型以及额外的表级要求描述了可以存储在表中的数据类型。由于表是规则的数据结构,数据库系统了解其中包含的数据的形状,这在某些情况下有助于使查询性能更可预测。
表别名
表别名是在查询时赋予现有或计算出的表或类表数据库对象的名称。如果原始名称很长或含糊不清,或者表本身是由查询生成的并且需要一个标签才能在查询的其他部分或用于显示中引用它,那么表别名会很有用。
三层架构
三层应用程序架构是部署 Web 应用程序的常见基础设施架构。第一层由一个或多个 Web 服务器组成,它们响应客户端请求、提供静态内容并向后续层生成请求。第二层由应用程序服务器处理,负责通过执行代码生成动态内容以响应前端。第三层由数据库系统处理,负责响应中间层对用于生成内容的自定义值的请求。
令牌
在自然语言处理和全文搜索中,令牌是系统识别的离散词,可以根据不同的特征进行分类。令牌可以存储其在文本中的相对位置、其类型(数字、单词、短语等)以及任何可能附加的有用元数据。
事务
数据库事务是一组操作,组合成一个单一的单元,可以由数据库系统原子地执行。事务确保其中所有操作都成功完成,或者它们都被回滚以返回到起始状态。这有助于维护数据完整性,并允许客户端在数据库中执行的不同不相关操作之间进行隔离。数据库事务提供的保证由 ACID(原子性、一致性、隔离性和持久性)属性概括。
两阶段提交
两阶段提交是一种用于在分布式系统中实现事务的算法。两阶段提交通过将提交过程分成两个通用阶段来工作。在第一阶段,接收到潜在更改的服务器将其传达给一个协调组件。协调器向所有相关服务器请求关于是否提交的投票。如果投票成功,则开始第二阶段,其中事务实际上由每个成员单独提交。该算法允许分布式系统维护一致的数据集,但代价是与协调投票过程相关的开销。
两阶段锁定
两阶段锁定,有时缩写为 2PL,是一种并发控制策略,用于确保事务是可串行化的。这两个阶段指的是扩展事务持有的锁数量的操作和触发锁释放的操作。两阶段锁定通过使用排他锁和共享锁来协调读写操作。需要读取数据的事务可以请求共享读锁,该锁允许其他事务读取相同的数据但会阻塞写操作。由于这是共享锁,因此每个连续的读操作都可以同时请求读锁,并且在所有锁被释放之前,数据将保持不可修改。需要修改数据的事务请求排他写锁,该锁会阻止发出其他写锁和任何读锁。
更新插入
更新插入(Upsert)是一种数据库操作,它要么更新现有条目,要么在未找到当前条目时插入新条目。更新插入操作由一个查询组件(用于搜索匹配记录以进行更新)和一个变异组件(指定应更新哪些值)组成。通常,需要为其他字段提供额外的值,以处理必须创建新记录的情况。
值
在讨论数据库时,值是数据库系统存储在其数据结构中的任何数据片段。通过额外的上下文,例如存储值的字段名称,可以为值赋予超越其内在含义的意义。特定的存储结构,例如列或表,可能会定义它存储的值类型。
纵向扩展
纵向扩展,也称为向上扩展,是一种扩展策略,它涉及向服务器或组件分配额外的资源,如 CPU、RAM 或存储,以提高其性能或负载容量。向上扩展通常是扩展工作负载最简单的策略,因为它不会增加当前部署的架构复杂性。虽然纵向扩展在许多场景中都能很好地工作,但一些缺点包括依赖单点故障以及单个机器可以合理管理的资源数量限制。
顶点
在图数据库中,顶点是实体,可以拥有属性并通过边连接到其他顶点。顶点类似于其他数据库系统中的记录或文档,因为它们具有指示所代表对象类型的标签或名称,并且具有提供特定附加信息的属性,以区分特定顶点与其同类型的其他顶点。顶点通过定义它们之间关系的边连接到其他顶点。例如,“作者”顶点可以通过“撰写”边连接到“书籍”顶点。
视图
在关系型数据库中,视图是存储查询的类表表示。视图可以在许多上下文中用作表,但它们不是底层数据结构的一部分,而是从其查询结果派生而来。视图对于构建比底层模式中存在的数据更复杂的数据表示很有用。例如,视图可能会连接几个表并只显示几个相关列,这有助于使数据更具可用性,即使由于一致性或性能原因,不同的结构可能更适合存储。
易失性存储
易失性存储是指任何依赖持续供电才能保存数据的存储类型。例如,存储在 RAM 中的数据通常被认为是易失性的,因为它在断电时将丢失且无法恢复。
宽列存储
宽列存储是一种 NoSQL 数据库,它使用标准列族和超列族将数据组织成行和列。行键用于检索所有相关列和超列。每行可以包含完全不同的列,因为列定义和值存储在行结构本身中。
预写式日志(WAL)
预写式日志(WAL)是一种数据修订管理方法,它提高了系统在崩溃和故障期间抵抗数据损坏的能力。如果没有 WAL 这样的技术,如果系统在对数据库的更改只完成一部分时崩溃,则可能会发生损坏。在这种情况下,数据将既不是初始状态也不是预期状态。使用预写式日志,系统在执行操作之前将其意图记录到持久的预写式日志中。这样,数据库可以通过在恢复期间查看日志并重做最初未正确完成的任何操作来恢复到已知良好状态的数据。
权重(搜索)
在搜索的上下文中,搜索权重是分配给不同数据类别的任意值,旨在影响项目在分析相关性时的优先级。为特定类型的信息分配高权重将导致查询引擎在编译相关结果列表时,赋予该类别比其他类别更高的重要性。
回写式缓存
回写式缓存是一种缓存模式,其中写查询直接发送到后端数据库,而不是首先写入缓存。由于缓存中任何与更新相关的项现在都将是陈旧的,因此此方法需要一种方法来使这些项的缓存结果对于后续读取无效。这种技术几乎总是与缓存读取策略结合使用,以控制读取行为。这种方法最适合写入或更新后不经常读取的数据。
写回式缓存
写回式缓存是一种缓存方法,其中写查询发送到缓存而不是后端数据库。然后,缓存会定期捆绑写操作并将其发送到后端数据库进行持久化。这是对穿透式缓存方法的一种修改,旨在在高吞吐量写操作导致压力的情况下减少压力,但代价是崩溃时持久性降低。这确保所有最近写入的数据立即可供应用程序使用,而无需额外操作,但如果缓存在能够将写入持久化到数据库之前崩溃,则可能导致数据丢失。
写操作
在数据库的上下文中,写操作是任何修改存储数据的数据库操作。这包括插入新记录、删除记录和将现有记录更新为新值。
穿透式缓存
穿透式缓存是一种缓存模式,其中应用程序直接将更改写入缓存而不是后端数据库。然后,缓存会立即将新数据转发到后端数据库进行持久化。此策略最大限度地降低了缓存崩溃时数据丢失的风险,同时确保读操作可以访问所有新数据。在高写入场景中,转换为写回式缓存可能是有意义的,以防止后端数据库过载。