We built a database system on S3 Express, and I wrote a book about latency, so let me comment on some of the technical details.
When we talk about write latency in a database system, the limiting factor is typically the time to commit to durable storage. If you are using object storage as your backing store, you have two options for the write path, depending on your durability model. The first option is to write to the object store asynchronously, which means object storage is irrelevant to your write latency, and therefore, uninteresting when comparing S3 Express and NVMe latency.
The second option, which is what we actually do, is that you write to S3 Express synchronously, and now your commit latency is bound by it. In other words, when a commit needs to become durable, we perform a PUT request on S3 Express as a replacement for a `fsync()` call on NVMe. In other words, if the PUT request succeeds, your commit is now durable on S3 Express, just like with `fsync()`, it's durable on disk. (Of course, you often want replication to multiple disks, but you can parallelize that, and it does not change the scenario very much.)
In this scenario, we can meaningfully compare NVMe and S3 Express latency: NVMe has up to 100x lower latency because enterprise-grade NVMe latency is in the tens of microseconds, whereas S3 Express latency is in the single-digit millisecond range. Of course, depending on your database architecture, you may also see additional latency from networking, but there is no scenario where object storage has lower latency than NVMe.
Of course, there are many other advantages to building on top of object storage. For example, high availability, elastic storage scaling, cost-efficiency, and, in my opinion, competitive latency for many use cases. But we're talking about just pure write latency; S3 Express is clearly not faster than NVMe.