2
0
Fork 0
mirror of https://github.com/Vonng/ddia.git synced 2026-06-22 01:17:02 +08:00
ddia/content/zh/glossary.md
2026-02-15 15:53:37 +08:00

253 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 术语表
weight: 500
breadcrumbs: false
---
> 请注意:本术语表的定义刻意保持简短,旨在传达核心概念,而非覆盖术语的全部细节。更多内容请参阅正文对应章节。
### 异步asynchronous
不等待某件事完成(例如通过网络把数据发送到另一个节点),且不假设它会在多长时间内完成。参见“[同步与异步复制](/ch6#sec_replication_sync_async)”、“[同步网络与异步网络](/ch9#sec_distributed_sync_networks)”和“[系统模型与现实](/ch9#sec_distributed_system_model)”。
### 原子atomic
1. 在并发语境下:指一个操作看起来在某个单一时刻生效,其他并发进程不会看到它处于“半完成”状态。另见 *isolation*
2. 在事务语境下:指一组写入要么全部提交、要么全部回滚,即使发生故障也不例外。参见“[原子性](/ch8#sec_transactions_acid_atomicity)”和“[两阶段提交2PC](/ch8#sec_transactions_2pc)”。
### 背压backpressure
当接收方跟不上时,强制发送方降速。也称为 *flow control*。参见“[系统过载后无法恢复时会发生什么](/ch2#sidebar_metastable)”。
### 批处理batch process
以一个固定(通常较大)数据集为输入、产出另一份数据且不修改输入的计算。参见[第 11 章](/ch11#ch_batch)。
### 有界bounded
具有已知上限或大小。例如可用于描述网络延迟(参见“[超时与无界延迟](/ch9#sec_distributed_queueing)”)和数据集(参见[第 12 章](/ch12#ch_stream)导言)。
### 拜占庭故障Byzantine fault
节点以任意错误方式行为,例如向不同节点发送相互矛盾或恶意消息。参见“[拜占庭故障](/ch9#sec_distributed_byzantine)”。
### 缓存cache
通过记住近期访问数据来加速后续读取的组件。缓存通常不完整:若未命中,需要回源到更慢但完整的底层数据存储。
### CAP 定理CAP theorem
一个在实践中经常被误解、且不太有直接指导价值的理论结果。参见“[CAP 定理](/ch10#the-cap-theorem)”。
### 因果关系causality
当一件事“先于”另一件事发生时产生的事件依赖关系。例如后续事件对先前事件的响应、建立在先前事件之上,或必须结合先前事件理解。参见“[happens-before 关系与并发](/ch6#sec_replication_happens_before)”。
### 共识consensus
分布式计算中的基本问题:让多个节点就某件事达成一致(例如谁是主节点)。这比直觉上要困难得多。参见“[共识](/ch10#sec_consistency_consensus)”。
### 数据仓库data warehouse
将多个 OLTP 系统的数据汇总并整理后,用于分析场景的数据库。参见“[数据仓库](/ch1#sec_introduction_dwh)”。
### 声明式declarative
描述“想要什么性质”,而非“如何一步步实现”。在数据库查询中,优化器接收声明式查询并决定最佳执行方式。参见“[术语:声明式查询语言](/ch3)”。
### 反规范化denormalize
在已规范化数据集中引入一定冗余(常见形式为缓存或索引)以换取更快读取。反规范化值可看作预计算结果,类似物化视图。参见“[规范化、反规范化与连接](/ch3#sec_datamodels_normalization)”。
### 派生数据derived data
通过可重复流程由其他数据生成的数据集,必要时可重新计算。通常用于加速某类读取。索引、缓存、物化视图都属于派生数据。参见“[记录系统与派生数据](/ch1#sec_introduction_derived)”。
### 确定性deterministic
一个函数在相同输入下总产生相同输出,不依赖随机数、当前时间、网络交互等不可预测因素。参见“[确定性的力量](/ch9#sidebar_distributed_determinism)”。
### 分布式distributed
系统在多个通过网络连接的节点上运行。其典型特征是 *部分失效*:一部分坏了,另一部分仍在工作,而软件往往难以精确知道哪里坏了。参见“[故障与部分失效](/ch9#sec_distributed_partial_failure)”。
### 持久性durable
以你相信不会丢失的方式存储数据,即使发生各种故障。参见“[持久性](/ch8#durability)”。
### ETL
Extract-Transform-Load提取-转换-加载):从源数据库抽取数据,转成更适合分析查询的形式,再加载到数据仓库或批处理系统。参见“[数据仓库](/ch1#sec_introduction_dwh)”。
### 故障切换failover
在单主系统中,将主角色从一个节点切到另一个节点的过程。参见“[处理节点故障](/ch6#sec_replication_failover)”。
### 容错fault-tolerant
出现故障(如机器崩溃、链路故障)后仍可自动恢复。参见“[可靠性与容错](/ch2#sec_introduction_reliability)”。
### 流量控制flow control
*backpressure*
### 追随者follower
不直接接收客户端写入、仅应用来自主节点变更的副本。也称 *secondary*、*read replica* 或 *hot standby*。参见“[单主复制](/ch6#sec_replication_leader)”。
### 全文检索full-text search
按任意关键词搜索文本,通常支持近似拼写、同义词等能力。全文索引是支持此类查询的一种 *secondary index*。参见“[全文检索](/ch4#sec_storage_full_text)”。
### 图graph
*vertices*(可引用对象,也称 *nodes**entities*)和 *edges*(顶点间连接,也称 *relationships**arcs*)组成的数据结构。参见“[图状数据模型](/ch3#sec_datamodels_graph)”。
### 哈希hash
把输入映射成看似随机数字的函数。相同输入总得相同输出;不同输入通常输出不同,但也可能碰撞(*collision*)。参见“[按键的哈希分片](/ch7#sec_sharding_hash)”。
### 幂等idempotent
可安全重试的操作:执行多次与执行一次效果相同。参见“[幂等性](/ch12#sec_stream_idempotence)”。
### 索引index
一种可高效检索“某字段取某值”的记录的数据结构。参见“[OLTP 的存储与索引](/ch4#sec_storage_oltp)”。
### 隔离性isolation
在事务语境下,并发事务相互干扰的程度。*Serializable* 最强,也常用更弱隔离级别。参见“[隔离性](/ch8#sec_transactions_acid_isolation)”。
### 连接join
把具有关联关系的记录拼在一起。常见于一个记录引用另一个记录(外键、文档引用、图边)时,查询需要取到被引用对象。参见“[规范化、反规范化与连接](/ch3#sec_datamodels_normalization)”和“[JOIN 与 GROUP BY](/ch11#sec_batch_join)”。
### 领导者leader
当数据或服务跨多个节点复制时,被指定为可接受写入的副本。可通过协议选举或管理员指定。也称 *primary**source*。参见“[单主复制](/ch6#sec_replication_leader)”。
### 线性一致linearizable
表现得像系统里只有一份数据副本,且由原子操作更新。参见“[线性一致性](/ch10#sec_consistency_linearizability)”。
### 局部性locality
一种性能优化:把经常被一起访问的数据放在一起。参见“[读写的数据局部性](/ch3#sec_datamodels_document_locality)”。
### 锁lock
保证同一时刻只有一个线程/节点/事务访问某资源的机制;其他访问者需等待锁释放。参见“[两阶段锁2PL](/ch8#sec_transactions_2pl)”和“[分布式锁与租约](/ch9#sec_distributed_lock_fencing)”。
### 日志log
只追加写入的数据文件。*WAL* 用于崩溃恢复(参见“[让 B 树可靠](/ch4#sec_storage_btree_wal)”);*log-structured* 存储把日志作为主存储格式(参见“[日志结构存储](/ch4#sec_storage_log_structured)”);*replication log* 用于主从复制(参见“[单主复制](/ch6#sec_replication_leader)”);*event log* 可表示数据流(参见“[基于日志的消息代理](/ch12#sec_stream_log) ”)。
### 物化materialize
把计算结果提前算出并写下来,而不是按需即时计算。参见“[事件溯源与 CQRS](/ch3#sec_datamodels_events)”。
### 节点node
运行在某台计算机上的软件实例,通过网络与其他节点协作完成任务。
### 规范化normalized
数据结构中尽量避免冗余与重复。规范化数据库里某数据变化时通常只改一处,不需多处同步。参见“[规范化、反规范化与连接](/ch3#sec_datamodels_normalization)”。
### OLAP
Online Analytic Processing在线分析处理典型访问模式是对大量记录做聚合如 count/sum/avg。参见“[事务系统与分析系统](/ch1#sec_introduction_analytics)”。
### OLTP
Online Transaction Processing在线事务处理典型访问模式是快速读写少量记录通常按键索引。参见“[事务系统与分析系统](/ch1#sec_introduction_analytics)”。
### 分片sharding
把单机装不下的大数据集或计算拆成更小部分并分散到多台机器上。也称 *partitioning*。参见[第 7 章](/ch7#ch_sharding)。
### 百分位percentile
通过统计多少值高于/低于某阈值来描述分布。例如某时段 95 分位响应时间为 *t*,表示 95% 请求耗时小于 *t*5% 更长。参见“[描述性能](/ch2#sec_introduction_percentiles)”。
### 主键primary key
唯一标识一条记录的值(通常为数字或字符串)。在很多应用中由系统在创建时生成(顺序或随机),而非用户手工指定。另见 *secondary index*
### 法定票数quorum
一个操作被判定成功前所需的最少投票节点数。参见“[读写法定票数](/ch6#sec_replication_quorum_condition)”。
### 再平衡rebalance
为均衡负载,把数据或服务从一个节点迁移到另一个节点。参见“[键值数据的分片](/ch7#sec_sharding_key_value)”。
### 复制replication
在多个节点(*replicas*)上保存同一份数据,以便部分节点不可达时仍可访问。参见[第 6 章](/ch6#ch_replication)。
### 模式schema
对数据结构(字段、类型等)的描述。数据是否符合模式可在生命周期不同阶段检查(参见“[文档模型中的模式灵活性](/ch3#sec_datamodels_schema_flexibility)”),模式也可随时间演进(参见[第 5 章](/ch5#ch_encoding))。
### 二级索引secondary index
与主存储并行维护的附加结构,用于高效检索满足某类条件的记录。参见“[多列索引与二级索引](/ch4#sec_storage_index_multicolumn)”和“[分片与二级索引](/ch7#sec_sharding_secondary_indexes)”。
### 可串行化serializable
一种 *isolation* 保证:多个事务并发执行时,行为等价于某个串行顺序逐个执行。参见“[可串行化](/ch8#sec_transactions_serializability)”。
### 无共享shared-nothing
一种架构:独立节点(各自 CPU、内存、磁盘通过普通网络连接相对的是共享内存或共享磁盘架构。参见“[共享内存、共享磁盘与无共享架构](/ch2#sec_introduction_shared_nothing)”。
### 偏斜skew
1. 分片负载不均:某些分片请求/数据很多,另一些很少。也称 *hot spots*。参见“[负载偏斜与热点消除](/ch7#sec_sharding_skew)”。
2. 一种时序异常,导致事件呈现为非预期的非顺序。参见“[快照隔离与可重复读](/ch8#sec_transactions_snapshot_isolation)”中的读偏斜、“[写偏斜与幻读](/ch8#sec_transactions_write_skew)”中的写偏斜、以及“[用于事件排序的时间戳](/ch9#sec_distributed_lww)”中的时钟偏斜。
### 脑裂split brain
两个节点同时认为自己是领导者,可能破坏系统保证。参见“[处理节点故障](/ch6#sec_replication_failover)”和“[少数服从多数](/ch9#sec_distributed_majority)”。
### 存储过程stored procedure
把事务逻辑编码到数据库服务器端执行,使事务过程中无需与客户端来回通信。参见“[实际串行执行](/ch8#sec_transactions_serial)”。
### 流处理stream process
持续运行的计算:消费无穷事件流并产出结果。参见[第 12 章](/ch12#ch_stream)。
### 同步synchronous
*asynchronous* 的反义词。
### 记录系统system of record
持有某类数据主权威版本的系统,也称 *source of truth*。数据变更首先写入这里,其他数据集可由其派生。参见“[记录系统与派生数据](/ch1#sec_introduction_derived)”。
### 超时timeout
最简单的故障检测方式之一:在一定时间内未收到响应即判定超时。但无法确定是远端节点故障还是网络问题导致。参见“[超时与无界延迟](/ch9#sec_distributed_queueing)”。
### 全序total order
一种可比较关系(如时间戳),任意两者都能判定大小。若存在不可比较元素,则称 *partial order*(偏序)。
### 事务transaction
把多次读写封装为一个逻辑单元,以简化错误处理与并发问题。参见[第 8 章](/ch8#ch_transactions)。
### 两阶段提交two-phase commit, 2PC
保证多个数据库节点对同一事务要么都 *atomically* 提交、要么都中止的算法。参见“[两阶段提交2PC](/ch8#sec_transactions_2pc)”。
### 两阶段锁two-phase locking, 2PL
实现 *serializable isolation* 的算法:事务对读写数据加锁并持有到事务结束。参见“[两阶段锁2PL](/ch8#sec_transactions_2pl)”。
### 无界unbounded
没有已知上限或大小。与 *bounded* 相反。