
Cloud Spanner offers two primary read types, strong reads and stale reads, and they sit at opposite ends of a tradeoff between consistency and latency. Strong reads always return the most recent committed data, while stale reads return a version of the data from a chosen point in the past. The Professional Cloud Database Engineer exam tends to test whether you can match each type to the right situation, so it helps to be precise about what each one guarantees and what it costs.
Strong reads are the default read type in Spanner, and they represent the strictest consistency model the service offers. A strong read guarantees visibility of all data committed before the operation starts, so you will never see a partial update or an older version of a record. That guarantee holds regardless of which replica processes the request. Every replica returns the same answer for the same read, which is what makes the result trustworthy.
Because the data is always current and consistent, strong reads simplify application code. You do not have to add logic to account for data that might be slightly behind. If a read request arrives at 12:00:00, a strong read returns the 12:00:00 data, with nothing missing and no lag.
The cost of that guarantee shows up in multi-region configurations. To return the most recent committed data, Spanner may need to coordinate across replicas that are far apart, and that coordination adds latency. In a single region this is usually not a concern, but across regions a strong read can be measurably slower because of the distance involved.
Stale reads take the other side of the tradeoff. Instead of insisting on the latest data, they access a version of the data from a timestamp in the past. By not requiring the absolute newest update, Spanner can respond faster. This suits applications that prioritize low latency over real-time accuracy. If the data in question does not change every second, a slightly older version is often acceptable.
A stale read uses bounded or exact staleness to fetch data from the closest available replica, which cuts down the time the data spends traveling across the network. Bounded staleness also lets Spanner avoid blocking, because it can select an optimal timestamp within the staleness bound rather than waiting for the most recent commit. The system finds the fastest path to a consistent snapshot that is only slightly behind.
A concrete example makes this clearer. Suppose you set a bounded staleness of 15 seconds and send a read request at 12:00:00. Spanner can quickly return the 11:59:50 data. That version is only 10 seconds behind, which is well within the 15 second bound, so the request can be served by a local replica instead of waiting on the most recent commit. A 15 second staleness value is a common baseline that balances performance against how current the data needs to be.
A few points tie the two read types together for exam purposes. Strong reads may increase latency in multi-region configurations because the system has to coordinate across long distances. Bounded staleness primarily improves read performance by allowing access to local replicas, which is much faster than cross-region communication. When low read latency matters and exact freshness does not, bounded staleness is the lever to reach for.
There is one limit worth remembering. Adjusting read staleness does not reduce the overhead associated with write coordination across regions. Writes always require consensus, regardless of how you later choose to read the data. Staleness is a read-side optimization only. It can make reads faster, but it does nothing to speed up writes, and questions on the Professional Cloud Database Engineer exam sometimes probe exactly that distinction.
Our Professional Cloud Database Engineer course covers Spanner read types alongside replication and multi-region configurations, with practice questions that drill these distinctions.