Noria is a new streaming data-flow system designed to act as a fast storage backend for read-heavy web applications. Based on Jon Gjengset's PhD Thesis and presented at OSDI'18, Noria acts like a database but precomputes and caches relational query results for blazingly fast reads. It automatically keeps cached results up-to-date as the underlying data changes, using partially-stateful data-flow to reduce memory overhead and support dynamic, runtime data-flow, and query changes.
Noria follows a server-client model where many clients connect to a potentially distributed server. The server, noria-server
, must be started before clients can connect. Noria uses Apache ZooKeeper for server location announcements, so ZooKeeper must be running.
To build noria-server
, you need nightly Rust. This can be managed automatically using rustup
. Install the necessary dependencies and build noria-server
:
Ensure ZooKeeper is running and start noria-server
:
myapp
is a deployment name, and multiple noria-server
instances can share the workload in a single deployment.
The noria
crate provides native Rust bindings for interacting with noria-server
. See the documentation for detailed usage instructions. Example programs can be found in the Noria repository.
Noria includes a MySQL adapter that allows applications to use standard MySQL queries. Once the adapter is running, point your application to localhost:3306
to send queries to Noria.
You can manually inspect data stored in Noria using any MySQL client (e.g., mysql
CLI) or Noria's web interface. Noria also has an advanced web UI for a more comprehensive view of the data-flow graph and REST API endpoints.
Noria is a large project with many sub-crates and external tools. Key sub-crates include:
Run tests with:
Build and open the documentation with: