Tiered storage isn’t just about saving money; it’s about intelligently optimizing access by moving data to the right place at the right time.

Let’s see this in action. Imagine a massive data lake. We’ve got logs from last week (hot, frequently accessed) and archival backups from five years ago (cold, rarely accessed). We want to automatically move those old logs to cheaper, slower storage.

Here’s a simplified example using Amazon S3’s lifecycle policies. We’re defining a rule for objects in a bucket named my-data-lake-bucket.

{
  "Rules": [
    {
      "ID": "MoveOldLogsToInfrequentAccess",
      "Prefix": "logs/",
      "Status": "Enabled",
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD_IA"
        }
      ],
      "Expiration": {
        "Days": 365
      }
    }
  ]
}

This JSON is a configuration for an S3 Lifecycle rule. The ID is just a label. Prefix: "logs/" means this rule only applies to objects within the logs/ directory in our bucket. Status: "Enabled" turns it on.

The magic is in Transitions and Expiration. Transitions defines when and where data moves. Here, Days: 30 means 30 days after an object is created, it will be transitioned. StorageClass: "STANDARD_IA" tells S3 to move it to Standard-Infrequent Access storage, which is cheaper but has slightly higher retrieval costs and latency. Expiration is straightforward: Days: 365 means objects older than 365 days will be permanently deleted.

The core problem tiered storage solves is the cost-performance trade-off. High-performance storage (like SSDs or S3 Standard) is expensive. Cold storage (like S3 Glacier or tape drives) is cheap but slow. Moving data automatically based on access patterns allows you to keep your frequently accessed "hot" data on performant storage while shifting less-used "cold" data to economical tiers, significantly reducing overall storage costs without impacting performance for active data.

Internally, cloud providers and storage solutions track metadata for each object, including its creation date and last access time. Lifecycle policies are essentially automated checks against these metadata points. When an object meets the defined criteria (e.g., "30 days old"), the system initiates a background process to copy the object to the target storage class and, if applicable, delete it from the source. This is usually an asynchronous operation, meaning it happens in the background without blocking your applications.

The exact levers you control are the Prefix (what data this rule applies to), the Days for transitions and expirations, and the StorageClass you transition to (e.g., STANDARD_IA, ONEZONE_IA, GLACIER, DEEP_ARCHIVE). You can also have multiple transitions; for instance, move to STANDARD_IA after 30 days, then to GLACIER after 180 days.

A common misconception is that all "cold" storage is the same. In reality, there’s a spectrum. STANDARD_IA is for data accessed infrequently but needed quickly when it is. GLACIER and DEEP_ARCHIVE are for archival purposes where retrieval times of minutes to hours are acceptable, offering the lowest per-GB costs. The choice depends on your specific retrieval needs and tolerance for latency.

The next logical step is to understand how to retrieve data from these colder tiers and the associated costs and time implications.

Want structured learning?

Take the full Storage course →