Object storage
Millions of small objects: what changes in object-storage design?
A terabyte stored as ten huge archives behaves differently from a terabyte stored as fifty million tiny objects. Capacity may be identical while request count, listing behavior, lifecycle work and application metadata become the dominant operational concerns.
Do not use bucket listing as the application database
Large listings are paginated and can require many requests. Applications should normally keep their own index of business objects so ordinary user queries do not require a full bucket scan.
Use object listing for reconciliation, maintenance and bounded prefixes. It is not a replacement for relational or search indexes.
Measure request behavior
Small objects produce more requests per stored gigabyte. Even when a provider does not charge per request, client concurrency, rate limits and latency can affect throughput.
Benchmark realistic object sizes and key distributions. A single 5 GB upload benchmark does not predict a thumbnail workload.
Plan lifecycle operations
Deleting millions of expired objects can take time and create a large control-plane workload. Lifecycle rules are useful when the provider can process them efficiently, but the application should not assume expiry is instantaneous.
Track backlog and storage after cleanup so an intended retention rule does not become silent capacity growth.
Use key prefixes deliberately
Use key prefixes to group related objects when listing them. A prefix is part of an object key, not a filesystem directory. Avoid putting unbounded timestamp or user-controlled text into keys without normalization.
Hash or shard prefixes can help some systems distribute load, but follow current provider guidance before applying tuning rules from another or older S3 implementation.
Monitor object count alongside bytes
Authoritative storage usage should include both used bytes and object count. A sudden object-count spike with modest byte growth can reveal a runaway job before the quota fills.
Capacity alerts alone can miss an application generating millions of useless zero- or tiny-byte objects.