「Designing Data-Intensive Applications」Chapter 7

The Slippery Concept of a Transaction The Meaning of ACID The safety guarantees provided by transactions are often described by the well-known acronym ACID, which stands for Atomicity, Consistency, Isolation, and Durability. However, in practice, one database’s implementation of ACID does not equal another’s implementation. Atomicity Atomicity describes what happens if a client wants to make … Continue reading "「Designing Data-Intensive Applications」Chapter 7"

Read More

「Designing Data-Intensive Applications」Chapter 6

Partitioning Normally, partitions are defined in such a way that each piece of data belongs to exactly one partition. Partitioning and Replication Partitioning is usually combined with replication so that copies of each partition are stored on multiple nodes. A node may store more than one partition. If a leader–follower replication model is used, the combination … Continue reading "「Designing Data-Intensive Applications」Chapter 6"

Read More

「Designing Data-Intensive Applications」Chapter 5

Replication Leaders and Followers   Synchronous Versus Asynchronous Replication An important detail of a replicated system is whether the replication happens synchronously or asynchronously. It is impractical for all followers to be synchronous: any one node outage would cause the whole system to grind to a halt. In practice, if you enable synchronous replication on … Continue reading "「Designing Data-Intensive Applications」Chapter 5"

Read More

「Designing Data-Intensive Applications」Chapter 4

Encoding and Evolution   In order for the system to continue running smoothly, we need to maintain compatibility in both directions: Backward compatibility: newer code can read data that was written by older code. Forward compatibility: older code can read data that was written by newer code. Formats for Encoding Data Programs usually work with … Continue reading "「Designing Data-Intensive Applications」Chapter 4"

Read More

「Designing Data-Intensive Applications」Chapter 3

Storage and Retrieval Data Structures That Power Your Database An index is an additional structure that is derived from the primary data. An important trade-off in storage systems: well-chosen indexes speed up read queries, but every index slows down writes. Hash Indexes Keep an in-memory hash map where every key is mapped to a byte … Continue reading "「Designing Data-Intensive Applications」Chapter 3"

Read More

「Designing Data-Intensive Applications」Chapter 2

Data Models and Query Languages The limits of my language mean the limits of my world.                  — Ludwig Wittgenstein, Tractatus Logico-Philosophicus (1922) Data models are perhaps the most important part of developing software, because they have such a profound effect: not only on how the software is … Continue reading "「Designing Data-Intensive Applications」Chapter 2"

Read More

「Designing Data-Intensive Applications」Chapter 1

Reliable, Scalable, and Maintainable Applications   A data-intensive application is typically built from standard building blocks that provide commonly needed functionality. For example: Store data so that they, or another application, can find it again later (databases) Remember the result of an expensive operation, to speed up reads (caches) Allow users to search data by keyword … Continue reading "「Designing Data-Intensive Applications」Chapter 1"

Read More