Skip to main content

Tiered & Cold Storage

Data Has a Temperature

You run a photo service with a billion photos in it. The ones uploaded this morning are getting viewed thousands of times — friends tagging, feeds refreshing, thumbnails rendering. A photo from 2019 might get opened once this whole year, if ever. And yet, on S3 Standard, you pay the exact same $0.023 per gigabyte per month for both. Multiply that across a billion mostly-forgotten photos and you're burning money to keep cold data on hot, expensive storage.

This is the central fact of storage at scale: data has a temperature, and it cools with age. It's hot for its first few days after creation, warm for a while, then goes cold and mostly stays there. The pattern is astonishingly consistent — across almost every real system, 70 to 90 percent of stored data is cold, rarely or never read again. Backups, logs, old media, compliance archives, last year's photos: written once, kept for years, read almost never.

So the move is obvious once you see it: don't pay hot prices for cold data. Keep fresh, frequently-read data on fast, expensive storage; as it cools, move it down a ladder of cheaper, slower tiers. Match the storage tier to the data's temperature. Here's the whole idea in two curves — access falling with age, and the price you pay falling right behind it.

How data cools with age, and why you move it down the storage tiers. The chart plots two curves against object age on the horizontal axis, from freshly uploaded on the left to years old on the right. The first curve, access frequency, starts high and decays fast — data is hot for its first days, then cools through warm to cold, flattening near zero, which is why 70 to 90 percent of stored data ends up rarely read. Colored bands under the curve mark the temperature zones: a hot band near age zero, a warm band, then a long cold band. The second curve, the storage price you pay per gigabyte, steps down in stages as the data ages and a lifecycle policy transitions it: S3 Standard at 0.023 dollars while hot, dropping to Infrequent Access, then Glacier, then Deep Archive at 0.00099 dollars when cold — a 23-times cheaper floor. The two curves track each other: as access falls, so does the price you pay, because you keep moving the data to a cheaper tier. The bottom line: match the storage tier to the data's temperature, and the cost curve follows the access curve down.

The Price Ladder

The object storage you met in Block vs File vs Object Storage isn't sold at one price — it's a ladder of storage classes, each trading access speed for cost. On S3, top to bottom (per GB-month, and these are real 2026 US-East prices):

  • S3 Standard — $0.023. Hot data. Millisecond reads, no retrieval fee. The default.
  • S3 Standard-IA (Infrequent Access) — $0.0125. Still instant to read, but ~half the storage cost; you pay a small per-GB fee when you read. For data you keep but touch occasionally.
  • S3 Glacier Instant Retrieval — $0.004. Archive prices with millisecond access — for data read maybe once a quarter but needed fast when it is.
  • S3 Glacier Flexible Retrieval — $0.0036. Cheap, but reads take minutes to hours (you request a restore, then wait).
  • S3 Glacier Deep Archive — $0.00099. The floor. Tape-class economics for write-once-keep-forever data, but reads take up to 12 hours. (These cheap tiers keep your bytes durable on spun-down disks with erasure coding — the cheap-durability trick from Erasure Coding vs Replication — which is part of how the price gets this low.)

Look at the spread: Standard to Deep Archive is 0.023downto0.023 down to 0.00099 — about 23× cheaper. In money that's roughly 24perterabytemonthversus24 per terabyte-month versus 1.01 — the difference between a 24,000monthlybillanda24,000 monthly bill and a 1,000 one for the same petabyte. That gap is the entire reason cold storage exists. But notice what's quietly changing as you go down that ladder, beyond just the price.

Cheap Storage Isn't Free: The Retrieval Trap

Going down the ladder, two other things move — in the opposite direction from the price. Retrieval gets expensive, and it gets slow. That's the trap, and it's where naive cost-cutting goes wrong.

Retrieval cost. The cheap tiers charge you per gigabyte read back. Deep Archive is ~0.02/GBtoretrieve,GlacierInstant0.02/GB to retrieve, Glacier Instant 0.03/GB. Storage is nearly free; reading is not. Retrieval latency. The truly cheap tiers aren't normal storage you can GET — you issue a restore job and wait: Glacier Flexible takes minutes to hours, Deep Archive takes up to 12 hours before the bytes are even available. And minimum storage duration — IA bills you for at least 30 days, Glacier 90, Deep Archive 180 — so deleting or moving data early still costs you the remainder. Cold storage punishes anything that churns.

Here's the counterintuitive part, and it's worth getting right because it's exactly what a good follow-up question probes. Storage in Deep Archive is so cheap (23× less) that the per-GB retrieval fee only overtakes the storage savings if you read the data more than about 1.1 times per gigabyte per month — which is to say, only if the data is genuinely hot, in which case it shouldn't be in cold storage at all. So the steady-state bill almost always favors tiering. The real dangers are the two things a spreadsheet misses:

  1. Latency is a correctness problem, not a cost line. If a user — or a lawsuit — needs a Deep-Archive object now, "12 hours" is an outage. You tiered data that had a latency requirement it can no longer meet.
  2. The one-time retrieval storm. A re-processing job, an audit, or a disaster recovery that reads the whole dataset back detonates the bill: pulling 1 PB back from Deep Archive is 1,048,576 GB × 0.02= 0.02 = ~20,972 in retrieval alone — a single event that can erase months of storage savings. Tier the data that will stay cold; the moment cold data gets read en masse, you pay for the discount.

Storage down, retrieval and latency up — the whole trade on one ladder:

The retrieval trap, shown as a ladder of S3 storage tiers with three axes. Reading top to bottom: S3 Standard, Standard-Infrequent Access, Glacier Instant Retrieval, Glacier Flexible Retrieval, and Glacier Deep Archive. Down the left, the storage price per gigabyte-month plunges rung by rung — 0.023, 0.0125, 0.004, 0.0036, 0.00099 dollars — a 23-times drop from top to bottom. But down the right, two costs climb in the opposite direction: the retrieval fee per gigabyte rises from free at the top toward roughly two to three cents at the bottom, and the retrieval latency rises from milliseconds at the top through minutes and hours to a full 12 hours at Deep Archive. Arrows emphasize that storage gets cheaper going down while retrieval cost and wait time get worse. A caption warns that reading a whole petabyte back from Deep Archive costs about 20,972 dollars in retrieval alone. The bottom line: the cheaper a tier is to store, the more it costs and the longer it takes to read back — cheap storage is not free.

Lifecycle Policies: Data Ages Automatically

You don't move billions of objects by hand. You write a lifecycle policy — a set of age-based rules on a bucket or prefix — and S3 transitions objects for you as they cross each age threshold. A typical one reads like the cooling curve itself:

lifecycle policy  (photos/*)
  age  0d  → S3 Standard          (hot: viewed constantly)
  age 30d  → Standard-IA          (cooling: occasional views)
  age 90d  → Glacier Flexible     (cold: rarely opened)
  age 365d → Glacier Deep Archive (frozen: keep for compliance)
  age  7y  → expire (delete)      (optional last rule)

You're encoding when data cools as age thresholds, and S3 does the moving. How much does it save? Real math, on a modeled 1 PB of photos with a realistic access-decay curve and the actual AWS prices:

1 PB · monthly cost           storage   retrieval    TOTAL
  all-hot (S3 Standard)        $24,117        $0     $24,117
  sane lifecycle (above)        $2,236      $335      $2,571     ← 89% cheaper

An 89% cut — about $258,000 a year — for one policy and zero code, because most of that petabyte is old and cold and doesn't need to sit in Standard. But the thresholds matter: set them too aggressively and you push still-warm data into Deep Archive, trading a tiny extra storage saving for 12-hour reads and a fatter retrieval bill on the accesses that are still happening. Finding the thresholds that match your actual access curve is the real skill — so drive it: pick a dataset, drag the transitions, and watch the storage bill, the retrieval bill, and the worst-case latency fight each other.

Pick a dataset's access pattern, then drag the lifecycle transition ages — when data moves from Standard to Infrequent Access to Glacier to Deep Archive. A live bill breaks out storage cost, retrieval cost, worst-case read latency, and the total versus keeping everything hot, all on real AWS prices. Tier aggressively and the storage cost plunges — but watch the retrieval latency jump to 12 hours on data that's still being read, and hit “reprocess everything” to feel a one-time retrieval storm spike the bill. The lesson you'll find by dragging: the cheapest bill isn't the cheapest tier — it's the tier that matches how the data is actually accessed.

Intelligent-Tiering: When You Don't Know the Pattern

Lifecycle policies assume you know the cooling curve — that a photo is cold by 90 days, a log by 30. But plenty of data doesn't cool on a schedule: an old document nobody's touched in a year suddenly trends; a dormant dataset gets rediscovered. Age is only a proxy for the thing you actually care about, which is how recently something was accessed.

S3 Intelligent-Tiering tiers by that directly. Instead of age rules, AWS monitors each object and moves it automatically: not accessed for 30 days → Infrequent tier; not accessed for 90 → Archive Instant; and it springs back to the frequent tier the instant anyone reads it. The pitch is that you never guess and never get burned by a retrieval fee — Intelligent-Tiering has no retrieval charges and no minimum-duration penalty for its automatic moves. The cost is a small monitoring fee of $0.0025 per 1,000 objects per month for watching access patterns.

So the choice is really time-based vs access-based. If you know the curve — logs, backups, regulatory archives with a predictable life — hard-coded lifecycle policies are cheaper and explicit. If access is unpredictable, Intelligent-Tiering earns its monitoring fee by never stranding hot data in a cold tier. The one place it stings is millions of tiny objects, where the per-object monitoring fee can dwarf the storage it's optimizing — there, tier big, or don't tier at all.

Getting It Wrong

Tiering is one of the highest-leverage cost moves in a system, and one of the easiest to botch. The ways it goes wrong all share a root cause: tiering data whose access pattern doesn't match the tier.

  • The retrieval-bill surprise. Someone kicks off a backfill or an ML re-training run that reads a petabyte back from Glacier, and the retrieval line on the invoice dwarfs a year of the storage savings that justified the move. Tier data that will stay cold.
  • The latency landmine. A "restore" you assumed was instant is a 12-hour job, and now an incident, an audit, or a customer is waiting half a day for data you archived too deep. Tier to the worst-case latency you must support, not just the price.
  • The churn penalty. You transition or delete data before its minimum duration and pay the pro-rated remainder anyway — cold tiers punish anything short-lived or mutable.
  • The tiny-object tax. IA and Glacier bill a minimum object size and per-object overhead; Intelligent-Tiering's per-object fee adds up. Millions of 4 KB objects cost more to tier than to leave hot. Aggregate small objects, or leave them alone.

The through-line: don't tier by wishful thinking, tier by measured access. Cheap storage is a reward for data that truly went cold — and a trap for data that didn't.

What to Remember

  • Data has a temperature that cools with age. Most stored data (70–90%) is cold. Don't pay hot prices for it — move it down a ladder of tiers as it cools.
  • The price ladder spans ~23×. S3 Standard 0.023DeepArchive0.023 → Deep Archive 0.00099 per GB-month (24vs24 vs 1.01 per TB-month). That spread is why cold storage exists.
  • ⭐⭐ Cheaper to store = costlier and slower to read. Cold tiers charge per-GB retrieval and make you wait (Deep Archive: up to 12 h) with minimum durations (30/90/180 days). Steady-state, tiering almost always wins; the real dangers are latency SLAs and one-time retrieval storms (1 PB back from Deep Archive ≈ $20,972).
  • Automate it two ways. Age-based lifecycle policies when you know the cooling curve (a modeled 1 PB dropped 89%); access-based Intelligent-Tiering when you don't (monitoring fee, no retrieval fee, springs back on access).
  • Match the tier to the access pattern, not the age or the sticker price. Tier what stays cold; keep what might be read fast — or read a lot — hot.

That closes the storage tour: block, file, and object; a blob store's internals; distributed file systems; erasure coding for cheap durability; chunking big media; transcoding pipelines; and now the lifecycle that ages data from hot to frozen. Next is the §7 Checkpoint — you'll be handed a few raw data shapes and asked to pick the right storage and tier for each, and defend it.