Architecture and Design#
Z3FDB is built as a thin Python layer on top of a C++ core. The stack has five layers, grouped into two categories: pure-Python code you can read and modify without a C++ toolchain (shown in green), and compiled native code that handles performance-critical work (shown in red/blue).
%%{config: {'block': {'useMaxWidth': true}}}%%
block-beta
columns 1
a["z3fdb\n[Pure Python]"]
b["pychunked_data_view\n[Pure Python]"]
c["chunked_data_view_bindings.cpython.so\n[Native Python bindings]"]
d["libchunked_data_view.so\n[Chunked access of data in view]"]
e["libfdb5.so"]
style a fill:#cfc
style b fill:#cfc
style c fill:#fcc
style d fill:#fcc
style e fill:#ccf
Layer descriptions#
- z3fdb (pure Python)
The user-facing API.
SimpleStoreBuildercollects MARS requests and axis definitions, then wraps the result in a Zarr-compatible store object that can be opened withzarr.open_array().- pychunked_data_view (pure Python)
Python types that mirror the C++ core:
AxisDefinition,Chunking,ChunkedDataViewBuilder, andChunkedDataView. This layer translates between Python conventions and the native bindings layer below it.- chunked_data_view_bindings (compiled extension)
A
pybind11-generated.sothat exposes the C++ types and methods to Python. This is the bridge between the pure-Python layers above and the C++ library below.- libchunked_data_view (compiled C++ library)
The core of Z3FDB. It manages the
ViewPartobjects that represent individual MARS requests, computes bounding-box intersections when a chunk is accessed, issues sub-requests to FDB, and decodes the returned GRIB data into the flat float32 chunk buffer.- libfdb5 (compiled C++ library)
The FDB storage engine.
libchunked_data_viewcalls into it to retrieve GRIB fields by MARS key.