2025 Zarr Summit – Rome, Italy
how to make zarr go �zoom zoom
Some context
I tend to be most interested in…
This talk is not meant to be an exhaustive list of benchmarks of Zarr…
2
Example workflow: Xarray + Zarr
# 1 - open a zarr store using Xarray
ds = xr.open_zarr(“s3://bucket/dataset.zarr”)
# 2 - load all arrays into memory
ds.load()
# 3 - write the dataset to a s3 bucket
ds.to_zarr(“s3://bucket/dataset2.zarr”)
3
Simple benchmark
4
Big gains in the past two years!
# 1 - open a zarr store using Xarray
ds = xr.open_zarr(“s3://bucket/dataset.zarr”)
# 2 - load all arrays into memory
ds.load()
# 3 - write the dataset to a s3 bucket
ds.to_zarr(“s3://bucket/dataset2.zarr”)
5
~3x faster
>3x faster
~6x faster
6
Zarr 3.0
Zarr 3.0.8�(Obstore)
Bugfix 🤦
7
Zarr 3.0
Zarr 3.0.8�Obstore
how did we do it?
8
First review: why do we expect Zarr to be “fast”?
1. Chunked, streaming access - Data are split into independently readable chunks, enabling selective, efficient I/O.
2. Compression saves on both storage and bandwidth - Per-chunk compression reduces data transfer and storage costs, critical for networked workloads.
3. Designed for parallel I/O - Independent chunks can be read or written concurrently across threads or processes.
4. High-throughput storage backends - Backend-agnostic design lets S3, GCS, and others optimize access with range and batch operations.
9
How did we do it?
→ Both Xarray and Zarr have I/O counters in their test suite now
Zarr Python 3
→ Stores interact exclusively with backends (e.g. S3) via AsyncIO
→ Codecs use AsyncIO’s to_thread
→ e.g. Use Obstore S3 backend instead of s3fs
10
pip install xarray zarr
# Ready to use today 🚀
11
Still lots to do!
12
What next?
13
Questions?
joe@earthmover.io
14
v
A look under the hood
xarray.open_zarr()
Dataset.load()
15
https://github.com/pydata/xarray/blob/main/xarray/backends/zarr.py