术语表

请注意:本术语表的定义刻意保持简短,旨在传达核心概念,而非覆盖术语的全部细节。更多内容请参阅正文对应章节。

异步(asynchronous)

不等待某件事完成(例如通过网络把数据发送到另一个节点),且不假设它会在多长时间内完成。参见“同步与异步复制”、“同步网络与异步网络”和“系统模型与现实”。

原子(atomic)

  1. 在并发语境下:指一个操作看起来在某个单一时刻生效,其他并发进程不会看到它处于“半完成”状态。另见 isolation
  2. 在事务语境下:指一组写入要么全部提交、要么全部回滚,即使发生故障也不例外。参见“原子性”和“两阶段提交(2PC)”。

背压(backpressure)

当接收方跟不上时,强制发送方降速。也称为 flow control。参见“系统过载后无法恢复时会发生什么”。

批处理(batch process)

以一个固定(通常较大)数据集为输入、产出另一份数据且不修改输入的计算。参见第 11 章

有界(bounded)

具有已知上限或大小。例如可用于描述网络延迟(参见“超时与无界延迟”)和数据集(参见第 12 章导言)。

拜占庭故障(Byzantine fault)

节点以任意错误方式行为,例如向不同节点发送相互矛盾或恶意消息。参见“拜占庭故障”。

缓存(cache)

通过记住近期访问数据来加速后续读取的组件。缓存通常不完整:若未命中,需要回源到更慢但完整的底层数据存储。

CAP 定理(CAP theorem)

一个在实践中经常被误解、且不太有直接指导价值的理论结果。参见“CAP 定理”。

因果关系(causality)

当一件事“先于”另一件事发生时产生的事件依赖关系。例如后续事件对先前事件的响应、建立在先前事件之上,或必须结合先前事件理解。参见“happens-before 关系与并发”。

共识(consensus)

分布式计算中的基本问题:让多个节点就某件事达成一致(例如谁是主节点)。这比直觉上要困难得多。参见“共识”。

数据仓库(data warehouse)

将多个 OLTP 系统的数据汇总并整理后,用于分析场景的数据库。参见“数据仓库”。

声明式(declarative)

描述“想要什么性质”,而非“如何一步步实现”。在数据库查询中,优化器接收声明式查询并决定最佳执行方式。参见“术语:声明式查询语言”。

反规范化(denormalize)

在已规范化数据集中引入一定冗余(常见形式为缓存或索引)以换取更快读取。反规范化值可看作预计算结果,类似物化视图。参见“规范化、反规范化与连接”。

派生数据(derived data)

通过可重复流程由其他数据生成的数据集,必要时可重新计算。通常用于加速某类读取。索引、缓存、物化视图都属于派生数据。参见“记录系统与派生数据”。

确定性(deterministic)

一个函数在相同输入下总产生相同输出,不依赖随机数、当前时间、网络交互等不可预测因素。参见“确定性的力量”。

分布式(distributed)

系统在多个通过网络连接的节点上运行。其典型特征是 部分失效:一部分坏了,另一部分仍在工作,而软件往往难以精确知道哪里坏了。参见“故障与部分失效”。

持久性(durable)

以你相信不会丢失的方式存储数据,即使发生各种故障。参见“持久性”。

ETL

Extract-Transform-Load(提取-转换-加载):从源数据库抽取数据,转成更适合分析查询的形式,再加载到数据仓库或批处理系统。参见“数据仓库”。

故障切换(failover)

在单主系统中,将主角色从一个节点切到另一个节点的过程。参见“处理节点故障”。

容错(fault-tolerant)

出现故障(如机器崩溃、链路故障)后仍可自动恢复。参见“可靠性与容错”。

流量控制(flow control)

backpressure

追随者(follower)

不直接接收客户端写入、仅应用来自主节点变更的副本。也称 secondaryread replicahot standby。参见“单主复制”。

全文检索(full-text search)

按任意关键词搜索文本,通常支持近似拼写、同义词等能力。全文索引是支持此类查询的一种 secondary index。参见“全文检索”。

图(graph)

vertices(可引用对象,也称 nodesentities)和 edges(顶点间连接,也称 relationshipsarcs)组成的数据结构。参见“图状数据模型”。

哈希(hash)

把输入映射成看似随机数字的函数。相同输入总得相同输出;不同输入通常输出不同,但也可能碰撞(collision)。参见“按键的哈希分片”。

幂等(idempotent)

可安全重试的操作:执行多次与执行一次效果相同。参见“幂等性”。

索引(index)

一种可高效检索“某字段取某值”的记录的数据结构。参见“OLTP 的存储与索引”。

隔离性(isolation)

在事务语境下,并发事务相互干扰的程度。Serializable 最强,也常用更弱隔离级别。参见“隔离性”。

连接(join)

把具有关联关系的记录拼在一起。常见于一个记录引用另一个记录(外键、文档引用、图边)时,查询需要取到被引用对象。参见“规范化、反规范化与连接”和“JOIN 与 GROUP BY”。

领导者(leader)

当数据或服务跨多个节点复制时,被指定为可接受写入的副本。可通过协议选举或管理员指定。也称 primarysource。参见“单主复制”。

线性一致(linearizable)

表现得像系统里只有一份数据副本,且由原子操作更新。参见“线性一致性”。

局部性(locality)

一种性能优化:把经常被一起访问的数据放在一起。参见“读写的数据局部性”。

锁(lock)

保证同一时刻只有一个线程/节点/事务访问某资源的机制;其他访问者需等待锁释放。参见“两阶段锁(2PL)”和“分布式锁与租约”。

日志(log)

只追加写入的数据文件。WAL 用于崩溃恢复(参见“让 B 树可靠”);log-structured 存储把日志作为主存储格式(参见“日志结构存储”);replication log 用于主从复制(参见“单主复制”);event log 可表示数据流(参见“基于日志的消息代理 ”)。

物化(materialize)

把计算结果提前算出并写下来,而不是按需即时计算。参见“事件溯源与 CQRS”。

节点(node)

运行在某台计算机上的软件实例,通过网络与其他节点协作完成任务。

规范化(normalized)

数据结构中尽量避免冗余与重复。规范化数据库里某数据变化时通常只改一处,不需多处同步。参见“规范化、反规范化与连接”。

OLAP

Online Analytic Processing(在线分析处理):典型访问模式是对大量记录做聚合(如 count/sum/avg)。参见“事务系统与分析系统”。

OLTP

Online Transaction Processing(在线事务处理):典型访问模式是快速读写少量记录,通常按键索引。参见“事务系统与分析系统”。

分片(sharding)

把单机装不下的大数据集或计算拆成更小部分并分散到多台机器上。也称 partitioning。参见第 7 章

百分位(percentile)

通过统计多少值高于/低于某阈值来描述分布。例如某时段 95 分位响应时间为 t,表示 95% 请求耗时小于 t,5% 更长。参见“描述性能”。

主键(primary key)

唯一标识一条记录的值(通常为数字或字符串)。在很多应用中由系统在创建时生成(顺序或随机),而非用户手工指定。另见 secondary index

法定票数(quorum)

一个操作被判定成功前所需的最少投票节点数。参见“读写法定票数”。

再平衡(rebalance)

为均衡负载,把数据或服务从一个节点迁移到另一个节点。参见“键值数据的分片”。

复制(replication)

在多个节点(replicas)上保存同一份数据,以便部分节点不可达时仍可访问。参见第 6 章

模式(schema)

对数据结构(字段、类型等)的描述。数据是否符合模式可在生命周期不同阶段检查(参见“文档模型中的模式灵活性”),模式也可随时间演进(参见第 5 章)。

二级索引(secondary index)

与主存储并行维护的附加结构,用于高效检索满足某类条件的记录。参见“多列索引与二级索引”和“分片与二级索引”。

可串行化(serializable)

一种 isolation 保证:多个事务并发执行时,行为等价于某个串行顺序逐个执行。参见“可串行化”。

无共享(shared-nothing)

一种架构:独立节点(各自 CPU、内存、磁盘)通过普通网络连接;相对的是共享内存或共享磁盘架构。参见“共享内存、共享磁盘与无共享架构”。

偏斜(skew)

  1. 分片负载不均:某些分片请求/数据很多,另一些很少。也称 hot spots。参见“负载偏斜与热点消除”。
  2. 一种时序异常,导致事件呈现为非预期的非顺序。参见“快照隔离与可重复读”中的读偏斜、“写偏斜与幻读”中的写偏斜、以及“用于事件排序的时间戳”中的时钟偏斜。

脑裂(split brain)

两个节点同时认为自己是领导者,可能破坏系统保证。参见“处理节点故障”和“少数服从多数”。

存储过程(stored procedure)

把事务逻辑编码到数据库服务器端执行,使事务过程中无需与客户端来回通信。参见“实际串行执行”。

流处理(stream process)

持续运行的计算:消费无穷事件流并产出结果。参见第 12 章

同步(synchronous)

asynchronous 的反义词。

记录系统(system of record)

持有某类数据主权威版本的系统,也称 source of truth。数据变更首先写入这里,其他数据集可由其派生。参见“记录系统与派生数据”。

超时(timeout)

最简单的故障检测方式之一:在一定时间内未收到响应即判定超时。但无法确定是远端节点故障还是网络问题导致。参见“超时与无界延迟”。

全序(total order)

一种可比较关系(如时间戳),任意两者都能判定大小。若存在不可比较元素,则称 partial order(偏序)。

事务(transaction)

把多次读写封装为一个逻辑单元,以简化错误处理与并发问题。参见第 8 章

两阶段提交(two-phase commit, 2PC)

保证多个数据库节点对同一事务要么都 atomically 提交、要么都中止的算法。参见“两阶段提交(2PC)”。

两阶段锁(two-phase locking, 2PL)

实现 serializable isolation 的算法:事务对读写数据加锁并持有到事务结束。参见“两阶段锁(2PL)”。

无界(unbounded)

没有已知上限或大小。与 bounded 相反。

最后更新于