ddia/glossary.md

252 lines
16 KiB
Markdown
Raw Permalink Normal View History

2022-01-19 09:26:32 +08:00
# 术语表
2023-09-24 00:02:42 +08:00
> 请注意,本术语表中的定义简短而简单,旨在传达核心思想,而不是术语的完整细微之处。有关更多详细信息,请参阅正文中的参考资料。
2022-01-19 09:26:32 +08:00
* **异步asynchronous**
2022-01-19 09:26:32 +08:00
不等待某些事情完成(例如,将数据发送到网络中的另一个节点),并且不会假设要花多长时间。请参阅“[同步复制与异步复制](ch5.md#同步复制与异步复制)”、“[同步网络与异步网络](ch8.md#同步网络与异步网络)”以及“[系统模型与现实](ch8.md#系统模型与现实)”。
2022-01-19 09:26:32 +08:00
* **原子atomic**
2022-01-19 09:26:32 +08:00
在并发操作的上下文中:描述一个在单个时间点看起来生效的操作,所以另一个并发进程永远不会遇到处于“半完成”状态的操作。另见隔离。
2022-01-19 09:26:32 +08:00
在事务的上下文中:将一些写入操作分为一组,这组写入要么全部提交成功,要么遇到错误时全部回滚。请参阅“[原子性](ch7.md#原子性)”和“[原子提交与两阶段提交](ch9.md#原子提交与两阶段提交)”。
2022-01-19 09:26:32 +08:00
* **背压backpressure**
2022-01-19 09:26:32 +08:00
接收方接收数据速度较慢时,强制降低发送方的数据发送速度。也称为流量控制。请参阅“[消息传递系统](ch11.md#消息传递系统)”。
2022-01-19 09:26:32 +08:00
* **批处理batch process**
2022-01-19 09:26:32 +08:00
一种计算,它将一些固定的(通常是大的)数据集作为输入,并将其他一些数据作为输出,而不修改输入。见[第十章](ch10.md)。
2022-01-19 09:26:32 +08:00
* **边界bounded**
2022-01-19 09:26:32 +08:00
有一些已知的上限或大小。例如,网络延迟情况(请参阅“[超时与无穷的延迟](ch8.md#超时与无穷的延迟)”)和数据集(请参阅[第十一章](ch11.md)的介绍)。
2022-01-19 09:26:32 +08:00
* **拜占庭故障Byzantine fault**
2022-01-19 09:26:32 +08:00
表现异常的节点,这种异常可能以任意方式出现,例如向其他节点发送矛盾或恶意消息。请参阅“[拜占庭故障](ch8.md#拜占庭故障)”。
2022-01-19 09:26:32 +08:00
* **缓存cache**
2022-01-19 09:26:32 +08:00
一种组件,通过存储最近使用过的数据,加快未来对相同数据的读取速度。缓存中通常存放部分数据:因此,如果缓存中缺少某些数据,则必须从某些底层较慢的数据存储系统中,获取完整的数据副本。
2022-01-19 09:26:32 +08:00
* **CAP定理CAP theorem**
2022-01-19 09:26:32 +08:00
一个被广泛误解的理论结果,在实践中是没有用的。请参阅“[CAP定理](ch9.md#CAP定理)”。
2022-01-19 09:26:32 +08:00
* **因果关系causality**
2022-01-19 09:26:32 +08:00
2023-01-15 21:59:19 +08:00
事件之间的依赖关系,当一件事发生在另一件事情之前。例如,后面的事件是对早期事件的回应,或者依赖于更早的事件,或者应该根据先前的事件来理解。请参阅“[“此前发生”的关系和并发](ch5.md#“此前发生”的关系和并发)”和“[顺序与因果关系](ch9.md#顺序与因果关系)”。
2022-01-19 09:26:32 +08:00
* **共识consensus**
2022-01-19 09:26:32 +08:00
分布式计算的一个基本问题,就是让几个节点同意某些事情(例如,哪个节点应该是数据库集群的领导者)。问题比乍看起来要困难得多。请参阅“[容错共识](ch9.md#容错共识)”。
2022-01-19 09:26:32 +08:00
* **数据仓库data warehouse**
2022-01-19 09:26:32 +08:00
一个数据库其中来自几个不同的OLTP系统的数据已经被合并和准备用于分析目的。请参阅“[数据仓库](ch3.md#数据仓库)”。
2022-01-19 09:26:32 +08:00
* **声明式declarative**
2022-01-19 09:26:32 +08:00
描述某些东西应有的属性,但不知道如何实现它的确切步骤。在查询的上下文中,查询优化器采用声明性查询并决定如何最好地执行它。请参阅“[数据查询语言](ch2.md#数据查询语言)”。
2022-01-19 09:26:32 +08:00
* **非规范化denormalize**
2022-01-19 09:26:32 +08:00
为了加速读取,在标准数据集中引入一些冗余或重复数据,通常采用缓存或索引的形式。非规范化的值是一种预先计算的查询结果,像物化视图。请参阅“[单对象和多对象操作](ch7.md#单对象和多对象操作)”和“[从同一事件日志中派生多个视图](ch11.md#从同一事件日志中派生多个视图)”。
2022-01-19 09:26:32 +08:00
* **衍生数据derived data**
2022-01-19 09:26:32 +08:00
一种数据集,根据其他数据通过可重复运行的流程创建。必要时,你可以运行该流程再次创建衍生数据。衍生数据通常用于提高特定数据的读取速度。常见的衍生数据有索引、缓存和物化视图。请参阅[第三部分](part-iii.md)的介绍。
2022-01-19 09:26:32 +08:00
* **确定性deterministic**
2022-01-19 09:26:32 +08:00
描述一个函数,如果给它相同的输入,则总是产生相同的输出。这意味着它不能依赖于随机数字、时间、网络通信或其他不可预测的事情。
2022-01-19 09:26:32 +08:00
* **分布式distributed**
2022-01-19 09:26:32 +08:00
在由网络连接的多个节点上运行。对于部分节点故障,具有容错性:系统的一部分发生故障时,其他部分仍可以正常工作,通常情况下,软件无需了解故障相关的确切情况。请参阅“[故障与部分失效](ch8.md#故障与部分失效)”。
2022-01-19 09:26:32 +08:00
* **持久durable**
2022-01-19 09:26:32 +08:00
以某种方式存储数据,即使发生各种故障,也不会丢失数据。请参阅“[持久性](ch7.md#持久性)”。
2022-01-19 09:26:32 +08:00
* **ETLExtract-Transform-Load**
2022-01-19 09:26:32 +08:00
提取-转换-加载Extract-Transform-Load。从源数据库中提取数据将其转换为更适合分析查询的形式并将其加载到数据仓库或批处理系统中的过程。请参阅“[数据仓库](ch3.md#数据仓库)”。
2022-01-19 09:26:32 +08:00
* **故障切换failover**
2022-01-19 09:26:32 +08:00
在具有单一领导者的系统中,故障切换是将领导角色从一个节点转移到另一个节点的过程。请参阅“[处理节点宕机](ch5.md#处理节点宕机)”。
2022-01-19 09:26:32 +08:00
* **容错fault-tolerant**
2022-01-19 09:26:32 +08:00
如果出现问题(例如,机器崩溃或网络连接失败),可以自动恢复。请参阅“[可靠性](ch1.md#可靠性)”。
2022-01-19 09:26:32 +08:00
* **流量控制flow control**
2022-01-19 09:26:32 +08:00
见背压backpressure
2022-01-19 09:26:32 +08:00
* **追随者follower**
2022-01-19 09:26:32 +08:00
一种数据副本,仅处理领导者或主库发出的数据变更,不直接接受来自客户端的任何写入。也称为备库、从库、只读副本或热备份。请参阅“[领导者与追随者](ch5.md#领导者与追随者)”。
2022-01-19 09:26:32 +08:00
* **全文检索full-text search**
2022-01-19 09:26:32 +08:00
通过任意关键字来搜索文本,通常具有附加特征,例如匹配类似的拼写词或同义词。全文索引是一种支持这种查询的次级索引。请参阅“[全文搜索和模糊索引](ch3.md#全文搜索和模糊索引)”。
2022-01-19 09:26:32 +08:00
* **图graph**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
一种数据结构,由顶点(可以指向的东西,也称为节点或实体)和边(从一个顶点到另一个顶点的连接,也称为关系或弧)组成。请参阅“[图数据模型](ch2.md#图数据模型)”。
2022-01-19 09:26:32 +08:00
* **散列hash**
2022-01-19 09:26:32 +08:00
将输入转换为看起来像随机数值的函数。相同的输入会转换为相同的数值,不同的输入一般会转换为不同的数值,也可能转换为相同数值(也被称为冲突)。请参阅“[根据键的散列分区](ch6.md#根据键的散列分区)”。
2022-01-19 09:26:32 +08:00
* **幂等idempotent**
2022-01-19 09:26:32 +08:00
用于描述一种操作可以安全地重试执行,即执行多次的效果和执行一次的效果相同。请参阅“[幂等性](ch11.md#幂等性)”。
2022-01-19 09:26:32 +08:00
* **索引index**
2022-01-19 09:26:32 +08:00
一种数据结构。通过索引,你可以根据特定字段的值,在所有数据记录中进行高效检索。请参阅“[驱动数据库的数据结构](ch3.md#驱动数据库的数据结构)”。
2022-01-19 09:26:32 +08:00
* **隔离性isolation**
2022-01-19 09:26:32 +08:00
在事务上下文中,用于描述并发执行事务的互相干扰程度。串行运行具有最强的隔离性,不过其它程度的隔离也通常被使用。请参阅“[隔离性](ch7.md#隔离性)”。
2022-01-19 09:26:32 +08:00
* **连接join**
2022-01-19 09:26:32 +08:00
汇集有共同点的记录。在一个记录与另一个记录有关(外键,文档参考,图中的边)的情况下最常用,查询需要获取参考所指向的记录。请参阅“[多对一和多对多的关系](ch2.md#多对一和多对多的关系)”和“[Reduce侧连接与分组](ch10.md#Reduce侧连接与分组)”。
2022-01-19 09:26:32 +08:00
* **领导者leader**
2022-01-19 09:26:32 +08:00
当数据或服务被复制到多个节点时,领导者是被指定为可以接受数据变更的副本。领导者可以通过某些协议选举产生,也可以由管理员手动选择。领导者也被称为主库。请参阅“[领导者与追随者](ch5.md#领导者与追随者)”。
2022-01-19 09:26:32 +08:00
* **线性化linearizable**
2022-01-19 09:26:32 +08:00
表现为系统中只有一份通过原子操作更新的数据副本。请参阅“[线性一致性](ch9.md#线性一致性)”。
2022-01-19 09:26:32 +08:00
* **局部性locality**
2022-01-19 09:26:32 +08:00
一种性能优化方式,如果经常在相同的时间请求一些离散数据,把这些数据放到一个位置。请参阅“[查询的数据局部性](ch2.md#查询的数据局部性)”。
2022-01-19 09:26:32 +08:00
* **锁lock**
2022-01-19 09:26:32 +08:00
一种保证只有一个线程、节点或事务可以访问的机制,如果其它线程、节点或事务想访问相同元素,则必须等待锁被释放。请参阅“[两阶段锁定](ch7.md#两阶段锁定)”和“[领导者和锁](ch8.md#领导者和锁)”。
2022-01-19 09:26:32 +08:00
* **日志log**
2022-01-19 09:26:32 +08:00
日志是一个只能以追加方式写入的文件,用于存放数据。预写式日志用于在存储引擎崩溃时恢复数据(请参阅“[让B树更可靠](ch3.md#让B树更可靠)”);结构化日志存储引擎使用日志作为它的主要存储格式(请参阅“[SSTables和LSM树](ch3.md#SSTables和LSM树)”);复制型日志用于把写入从领导者复制到追随者(请参阅“[领导者与追随者](ch5.md#领导者与追随者)”);事件性日志可以表现为数据流(请参阅“[分区日志](ch11.md#分区日志)”)。
2022-01-19 09:26:32 +08:00
* **物化materialize**
2022-01-19 09:26:32 +08:00
急切地计算并写出结果,而不是在请求时计算。请参阅“[聚合:数据立方体和物化视图](ch3.md#聚合:数据立方体和物化视图)”和“[物化中间状态](ch10.md#物化中间状态)”。
2022-01-19 09:26:32 +08:00
* **节点node**
2022-01-19 09:26:32 +08:00
计算机上运行的一些软件的实例,通过网络与其他节点通信以完成某项任务。
2022-01-19 09:26:32 +08:00
* **规范化normalized**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
以没有冗余或重复的方式进行结构化。在规范化数据库中,当某些数据发生变化时,你只需要在一个地方进行更改,而不是在许多不同的地方复制很多次。请参阅“[多对一和多对多的关系](ch2.md#多对一和多对多的关系)”。
2022-01-19 09:26:32 +08:00
* **OLAPOnline Analytic Processing**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
在线分析处理。通过对大量记录进行聚合(例如,计数,总和,平均)来表征的访问模式。请参阅“[事务处理还是分析?](ch3.md#事务处理还是分析?)”。
2022-01-19 09:26:32 +08:00
* **OLTPOnline Transaction Processing**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
在线事务处理。访问模式的特点是快速查询,读取或写入少量记录,这些记录通常通过键索引。请参阅“[事务处理还是分析?](ch3.md#事务处理还是分析?)”。
2022-01-19 09:26:32 +08:00
* **分区partitioning**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
将单机上的大型数据集或计算结果拆分为较小部分,并将其分布到多台机器上。也称为分片。见[第六章](ch6.md)。
2022-01-19 09:26:32 +08:00
* **百分位点percentile**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
通过计算有多少值高于或低于某个阈值来衡量值分布的方法。例如某个时间段的第95个百分位响应时间是时间t则该时间段中95%的请求完成时间小于t5%的请求完成时间要比t长。请参阅“[描述性能](ch1.md#描述性能)”。
2022-01-19 09:26:32 +08:00
* **主键primary key**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
唯一标识记录的值(通常是数字或字符串)。在许多应用程序中,主键由系统在创建记录时生成(例如,按顺序或随机); 它们通常不由用户设置。另请参阅次级索引。
2022-01-19 09:26:32 +08:00
* **法定人数quorum**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
在操作完成之前,需要对操作进行投票的最少节点数量。请参阅“[读写的法定人数](ch5.md#读写的法定人数)”。
2022-01-19 09:26:32 +08:00
* **再平衡rebalance**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
将数据或服务从一个节点移动到另一个节点以实现负载均衡。请参阅“[分区再平衡](ch6.md#分区再平衡)”。
2022-01-19 09:26:32 +08:00
* **复制replication**
2022-01-19 09:26:32 +08:00
在几个节点(副本)上保留相同数据的副本,以便在某些节点无法访问时,数据仍可访问。请参阅[第五章](ch5.md)。
2022-01-19 09:26:32 +08:00
* **模式schema**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
一些数据结构的描述,包括其字段和数据类型。可以在数据生命周期的不同点检查某些数据是否符合模式(请参阅“[文档模型中的模式灵活性](ch2.md#文档模型中的模式灵活性)”),模式可以随时间变化(请参阅[第四章](ch4.md))。
2022-01-19 09:26:32 +08:00
* **次级索引secondary index**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
与主要数据存储器一起维护的附加数据结构,使你可以高效地搜索与某种条件相匹配的记录。请参阅“[其他索引结构](ch3.md#其他索引结构)”和“[分区与次级索引](ch6.md#分区与次级索引)”。
2022-01-19 09:26:32 +08:00
* **可串行化serializable**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
保证多个并发事务同时执行时,它们的行为与按顺序逐个执行事务相同。请参阅第七章的“[可串行化](ch7.md#可串行化)”。
2022-01-19 09:26:32 +08:00
* **无共享shared-nothing**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
与共享内存或共享磁盘架构相比独立节点每个节点都有自己的CPU内存和磁盘通过传统网络连接。见[第二部分](part-ii.md)的介绍。
2022-01-19 09:26:32 +08:00
* **偏斜skew**
2022-01-19 09:26:32 +08:00
2023-01-15 23:42:44 +08:00
各分区负载不平衡,例如某些分区有大量请求或数据,而其他分区则少得多。也被称为热点。请参阅“[负载偏斜与热点消除](ch6.md#负载偏斜与热点消除)”和“[处理偏斜](ch10.md#处理偏斜)”。
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
时间线异常导致事件以不期望的顺序出现。请参阅“[快照隔离和可重复读](ch7.md#快照隔离和可重复读)”中的关于读取偏差的讨论,“[写入偏差与幻读](ch7.md#写入偏差与幻读)”中的写入偏差以及“[有序事件的时间戳](ch8.md#有序事件的时间戳)”中的时钟偏斜。
2022-01-19 09:26:32 +08:00
* **脑裂split brain**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
两个节点同时认为自己是领导者的情况,这种情况可能违反系统担保。请参阅“[处理节点宕机](ch5.md#处理节点宕机)”和“[真相由多数所定义](ch8.md#真相由多数所定义)”。
2022-01-19 09:26:32 +08:00
* **存储过程stored procedure**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
一种对事务逻辑进行编码的方式,它可以完全在数据库服务器上执行,事务执行期间无需与客户端通信。请参阅“[真的串行执行](ch7.md#真的串行执行)”。
2022-01-19 09:26:32 +08:00
* **流处理stream process**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
持续运行的计算。可以持续接收事件流作为输入,并得出一些输出。见[第十一章](ch11.md)。
2022-01-19 09:26:32 +08:00
* **同步synchronous**
2022-01-19 09:26:32 +08:00
异步的反义词。
2022-01-19 09:26:32 +08:00
* **记录系统system of record**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
一个保存主要权威版本数据的系统,也被称为真相的来源。首先在这里写入数据变更,其他数据集可以从记录系统衍生。请参阅[第三部分](part-iii.md)的介绍。
2022-01-19 09:26:32 +08:00
* **超时timeout**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
检测故障的最简单方法之一,即在一段时间内观察是否缺乏响应。但是,不可能知道超时是由于远程节点的问题还是网络中的问题造成的。请参阅“[超时与无穷的延迟](ch8.md#超时与无穷的延迟)”。
2022-01-19 09:26:32 +08:00
* **全序total order**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
一种比较事物的方法(例如时间戳),可以让你总是说出两件事中哪一件更大,哪件更小。总的来说,有些东西是无法比拟的(不能说哪个更大或更小)的顺序称为偏序。请参阅“[因果顺序不是全序的](ch9.md#因果顺序不是全序的)”。
2022-01-19 09:26:32 +08:00
* **事务transaction**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
为了简化错误处理和并发问题,将几个读写操作分组到一个逻辑单元中。见[第七章](ch7.md)。
2022-01-19 09:26:32 +08:00
* **两阶段提交2PC, two-phase commit**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
一种确保多个数据库节点全部提交或全部中止事务的算法。请参阅“[原子提交与两阶段提交](ch9.md#原子提交与两阶段提交)”。
2022-01-19 09:26:32 +08:00
* **两阶段锁定2PL, two-phase locking**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
一种用于实现可串行化隔离的算法,该算法通过事务获取对其读取或写入的所有数据的锁,直到事务结束。请参阅“[两阶段锁定](ch7.md#两阶段锁定)”。
2022-01-19 09:26:32 +08:00
* **无边界unbounded**
2022-01-19 09:26:32 +08:00
2023-09-24 00:02:42 +08:00
没有任何已知的上限或大小。反义词是边界bounded