h2kv
A simple object storage system. Provides an unopinionated HTTP/2 interface for LevelDB based on features described in public RFCs.
Goals
- Facilitate web application portability. The only semantics involved are that of hash tables, HTTP, and JSON.
Non-goals
- This is not designed to scale. Some of the technical limitations of LevelDB are discussed in this video.
Features
- The URL path is the storage key. Stored objects are managed using HTTP verbs (HEAD, GET, PUT, DELETE).
- Bulk synchronization of objects with local filesystem tree (optional).
- Content negotiation of file formats by file extension and HTTP headers (RFC 9110).
- Exhaustive integration tests.
Warnings
- LevelDB is known to suffer from data corruption during system crashes. Use a durable file system such as ZFS to mitigate this problem.
- TLS is mandatory for creating HTTP/2 connections from a web browser. Use a TLS proxy such as Hitch for this use case.
Status
This project is a work in progress, with additional releases planned in the near future.
Acknowledgements
This project is possible thanks to the authors of the leveldb-rs-binding crate.
Installation
Cargo
- Install the rust toolchain in order to have cargo installed by following this guide.
- run
cargo install h2kv
Usage
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
See CONTRIBUTING.md.