mirror of
https://github.com/Vonng/ddia.git
synced 2026-06-22 01:17:02 +08:00
389 lines
24 KiB
Markdown
389 lines
24 KiB
Markdown
---
|
||
title: "Table of Content"
|
||
linkTitle: "Table of Content"
|
||
weight: 10
|
||
breadcrumbs: false
|
||
---
|
||
|
||
|
||
|
||

|
||
|
||
|
||
|
||
## [Preface](/en/preface)
|
||
- [Who Should Read This Book?](/en/preface#who-should-read-this-book)
|
||
- [Scope of This Book](/en/preface#scope-of-this-book)
|
||
- [Outline of This Book](/en/preface#outline-of-this-book)
|
||
- [References and Further Reading](/en/preface#references-and-further-reading)
|
||
- [O'Reilly Safari](/en/preface#oreilly-safari)
|
||
- [How to Contact Us](/en/preface#how-to-contact-us)
|
||
- [Acknowledgments](/en/preface#acknowledgments)
|
||
|
||
## [1. Trade-offs in Data Systems Architecture](/en/ch1)
|
||
- [Analytical versus Operational Systems](/en/ch1#sec_introduction_analytics)
|
||
- [Characterizing Transaction Processing and Analytics](/en/ch1#sec_introduction_oltp)
|
||
- [Data Warehousing](/en/ch1#sec_introduction_dwh)
|
||
- [From data warehouse to data lake](/en/ch1#from-data-warehouse-to-data-lake)
|
||
- [Beyond the data lake](/en/ch1#beyond-the-data-lake)
|
||
- [Systems of Record and Derived Data](/en/ch1#sec_introduction_derived)
|
||
- [Cloud versus Self-Hosting](/en/ch1#sec_introduction_cloud)
|
||
- [Pros and Cons of Cloud Services](/en/ch1#sec_introduction_cloud_tradeoffs)
|
||
- [Cloud-Native System Architecture](/en/ch1#sec_introduction_cloud_native)
|
||
- [Layering of cloud services](/en/ch1#layering-of-cloud-services)
|
||
- [Separation of storage and compute](/en/ch1#sec_introduction_storage_compute)
|
||
- [Operations in the Cloud Era](/en/ch1#sec_introduction_operations)
|
||
- [Distributed versus Single-Node Systems](/en/ch1#sec_introduction_distributed)
|
||
- [Problems with Distributed Systems](/en/ch1#sec_introduction_dist_sys_problems)
|
||
- [Microservices and Serverless](/en/ch1#sec_introduction_microservices)
|
||
- [Cloud Computing versus Supercomputing](/en/ch1#id17)
|
||
- [Data Systems, Law, and Society](/en/ch1#sec_introduction_compliance)
|
||
- [Summary](/en/ch1#summary)
|
||
- [References](/en/ch1#references)
|
||
|
||
## [2. Defining Nonfunctional Requirements](/en/ch2)
|
||
- [Case Study: Social Network Home Timelines](/en/ch2#sec_introduction_twitter)
|
||
- [Representing Users, Posts, and Follows](/en/ch2#id20)
|
||
- [Materializing and Updating Timelines](/en/ch2#sec_introduction_materializing)
|
||
- [Describing Performance](/en/ch2#sec_introduction_percentiles)
|
||
- [Latency and Response Time](/en/ch2#id23)
|
||
- [Average, Median, and Percentiles](/en/ch2#id24)
|
||
- [Use of Response Time Metrics](/en/ch2#sec_introduction_slo_sla)
|
||
- [Reliability and Fault Tolerance](/en/ch2#sec_introduction_reliability)
|
||
- [Fault Tolerance](/en/ch2#id27)
|
||
- [Hardware and Software Faults](/en/ch2#sec_introduction_hardware_faults)
|
||
- [Tolerating hardware faults through redundancy](/en/ch2#tolerating-hardware-faults-through-redundancy)
|
||
- [Software faults](/en/ch2#software-faults)
|
||
- [Humans and Reliability](/en/ch2#id31)
|
||
- [Scalability](/en/ch2#sec_introduction_scalability)
|
||
- [Describing Load](/en/ch2#id33)
|
||
- [Shared-Memory, Shared-Disk, and Shared-Nothing Architecture](/en/ch2#sec_introduction_shared_nothing)
|
||
- [Principles for Scalability](/en/ch2#id35)
|
||
- [Maintainability](/en/ch2#sec_introduction_maintainability)
|
||
- [Operability: Making Life Easy for Operations](/en/ch2#id37)
|
||
- [Simplicity: Managing Complexity](/en/ch2#id38)
|
||
- [Evolvability: Making Change Easy](/en/ch2#sec_introduction_evolvability)
|
||
- [Summary](/en/ch2#summary)
|
||
- [References](/en/ch2#references)
|
||
|
||
## [3. Data Models and Query Languages](/en/ch3)
|
||
- [Relational Model versus Document Model](/en/ch3#sec_datamodels_history)
|
||
- [The Object-Relational Mismatch](/en/ch3#sec_datamodels_document)
|
||
- [Object-relational mapping (ORM)](/en/ch3#object-relational-mapping-orm)
|
||
- [The document data model for one-to-many relationships](/en/ch3#the-document-data-model-for-one-to-many-relationships)
|
||
- [Normalization, Denormalization, and Joins](/en/ch3#sec_datamodels_normalization)
|
||
- [Trade-offs of normalization](/en/ch3#trade-offs-of-normalization)
|
||
- [Denormalization in the social networking case study](/en/ch3#denormalization-in-the-social-networking-case-study)
|
||
- [Many-to-One and Many-to-Many Relationships](/en/ch3#sec_datamodels_many_to_many)
|
||
- [Stars and Snowflakes: Schemas for Analytics](/en/ch3#sec_datamodels_analytics)
|
||
- [When to Use Which Model](/en/ch3#sec_datamodels_document_summary)
|
||
- [Schema flexibility in the document model](/en/ch3#sec_datamodels_schema_flexibility)
|
||
- [Data locality for reads and writes](/en/ch3#sec_datamodels_document_locality)
|
||
- [Query languages for documents](/en/ch3#query-languages-for-documents)
|
||
- [Convergence of document and relational databases](/en/ch3#convergence-of-document-and-relational-databases)
|
||
- [Graph-Like Data Models](/en/ch3#sec_datamodels_graph)
|
||
- [Property Graphs](/en/ch3#id56)
|
||
- [The Cypher Query Language](/en/ch3#id57)
|
||
- [Graph Queries in SQL](/en/ch3#id58)
|
||
- [Triple-Stores and SPARQL](/en/ch3#id59)
|
||
- [The RDF data model](/en/ch3#the-rdf-data-model)
|
||
- [The SPARQL query language](/en/ch3#the-sparql-query-language)
|
||
- [Datalog: Recursive Relational Queries](/en/ch3#id62)
|
||
- [GraphQL](/en/ch3#id63)
|
||
- [Event Sourcing and CQRS](/en/ch3#sec_datamodels_events)
|
||
- [Dataframes, Matrices, and Arrays](/en/ch3#sec_datamodels_dataframes)
|
||
- [Summary](/en/ch3#summary)
|
||
- [References](/en/ch3#references)
|
||
|
||
## [4. Storage and Retrieval](/en/ch4)
|
||
- [Storage and Indexing for OLTP](/en/ch4#sec_storage_oltp)
|
||
- [Log-Structured Storage](/en/ch4#sec_storage_log_structured)
|
||
- [The SSTable file format](/en/ch4#the-sstable-file-format)
|
||
- [Constructing and merging SSTables](/en/ch4#constructing-and-merging-sstables)
|
||
- [Bloom filters](/en/ch4#bloom-filters)
|
||
- [Compaction strategies](/en/ch4#sec_storage_lsm_compaction)
|
||
- [B-Trees](/en/ch4#sec_storage_b_trees)
|
||
- [Making B-trees reliable](/en/ch4#sec_storage_btree_wal)
|
||
- [B-tree variants](/en/ch4#b-tree-variants)
|
||
- [Comparing B-Trees and LSM-Trees](/en/ch4#sec_storage_btree_lsm_comparison)
|
||
- [Read performance](/en/ch4#read-performance)
|
||
- [Sequential vs. random writes](/en/ch4#sidebar_sequential)
|
||
- [Write amplification](/en/ch4#write-amplification)
|
||
- [Disk space usage](/en/ch4#disk-space-usage)
|
||
- [Multi-Column and Secondary Indexes](/en/ch4#sec_storage_index_multicolumn)
|
||
- [Storing values within the index](/en/ch4#sec_storage_index_heap)
|
||
- [Keeping everything in memory](/en/ch4#sec_storage_inmemory)
|
||
- [Data Storage for Analytics](/en/ch4#sec_storage_analytics)
|
||
- [Cloud Data Warehouses](/en/ch4#sec_cloud_data_warehouses)
|
||
- [Column-Oriented Storage](/en/ch4#sec_storage_column)
|
||
- [Column Compression](/en/ch4#sec_storage_column_compression)
|
||
- [Sort Order in Column Storage](/en/ch4#sort-order-in-column-storage)
|
||
- [Writing to Column-Oriented Storage](/en/ch4#writing-to-column-oriented-storage)
|
||
- [Query Execution: Compilation and Vectorization](/en/ch4#sec_storage_vectorized)
|
||
- [Materialized Views and Data Cubes](/en/ch4#sec_storage_materialized_views)
|
||
- [Multidimensional and Full-Text Indexes](/en/ch4#sec_storage_multidimensional)
|
||
- [Full-Text Search](/en/ch4#sec_storage_full_text)
|
||
- [Vector Embeddings](/en/ch4#id92)
|
||
- [Summary](/en/ch4#summary)
|
||
- [References](/en/ch4#references)
|
||
|
||
## [5. Encoding and Evolution](/en/ch5)
|
||
- [Formats for Encoding Data](/en/ch5#sec_encoding_formats)
|
||
- [Language-Specific Formats](/en/ch5#id96)
|
||
- [JSON, XML, and Binary Variants](/en/ch5#sec_encoding_json)
|
||
- [JSON Schema](/en/ch5#json-schema)
|
||
- [Binary encoding](/en/ch5#binary-encoding)
|
||
- [Protocol Buffers](/en/ch5#sec_encoding_protobuf)
|
||
- [Field tags and schema evolution](/en/ch5#field-tags-and-schema-evolution)
|
||
- [Avro](/en/ch5#sec_encoding_avro)
|
||
- [The writer’s schema and the reader’s schema](/en/ch5#the-writers-schema-and-the-readers-schema)
|
||
- [Schema evolution rules](/en/ch5#schema-evolution-rules)
|
||
- [But what is the writer’s schema?](/en/ch5#but-what-is-the-writers-schema)
|
||
- [Dynamically generated schemas](/en/ch5#dynamically-generated-schemas)
|
||
- [The Merits of Schemas](/en/ch5#sec_encoding_schemas)
|
||
- [Modes of Dataflow](/en/ch5#sec_encoding_dataflow)
|
||
- [Dataflow Through Databases](/en/ch5#sec_encoding_dataflow_db)
|
||
- [Different values written at different times](/en/ch5#different-values-written-at-different-times)
|
||
- [Archival storage](/en/ch5#archival-storage)
|
||
- [Dataflow Through Services: REST and RPC](/en/ch5#sec_encoding_dataflow_rpc)
|
||
- [Web services](/en/ch5#sec_web_services)
|
||
- [The problems with remote procedure calls (RPCs)](/en/ch5#sec_problems_with_rpc)
|
||
- [Load balancers, service discovery, and service meshes](/en/ch5#sec_encoding_service_discovery)
|
||
- [Data encoding and evolution for RPC](/en/ch5#data-encoding-and-evolution-for-rpc)
|
||
- [Durable Execution and Workflows](/en/ch5#sec_encoding_dataflow_workflows)
|
||
- [Durable execution](/en/ch5#durable-execution)
|
||
- [Event-Driven Architectures](/en/ch5#sec_encoding_dataflow_msg)
|
||
- [Message brokers](/en/ch5#message-brokers)
|
||
- [Distributed actor frameworks](/en/ch5#distributed-actor-frameworks)
|
||
- [Summary](/en/ch5#summary)
|
||
- [References](/en/ch5#references)
|
||
|
||
## [6. Replication](/en/ch6)
|
||
- [Single-Leader Replication](/en/ch6#sec_replication_leader)
|
||
- [Synchronous Versus Asynchronous Replication](/en/ch6#sec_replication_sync_async)
|
||
- [Setting Up New Followers](/en/ch6#sec_replication_new_replica)
|
||
- [Handling Node Outages](/en/ch6#sec_replication_failover)
|
||
- [Follower failure: Catch-up recovery](/en/ch6#follower-failure-catch-up-recovery)
|
||
- [Leader failure: Failover](/en/ch6#leader-failure-failover)
|
||
- [Implementation of Replication Logs](/en/ch6#sec_replication_implementation)
|
||
- [Statement-based replication](/en/ch6#statement-based-replication)
|
||
- [Write-ahead log (WAL) shipping](/en/ch6#write-ahead-log-wal-shipping)
|
||
- [Logical (row-based) log replication](/en/ch6#logical-row-based-log-replication)
|
||
- [Problems with Replication Lag](/en/ch6#sec_replication_lag)
|
||
- [Reading Your Own Writes](/en/ch6#sec_replication_ryw)
|
||
- [Monotonic Reads](/en/ch6#sec_replication_monotonic_reads)
|
||
- [Consistent Prefix Reads](/en/ch6#sec_replication_consistent_prefix)
|
||
- [Solutions for Replication Lag](/en/ch6#id131)
|
||
- [Multi-Leader Replication](/en/ch6#sec_replication_multi_leader)
|
||
- [Geographically Distributed Operation](/en/ch6#sec_replication_multi_dc)
|
||
- [Multi-leader replication topologies](/en/ch6#sec_replication_topologies)
|
||
- [Problems with different topologies](/en/ch6#problems-with-different-topologies)
|
||
- [Sync Engines and Local-First Software](/en/ch6#sec_replication_offline_clients)
|
||
- [Real-time collaboration, offline-first, and local-first apps](/en/ch6#real-time-collaboration-offline-first-and-local-first-apps)
|
||
- [Pros and cons of sync engines](/en/ch6#pros-and-cons-of-sync-engines)
|
||
- [Dealing with Conflicting Writes](/en/ch6#sec_replication_write_conflicts)
|
||
- [Conflict avoidance](/en/ch6#conflict-avoidance)
|
||
- [Last write wins (discarding concurrent writes)](/en/ch6#sec_replication_lww)
|
||
- [Manual conflict resolution](/en/ch6#manual-conflict-resolution)
|
||
- [Automatic conflict resolution](/en/ch6#automatic-conflict-resolution)
|
||
- [CRDTs and Operational Transformation](/en/ch6#sec_replication_crdts)
|
||
- [What is a conflict?](/en/ch6#what-is-a-conflict)
|
||
- [Leaderless Replication](/en/ch6#sec_replication_leaderless)
|
||
- [Writing to the Database When a Node Is Down](/en/ch6#id287)
|
||
- [Catching up on missed writes](/en/ch6#sec_replication_read_repair)
|
||
- [Quorums for reading and writing](/en/ch6#sec_replication_quorum_condition)
|
||
- [Limitations of Quorum Consistency](/en/ch6#sec_replication_quorum_limitations)
|
||
- [Monitoring staleness](/en/ch6#monitoring-staleness)
|
||
- [Single-Leader vs. Leaderless Replication Performance](/en/ch6#sec_replication_leaderless_perf)
|
||
- [Multi-region operation](/en/ch6#multi-region-operation)
|
||
- [Detecting Concurrent Writes](/en/ch6#sec_replication_concurrent)
|
||
- [The “happens-before” relation and concurrency](/en/ch6#sec_replication_happens_before)
|
||
- [Capturing the happens-before relationship](/en/ch6#capturing-the-happens-before-relationship)
|
||
- [Version vectors](/en/ch6#version-vectors)
|
||
- [Summary](/en/ch6#summary)
|
||
- [References](/en/ch6#references)
|
||
|
||
## [7. Sharding](/en/ch7)
|
||
- [Pros and Cons of Sharding](/en/ch7#sec_sharding_reasons)
|
||
- [Sharding for Multitenancy](/en/ch7#sec_sharding_multitenancy)
|
||
- [Sharding of Key-Value Data](/en/ch7#sec_sharding_key_value)
|
||
- [Sharding by Key Range](/en/ch7#sec_sharding_key_range)
|
||
- [Rebalancing key-range sharded data](/en/ch7#rebalancing-key-range-sharded-data)
|
||
- [Sharding by Hash of Key](/en/ch7#sec_sharding_hash)
|
||
- [Hash modulo number of nodes](/en/ch7#hash-modulo-number-of-nodes)
|
||
- [Fixed number of shards](/en/ch7#fixed-number-of-shards)
|
||
- [Sharding by hash range](/en/ch7#sharding-by-hash-range)
|
||
- [Consistent hashing](/en/ch7#sec_sharding_consistent_hashing)
|
||
- [Skewed Workloads and Relieving Hot Spots](/en/ch7#sec_sharding_skew)
|
||
- [Operations: Automatic or Manual Rebalancing](/en/ch7#sec_sharding_operations)
|
||
- [Request Routing](/en/ch7#sec_sharding_routing)
|
||
- [Sharding and Secondary Indexes](/en/ch7#sec_sharding_secondary_indexes)
|
||
- [Local Secondary Indexes](/en/ch7#id166)
|
||
- [Global Secondary Indexes](/en/ch7#id167)
|
||
- [Summary](/en/ch7#summary)
|
||
- [References](/en/ch7#references)
|
||
|
||
## [8. Transactions](/en/ch8)
|
||
- [What Exactly Is a Transaction?](/en/ch8#sec_transactions_overview)
|
||
- [The Meaning of ACID](/en/ch8#sec_transactions_acid)
|
||
- [Atomicity](/en/ch8#sec_transactions_acid_atomicity)
|
||
- [Consistency](/en/ch8#sec_transactions_acid_consistency)
|
||
- [Isolation](/en/ch8#sec_transactions_acid_isolation)
|
||
- [Durability](/en/ch8#durability)
|
||
- [Single-Object and Multi-Object Operations](/en/ch8#sec_transactions_multi_object)
|
||
- [Single-object writes](/en/ch8#sec_transactions_single_object)
|
||
- [The need for multi-object transactions](/en/ch8#sec_transactions_need)
|
||
- [Handling errors and aborts](/en/ch8#handling-errors-and-aborts)
|
||
- [Weak Isolation Levels](/en/ch8#sec_transactions_isolation_levels)
|
||
- [Read Committed](/en/ch8#sec_transactions_read_committed)
|
||
- [No dirty reads](/en/ch8#no-dirty-reads)
|
||
- [No dirty writes](/en/ch8#sec_transactions_dirty_write)
|
||
- [Implementing read committed](/en/ch8#sec_transactions_read_committed_impl)
|
||
- [Snapshot Isolation and Repeatable Read](/en/ch8#sec_transactions_snapshot_isolation)
|
||
- [Multi-version concurrency control (MVCC)](/en/ch8#sec_transactions_snapshot_impl)
|
||
- [Visibility rules for observing a consistent snapshot](/en/ch8#sec_transactions_mvcc_visibility)
|
||
- [Indexes and snapshot isolation](/en/ch8#indexes-and-snapshot-isolation)
|
||
- [Snapshot isolation, repeatable read, and naming confusion](/en/ch8#snapshot-isolation-repeatable-read-and-naming-confusion)
|
||
- [Preventing Lost Updates](/en/ch8#sec_transactions_lost_update)
|
||
- [Atomic write operations](/en/ch8#atomic-write-operations)
|
||
- [Explicit locking](/en/ch8#explicit-locking)
|
||
- [Automatically detecting lost updates](/en/ch8#automatically-detecting-lost-updates)
|
||
- [Conditional writes (compare-and-set)](/en/ch8#sec_transactions_compare_and_set)
|
||
- [Conflict resolution and replication](/en/ch8#conflict-resolution-and-replication)
|
||
- [Write Skew and Phantoms](/en/ch8#sec_transactions_write_skew)
|
||
- [Characterizing write skew](/en/ch8#characterizing-write-skew)
|
||
- [More examples of write skew](/en/ch8#more-examples-of-write-skew)
|
||
- [Phantoms causing write skew](/en/ch8#sec_transactions_phantom)
|
||
- [Materializing conflicts](/en/ch8#materializing-conflicts)
|
||
- [Serializability](/en/ch8#sec_transactions_serializability)
|
||
- [Actual Serial Execution](/en/ch8#sec_transactions_serial)
|
||
- [Encapsulating transactions in stored procedures](/en/ch8#encapsulating-transactions-in-stored-procedures)
|
||
- [Pros and cons of stored procedures](/en/ch8#sec_transactions_stored_proc_tradeoffs)
|
||
- [Sharding](/en/ch8#sharding)
|
||
- [Summary of serial execution](/en/ch8#summary-of-serial-execution)
|
||
- [Two-Phase Locking (2PL)](/en/ch8#sec_transactions_2pl)
|
||
- [Implementation of two-phase locking](/en/ch8#implementation-of-two-phase-locking)
|
||
- [Performance of two-phase locking](/en/ch8#performance-of-two-phase-locking)
|
||
- [Predicate locks](/en/ch8#predicate-locks)
|
||
- [Index-range locks](/en/ch8#sec_transactions_2pl_range)
|
||
- [Serializable Snapshot Isolation (SSI)](/en/ch8#sec_transactions_ssi)
|
||
- [Pessimistic versus optimistic concurrency control](/en/ch8#pessimistic-versus-optimistic-concurrency-control)
|
||
- [Decisions based on an outdated premise](/en/ch8#decisions-based-on-an-outdated-premise)
|
||
- [Detecting stale MVCC reads](/en/ch8#detecting-stale-mvcc-reads)
|
||
- [Detecting writes that affect prior reads](/en/ch8#sec_detecting_writes_affect_reads)
|
||
- [Performance of serializable snapshot isolation](/en/ch8#performance-of-serializable-snapshot-isolation)
|
||
- [Distributed Transactions](/en/ch8#sec_transactions_distributed)
|
||
- [Two-Phase Commit (2PC)](/en/ch8#sec_transactions_2pc)
|
||
- [A system of promises](/en/ch8#a-system-of-promises)
|
||
- [Coordinator failure](/en/ch8#coordinator-failure)
|
||
- [Three-phase commit](/en/ch8#three-phase-commit)
|
||
- [Distributed Transactions Across Different Systems](/en/ch8#sec_transactions_xa)
|
||
- [Exactly-once message processing](/en/ch8#sec_transactions_exactly_once)
|
||
- [XA transactions](/en/ch8#xa-transactions)
|
||
- [Holding locks while in doubt](/en/ch8#holding-locks-while-in-doubt)
|
||
- [Recovering from coordinator failure](/en/ch8#recovering-from-coordinator-failure)
|
||
- [Problems with XA transactions](/en/ch8#problems-with-xa-transactions)
|
||
- [Database-internal Distributed Transactions](/en/ch8#sec_transactions_internal)
|
||
- [Exactly-once message processing revisited](/en/ch8#exactly-once-message-processing-revisited)
|
||
- [Summary](/en/ch8#summary)
|
||
- [References](/en/ch8#references)
|
||
|
||
## [9. The Trouble with Distributed Systems](/en/ch9)
|
||
- [Faults and Partial Failures](/en/ch9#sec_distributed_partial_failure)
|
||
- [Unreliable Networks](/en/ch9#sec_distributed_networks)
|
||
- [The Limitations of TCP](/en/ch9#sec_distributed_tcp)
|
||
- [Network Faults in Practice](/en/ch9#sec_distributed_network_faults)
|
||
- [Detecting Faults](/en/ch9#id307)
|
||
- [Timeouts and Unbounded Delays](/en/ch9#sec_distributed_queueing)
|
||
- [Network congestion and queueing](/en/ch9#network-congestion-and-queueing)
|
||
- [Synchronous Versus Asynchronous Networks](/en/ch9#sec_distributed_sync_networks)
|
||
- [Can we not simply make network delays predictable?](/en/ch9#can-we-not-simply-make-network-delays-predictable)
|
||
- [Unreliable Clocks](/en/ch9#sec_distributed_clocks)
|
||
- [Monotonic Versus Time-of-Day Clocks](/en/ch9#sec_distributed_monotonic_timeofday)
|
||
- [Time-of-day clocks](/en/ch9#time-of-day-clocks)
|
||
- [Monotonic clocks](/en/ch9#monotonic-clocks)
|
||
- [Clock Synchronization and Accuracy](/en/ch9#sec_distributed_clock_accuracy)
|
||
- [Relying on Synchronized Clocks](/en/ch9#sec_distributed_clocks_relying)
|
||
- [Timestamps for ordering events](/en/ch9#sec_distributed_lww)
|
||
- [Clock readings with a confidence interval](/en/ch9#clock-readings-with-a-confidence-interval)
|
||
- [Synchronized clocks for global snapshots](/en/ch9#sec_distributed_spanner)
|
||
- [Process Pauses](/en/ch9#sec_distributed_clocks_pauses)
|
||
- [Response time guarantees](/en/ch9#sec_distributed_clocks_realtime)
|
||
- [Limiting the impact of garbage collection](/en/ch9#sec_distributed_gc_impact)
|
||
- [Knowledge, Truth, and Lies](/en/ch9#sec_distributed_truth)
|
||
- [The Majority Rules](/en/ch9#sec_distributed_majority)
|
||
- [Distributed Locks and Leases](/en/ch9#sec_distributed_lock_fencing)
|
||
- [Fencing off zombies and delayed requests](/en/ch9#sec_distributed_fencing_tokens)
|
||
- [Fencing with multiple replicas](/en/ch9#fencing-with-multiple-replicas)
|
||
- [Byzantine Faults](/en/ch9#sec_distributed_byzantine)
|
||
- [Weak forms of lying](/en/ch9#weak-forms-of-lying)
|
||
- [System Model and Reality](/en/ch9#sec_distributed_system_model)
|
||
- [Defining the correctness of an algorithm](/en/ch9#defining-the-correctness-of-an-algorithm)
|
||
- [Safety and liveness](/en/ch9#sec_distributed_safety_liveness)
|
||
- [Mapping system models to the real world](/en/ch9#mapping-system-models-to-the-real-world)
|
||
- [Formal Methods and Randomized Testing](/en/ch9#sec_distributed_formal)
|
||
- [Model checking and specification languages](/en/ch9#model-checking-and-specification-languages)
|
||
- [Fault injection](/en/ch9#sec_fault_injection)
|
||
- [Deterministic simulation testing](/en/ch9#deterministic-simulation-testing)
|
||
- [Summary](/en/ch9#summary)
|
||
- [References](/en/ch9#references)
|
||
|
||
## [10. Consistency and Consensus](/en/ch10)
|
||
- [Linearizability](/en/ch10#sec_consistency_linearizability)
|
||
- [What Makes a System Linearizable?](/en/ch10#sec_consistency_lin_definition)
|
||
- [Relying on Linearizability](/en/ch10#sec_consistency_linearizability_usage)
|
||
- [Locking and leader election](/en/ch10#locking-and-leader-election)
|
||
- [Constraints and uniqueness guarantees](/en/ch10#sec_consistency_uniqueness)
|
||
- [Cross-channel timing dependencies](/en/ch10#cross-channel-timing-dependencies)
|
||
- [Implementing Linearizable Systems](/en/ch10#sec_consistency_implementing_linearizable)
|
||
- [Linearizability and quorums](/en/ch10#sec_consistency_quorum_linearizable)
|
||
- [The Cost of Linearizability](/en/ch10#sec_linearizability_cost)
|
||
- [The CAP theorem](/en/ch10#the-cap-theorem)
|
||
- [Linearizability and network delays](/en/ch10#linearizability-and-network-delays)
|
||
- [ID Generators and Logical Clocks](/en/ch10#sec_consistency_logical)
|
||
- [Logical Clocks](/en/ch10#sec_consistency_timestamps)
|
||
- [Lamport timestamps](/en/ch10#lamport-timestamps)
|
||
- [Hybrid logical clocks](/en/ch10#hybrid-logical-clocks)
|
||
- [Lamport/hybrid logical clocks vs. vector clocks](/en/ch10#lamporthybrid-logical-clocks-vs-vector-clocks)
|
||
- [Linearizable ID Generators](/en/ch10#sec_consistency_linearizable_id)
|
||
- [Implementing a linearizable ID generator](/en/ch10#implementing-a-linearizable-id-generator)
|
||
- [Enforcing constraints using logical clocks](/en/ch10#enforcing-constraints-using-logical-clocks)
|
||
- [Consensus](/en/ch10#sec_consistency_consensus)
|
||
- [The Many Faces of Consensus](/en/ch10#sec_consistency_faces)
|
||
- [Single-value consensus](/en/ch10#single-value-consensus)
|
||
- [Compare-and-set as consensus](/en/ch10#compare-and-set-as-consensus)
|
||
- [Shared logs as consensus](/en/ch10#sec_consistency_shared_logs)
|
||
- [Fetch-and-add as consensus](/en/ch10#fetch-and-add-as-consensus)
|
||
- [Atomic commitment as consensus](/en/ch10#atomic-commitment-as-consensus)
|
||
- [Consensus in Practice](/en/ch10#sec_consistency_total_order)
|
||
- [Using shared logs](/en/ch10#sec_consistency_smr)
|
||
- [From single-leader replication to consensus](/en/ch10#from-single-leader-replication-to-consensus)
|
||
- [Subtleties of consensus](/en/ch10#subtleties-of-consensus)
|
||
- [Pros and cons of consensus](/en/ch10#pros-and-cons-of-consensus)
|
||
- [Coordination Services](/en/ch10#sec_consistency_coordination)
|
||
- [Allocating work to nodes](/en/ch10#allocating-work-to-nodes)
|
||
- [Service discovery](/en/ch10#service-discovery)
|
||
- [Summary](/en/ch10#summary)
|
||
- [References](/en/ch10#references)
|
||
|
||
## [11. Batch Processing](/en/ch11)
|
||
- [……](/en/ch11#)
|
||
- [Summary](/en/ch11#summary)
|
||
- [References](/en/ch11#references)
|
||
|
||
## [12. Stream Processing](/en/ch12)
|
||
- [……](/en/ch12#)
|
||
- [Summary](/en/ch12#summary)
|
||
- [References](/en/ch12#references)
|
||
|
||
## [13. Do the Right Thing](/en/ch13)
|
||
- [……](/en/ch13#)
|
||
- [Summary](/en/ch13#summary)
|
||
- [References](/en/ch13#references)
|
||
|
||
## [Glossary](/en/glossary)
|
||
|
||
## [Colophon](/en/colophon)
|
||
- [About the Author](/en/colophon#about-the-author)
|
||
- [Colophon](/en/colophon#colophon)
|
||
|