11 releases

0.3.5 Feb 18, 2022
0.3.4 May 10, 2021
0.3.3 Mar 25, 2020
0.3.0 Feb 24, 2020
0.1.1 Feb 11, 2020

#15 in #data-channel

Download history 44/week @ 2024-02-26 4/week @ 2024-03-04 170/week @ 2024-04-01

171 downloads per month

MIT license

93KB
1.5K SLoC

Kekbit

Cargo Documentation Rust 1.40+ GitHub Build Clippy codecov

Mean and lean components for working with ultralight persistent data channels in rust. Channels could be used for communication, transaction journaling, live replication of an application state or as a backend for persisting software system images.

Basic Concepts

Persistent data channels

  • A mechanism to sequentially persist data at a very fast rate
  • They are writer bound - it is a writer which creates them and specify the particular structure of a channel such size, maximum record length, or timeout
  • They have a fixed predefined capacity.
  • Once a channel is closed, is full, or is abandoned it will never be used again for writing.
  • They are byte-oriented sinks.
  • They are backed by a file; using a RAM disk for storage such as tempfs or /dev/shm could provide blazing fast speeds.
  • They always use little endian byte order.

Writers and Readers

  • Writers are components which push data into a persistent channel. For each channel there is only one writer.
  • Write operation can be done in stages using a chain of handlers.
  • Readers are components which poll data from a channel. Data available in the channel could be consumed multiple times, sequential or in parallel by multiple readers.
  • The default implementations for both readers and writers are non-blocking.
  • Readers also offer a straight Iterator API.

Usage

Add this to your Cargo.toml:

[dependencies]
kekbit = "0.3.4"

See the Examples for detailed usage.

Compatibility

The minimum supported Rust version is 1.31. Any change to this is considered a breaking change.

License

Licensed under MIT license (LICENSE or http://opensource.org/licenses/MIT)

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, shall be licensed as above, without any additional terms or conditions.

Dependencies

~0.6–7MB
~15K SLoC