图书目录

Contents

Part I  Foundations of Data Systems

Chapter 1  Reliable, Scalable, and Maintainable Applications/可靠性、可扩展性、可维护性应用 3

Thinking about Data Systems/数据系统深思 5

Reliability/可靠性 8

Hardware Faults/硬件错误 10

Software Errors/软件错误 11

Human Errors/人为错误 13

How Important Is Reliability?/可靠性有多重要? 14

Scalability/可扩展性 15

Describing Load/负载描述 15

Describing Performance/性能描述 19

Approaches for Coping with Load/应对负载的方法 24

Maintainability/可维护性 27

Operability: Making Life Easy for Operations/可操作性:人生苦短,关爱运营 28

Simplicity: Managing Complexity/简单性:复杂度管理 30

Evolvability: Making Change Easy/可演化性:拥抱变化 31

Summary 32

References 34

Chapter 2  Data Models and Query Languages/数据模型与查询语言 37

Relational Model Versus Document Model/关系模型与文档模型 39

The Birth of NoSQL/NoSQL的诞生 40

The Object-Relational Mismatch/对象关系不匹配 41

Many-to-One and Many-to-Many Relationships/多对一和多对多的关系 45

Are Document Databases Repeating History?/文档数据库是否在重蹈覆辙? 49

Relational Versus Document Databases Today/如今关系数据库和文档数据库的比对 53

Query Languages for Data/数据查询语言 59

Declarative Queries on the Web/Web上的声明式查询 62

MapReduce Querying/MapReduce查询 64

Graph-Like Data Models/图数据库模型 68

Property Graphs/属性图 71

The Cypher Query Language/Cypher查询语言 73

Graph Queries in SQL/SQL中的图查询 76

Triple-Stores and SPARQL/三元组存储和SPARQL 78

The Foundation: Datalog/Datalog基础 84

Summary 88

References 90

Chapter 3  Storage and Retrieval/存储与检索 93

Data Structures That Power Your Database/驱动数据库的数据结构 94

Hash Indexes/哈希索引 97

SSTables and LSM-Trees 102

B-Trees 108

Comparing B-Trees and LSM-Trees 113

Other Indexing Structures 116

Transaction Processing or Analytics? 123

Data Warehousing 125

Stars and Snowflakes: Schemas for Analytics 128

Column-Oriented Storage 131

Column Compression 133

Sort Order in Column Storage 136

Writing to Column-Oriented Storage 138

Aggregation: Data Cubes and Materialized Views 138

Summary 141

References 143

Chapter 4  Encoding and Evolution/编码与演化 147

Formats for Encoding Data/数据编码格式 149

Language-Specific Formats/语言特定格式 150

JSON, XML, and Binary Variants/JSON、XML和二进制变体 152

Thrift and Protocol Buffers 157

Avro 163

The Merits of Schemas/模式的优势 171

Modes of Dataflow/数据流的类型 173

Dataflow Through Databases/数据库中的数据流 174

Dataflow Through Services: REST and RPC/服务中的数据流:REST与RPC 177

Message-Passing Dataflow/消息传递中的数据流 186

Summary 190

References 193

Part II  Distributed Data

Chapter 5  Replication/复制 197

Leaders and Followers/领导者与追随者 199

Synchronous Versus Asynchronous Replication/同步复制与异步复制 200

Setting Up New Followers/设置新的从库 203

Handling Node Outages/宕机节点的处理 204

Implementation of Replication Logs/复制日志的实现 208

Problems with Replication Lag/复制延迟问题 212

Reading Your Own Writes/读写一致性 214

Monotonic Reads/单调读 217

Consistent Prefix Reads/一致前缀读 218

Solutions for Replication Lag/复制延迟的解决方案 220

Multi-Leader Replication/多主复制 221

Use Cases for Multi-Leader Replication/多主复制的应用场景 222

Handling Write Conflicts/处理写入冲突 227

Multi-Leader Replication Topologies/多主复制拓扑 232

Leaderless Replication/无主复制 235

Writing to the Database When a Node Is Down/当节点故障时写入数据库 236

Limitations of Quorum Consistency/仲裁一致性的局限 241

Sloppy Quorums and Hinted Handoff/松散法定人数与带提示的接力 244

Detecting Concurrent Writes/检测并发写入 247

Summary 257

References 260

Chapter 6  Partitioning/分区 263

Partitioning and Replication/分区与复制 265

Partitioning of Key-Value Data/键值数据分区 266

Partitioning by Key Range/根据键的范围分区 267

Partitioning by Hash of Key/根据键的散列分区 269

Skewed Workloads and Relieving Hot Spots/负载倾斜与热点消除 271

Partitioning and Secondary Indexes/分片与次级索引 272

Partitioning Secondary Indexes by Document/文档二级索引 273

Partitioning Secondary Indexes by Term/关键词二级索引分区 275

Rebalancing Partitions/分区再平衡 278

Strategies for Rebalancing/平衡策略 278

Operations: Automatic or Manual Rebalancing/运维:手动平衡VS自动平衡 284

Request Routing/请求路由 285

Parallel Query Execution/执行并行查询 288

Summary 289

References 291

Chapter 7  Transactions/事务 293

The Slippery Concept of a Transaction/事务的难以明确的概念 295

The Meaning of ACID 296

Single-Object and Multi-Object Operations/单对象与多对象操作 302

Weak Isolation Levels/弱隔离级别 309

Read Committed 311

Snapshot Isolation and Repeatable Read/快照隔离与可重复读 315

Preventing Lost Updates/防止丢失更新 323

Write Skew and Phantoms 329

Serializability/可序列化 336

Actual Serial Execution 337

Two-Phase Locking (2PL) 344

Serializable Snapshot Isolation (SSI) 350

Summary 357

References 360

Chapter 8  The Trouble with Distributed Systems/分布式系统的烦恼 365

Faults and Partial Failures/故障和部分失败 367

Cloud Computing and Supercomputing 369

Unreliable Networks/不可靠的网络 372

Network Faults in Practice 375

Detecting Faults 376

Timeouts and Unbounded Delays/超时和无限延迟 378

Synchronous Versus Asynchronous Networks/同步vs异步网络 383

Unreliable Clocks/不可靠的锁 387

Monotonic Versus Time-of-Day Clocks 389

Clock Synchronization and Accuracy 391

Relying on Synchronized Clocks 393

Process Pauses 400

Knowledge, Truth, and Lies/知识、事实和谎言 407

The Truth Is Defined by the Majority 408

Byzantine Faults/拜占庭故障 414

System Model and Reality/系统模型和实际情况 419

Summary 425

References 428

  

Chapter 9  Consistency and Consensus/一致性和共识 433

  

Consistency Guarantees 435

Linearizability/线性一致性 437

What Makes a System Linearizable? 440

Relying on Linearizability 446

Implementing Linearizable Systems 450

The Cost of Linearizability 453

Ordering Guarantees 459

Ordering and Causality 460

Sequence Number Ordering 466

Total Order Broadcast 473

Distributed Transactions and Consensus 479

Atomic Commit and Two-Phase Commit (2PC) 481

Distributed Transactions in Practice 490

Fault-Tolerant Consensus 497

Membership and Coordination Services 506

Summary 511

References 515

Part III  Derived Data

Chapter 10  Batch Processing/批处理 523

  

Batch Processing with Unix Tools/批处理与Unix工具 526

Simple Log Analysis 527

The Unix Philosophy 530

MapReduce and Distributed Filesystems/映射-规约和分布式文件系统 536

MapReduce Job Execution/映射-归纳的任务执行 538

Reduce-Side Joins and Grouping/归约阶段的连接和分组 545

Map-Side Joins 553

The Output of Batch Workflows/批处理流的输出 556

Comparing Hadoop to Distributed Databases 563

Beyond MapReduce/映射-规约之外 569

Materialization of Intermediate State/中间状态的具体化 570

Graphs and Iterative Processing 577

High-Level APIs and Languages 581

Summary 585

References 589

  

Chapter 11  Stream Processing/流处理 593

  

Transmitting Event Streams/传递时间流 595

Messaging Systems/消息系统 597

Partitioned Logs/分区日志 606

Databases and Streams/数据库与流 613

Keeping Systems in Sync/保持系统同步 614

Change Data Capture/变更数据捕获 617

Event Sourcing/时间溯源 622

State, Streams, and Immutability/状态、流和不变性 626

Processing Streams/流处理 633

Uses of Stream Processing/流处理的应用 635

Reasoning About Time/时间推理 642

Stream Joins/流式连接 649

Fault Tolerance/容错 655

Summary 660

References 663

  

Chapter 12  The Future of Data Systems/数据系统的未来 669

  

Data Integration/数据集成 670

Combining Specialized Tools by Deriving Data/组合使用衍生数据的工具 671

Batch and Stream Processing/批处理与流处理 679

Unbundling Databases/分拆数据库 687

Composing Data Storage Technologies/组合使用数据库存储技术 688

Designing Applications Around Dataflow/围绕数据流设计应用 696

Observing Derived State/观察衍生数据状态 705

Aiming for Correctness/将事情做正确 715

The End-to-End Argument for Databases/为数据库使用端到端的参数 717

Enforcing Constraints/强制约束 724

Timeliness and Integrity/及时性和完整性 730

Trust, but Verify/信任但验证 738

Doing the Right Thing/做正确的事 746

Predictive Analytics/预测性分析 747

Privacy and Tracking/隐私和追踪 752

Summary 764

References 767

XII

设计数据密集型应用

XIII

Contents