Adding a few others from my experience working on an OLAP database:
· Costs: S3 is expensive if you do a lot of read/write operations. I’d say it can be prohibitive for large-scale systems. The workaround is to add batching and other techniques (including another support databases), which adds a lot of complexity if you need to keep transactions atomic.
· Rate limits: People think S3 scales as much as you need, but like any other service, it has rate limits that you need to handle. Not new, every storage system has them.
· Bucket performance degradation: When you use S3 for a service like this, you do it because you don’t need to worry about designing a distributed system (at least the hard parts). You trust S3 to handle HA and so on. But bucket performance can degrade, and it’s more common than you’d expect. Usually, this means higher error rates and latency, but it can take down your wrapper. So you need to design for that, and that’s not easy.
· You are tied to AWS. GCS has a compatibility layer which works "well" but azure does have it. Locally you need to rely on minio (which changed the OS license recently). In onprem installs you need an extra product that serve as the S3. Using AWS S3 from a different provider is too expensive due to egress costs and latency.
· Object management. Eventually you need to do batch opeeation to drop/rename/whatever on a lot of objects. Not easy/cheap. Final users don't see this but the service provider needs to account for this.