By some microbench evaluations, I found that:
- One kind of S3 client has different performance with different configurations.
- Difference kinds of S3 clients (e.g. S3Client and S3AsyncClient in AWS java sdk v2) provide best performance under different workload pattens.
So we should abstract and wrap all kinds of S3 clients, and support configurations for them and adaptive switching between them.
This is also a good feature to adapte Pixels to other S3-like cloud storages.