Keys and prefixes are naming tools
An object key is a UTF-8 string up to 1,024 bytes. A key such asimages/2026/hero.webp looks hierarchical because applications commonly use / as a delimiter, but S3 stores the entire string as the key.
A prefix is the beginning of a key, not a separately created resource. ListObjectsV2 can filter by Prefix and group results by Delimiter, which lets clients present folder-like navigation.
AWS documents at least 3,500 write requests or 5,500 read requests per second per partitioned prefix, with no limit on the number of prefixes in a bucket. Scaling is gradual, so a sudden increase can temporarily produce 503 Slow Down responses while S3 adapts.
A prefix helps organize, list, and scale requests; it is not a directory or independent storage container.
What partition means
AWS describes S3 as partitioning key names to support high request rates, but it does not publish the partition map, placement algorithm, partition size, or split thresholds. Treat partitions as service-internal routing units rather than resources your application can inspect or control.
Randomized prefixes are not a universal requirement. Choose key layouts for access patterns and operations, then load-test the workload.
A practical request flow
Consider a GET forimages/hero.webp:
- DNS resolves the regional S3 endpoint.
- The client establishes a connection and sends the HTTP request.
- AWS Signature Version 4 normally binds the request details to the caller’s credentials.
- S3 identifies the bucket and Region.
- S3 authorizes the action using applicable identity and resource policies.
- The service routes the key to internal capacity and locates the requested version.
- S3 returns the data or an error, and the client can verify a stored checksum.
Strong consistency changes application design
S3 provides strong read-after-write consistency for PUT and DELETE operations. After a successful write, a subsequent GET or HEAD receives the latest state. LIST operations are also strongly consistent. That guarantee does not make a multi-request workflow transactional. Two keys can change independently, and a reader can observe one update before another. Use immutable keys and a manifest or an application database when several objects need one commit point. Strong consistency applies to each completed S3 operation, not to a sequence of object requests as one transaction.Checksums are the integrity contract
S3 supports explicit checksum algorithms for applicable operations. You can send a checksum during upload, and S3 rejects a mismatch. You can retrieve stored checksum metadata later and compare it with downloaded content. Do not treat every ETag as an MD5 digest. Multipart uploads and encryption can produce ETags that are not full-object MD5 checksums. Use explicit checksum fields when integrity must be independently verified. An ETag identifies an object response; it is not a universal promise that it equals the object’s MD5 digest.Multipart upload is a commit protocol
Multipart upload separates transfer from publication:CreateMultipartUploadreturns an upload ID.UploadPartsends numbered parts, often in parallel.- The client records each part number and ETag.
CompleteMultipartUploadsubmits the ordered part list.- S3 assembles and publishes the object.
AbortMultipartUploadreleases an abandoned upload’s parts.
Frequently asked questions
Should I randomize every S3 object key?
Should I randomize every S3 object key?
No. S3 automatically scales partitioned prefixes, and AWS does not require universal key randomization. Design keys for listing and access patterns, spread exceptionally high sustained traffic when needed, ramp abrupt workloads, and retry temporary 503 responses with exponential backoff.
Can ETag verify every downloaded object?
Can ETag verify every downloaded object?
Not safely. An ETag can differ from an MD5 digest for multipart uploads and some encryption paths. Store an explicit supported checksum, retrieve its metadata, calculate the same algorithm over the downloaded bytes, and compare those values.
When does a multipart upload become visible?
When does a multipart upload become visible?
The object is published after S3 successfully processes
CompleteMultipartUpload. Before that, uploaded parts belong to the upload ID and consume storage but are not retrieved through a normal object GET. Abort abandoned uploads or expire them with a lifecycle rule.