1 unstable release

0.1.0 Sep 7, 2020

#10 in #dap

MIT license

329 lines

Build Status Docker Automated build Rust nightly


DARS is an asynchronous DAP/2 server written in Rust aimed at being fast and lightweight. It supports a subset of the OPeNDAP protocol. It aims to only serve the DAP protocol, not common services like a catalog or a WMS.

See below for installation instructions.

OPeNDAP server implementation and file formats

Variable and hyperslab constraints, except strides, are implemented. File formats based on HDF5 are supported:

  • HDF5
  • NetCDF (version 4)
  • NcML (aggregation along existing dimension).

HDF5 is read through hidefix, which is an experimental HDF5 reader for concurrent reading.

Some simple benchmarks

It is difficult to do meaningful benchmarks. However, here is an attepmt to show a simple comparsion between Dars, Thredds and Hyrax. See comparsion/report.md and comparison/benchmarks.sh for more details. wrk is used to measure the maximum requests per second for a duration using 10 concurrent connections. For Thredds and the large dataset wrk2 was used with a limit on 2 request/sec to avoid too many Out-of-memory-errors. The servers were run one at the time using their default docker images. It would be interesting to show latency (hdr)histograms for the different tests, but the performance (acceptable latency at certain requests per second) between the servers is so different that it is difficult to make any meaningful plots. Still, they should be included in further analysis, but done individiually for each server.

Requests per second for Dars, Thredds and Hyrax

Requests per second for Dars, Thredds and Hyrax

It is also interesting to note that the server load was very different during these benchmarks:

CPU and memory during load testing

Installation and basic usage

Set up rustup nightly.

Running from the repository:

$ cargo run --release

or install with:

$ cargo install --path dars

By default a simple catalog can be explored using a browser, if the catalog is disabled a list of datasets and DAP URLs can be queried at: http://localhost:8001/data/ (use curl -Haccept:application/json http://localhost:8001/data/ to get JSON). Use e.g. ncdump -h http://.. to explore the datasets.


Use gauteh/dars or build yourself:

$ docker build -t dars .
$ docker run -it -p 8001:8001 dars

mount your data at /data.


~522K SLoC