materializedview.io
S3 Is Showing Its Age - by Chris - Materialized View
Excerpt
### I'm squarely in the trough of disillusionment with S3. There’s no denying that S3 is a feat of engineering. Building and Operating a Pretty Big Storage System is a top-tier technology flex. But S3’s feature set is falling behind its competitors. Notably, S3 has no compare-and-swap (CAS) operation—something every single other competitor has. It also lacks multi-region buckets and object appends. Even S3 Express is proving to be lackluster. These missing features haven’t mattered much for data lakes and offline use cases. But new infrastructure is using object storage as their primary persistence layer—something I’m excited about. Here, S3’s feature gaps are a bigger problem. … S3 is the only object store that doesn’t support preconditions. Every other object store—Google Cloud Storage (GCS), Azure Blob Store (ABS), Cloudflare Ridiculously Reliable (R2) storage, Tigris, MinIO—all have this feature. Instead, developers are forced to use a separate transactional store such as DynamoDB to enforce transactional operations. Building a two-phase write between DynamoDB and S3 is not technically difficult, but it’s annoying and leads to ugly abstractions. ## S3 Express One Zone Isn’t S3 I was really excited about S3 Express One Zone (S3E1Z) when it first came out. The more time I spend with it, the less impressed I am. The first wart that surfaced was a new directory bucket type, which Amazon introduced for Express. But the gaps don’t stop here. S3E1Z is missing a *ton* of standard S3 features including object version support, bucket tags, object locks, object tags, and MD5 checksum ETags. The complete list is pretty staggering. S3E1Z buckets can’t be treated like a normal S3 buckets. As with CAS operations, developers must design around these deficiencies. And because S3E1Z is not multi-zonal, developers are left to build quorum writes to multiple availability zones for higher availability. Factor in S3E1Z’s high storage cost of $0.16/gig—twice elastic block store’s (EBS) general purpose SSD (gp3) cost—and S3E1Z looks more like an expensive EBS with a half-implemented S3 API. … ## Embracing Reality The dream is that developers are offered an object store with all of these features: low latency, preconditions, dual-region/multi-region, and so on. But we live in reality, where engineers face a choice: abandon S3 or build around these gaps. Turbopuffer is my favorite example of a company that’s gone all-in on abandoning S3.
Related Pain Points
S3 lacks compare-and-swap (CAS) operations
7S3 is the only major object store without compare-and-swap (CAS) operations, a feature available in GCS, Azure Blob Store, Cloudflare R2, Tigris, and MinIO. This forces developers to use separate transactional stores like DynamoDB, creating ugly abstractions and two-phase write complexity.
S3 Express One Zone lacks standard S3 features
7S3 Express One Zone (S3E1Z) is missing numerous standard S3 features including object version support, bucket tags, object locks, object tags, and MD5 checksum ETags. It cannot be treated like a normal S3 bucket and lacks multi-zone support, forcing developers to design around deficiencies.
S3 lacks multi-region and object append capabilities
6S3 does not support multi-region buckets or object appends, features available in competitors. These gaps are problematic for modern infrastructure using object storage as a primary persistence layer.
S3 Express One Zone has prohibitive pricing for performance gains
5S3 Express One Zone costs $0.16/GB, twice the price of EBS general purpose SSD (gp3), making it an expensive option relative to its limited feature set and single-zone constraint. For the cost, it functions more like an expensive EBS with a half-implemented S3 API.