aol

Crates.ioaol
lib.rsaol
version
sourcesrc
created_at2024-06-19 16:37:23.392192
updated_at2024-10-31 19:58:50.588086
descriptionGeneric purpose append only log implementation.
homepagehttps://github.com/al8n/aol
repositoryhttps://github.com/al8n/aol
max_upload_size
id1277100
Cargo.toml error:TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Al Liu (al8n)

documentation

https://docs.rs/aol

README

Append Only Log

Generic purpose append only log implementation.

github LoC Build codecov

docs.rs crates.io crates.io

license

English | 简体中文

Introducation

When developing infrastructure softwares, write-ahead log or append-only log plays an important role, and people re-implement same funcationalities multiple times, but actually, the core for append-only log is just atomic append, append_batch, replay, and rewrite.

This crate provides generic purpose append-only log implementation based on std::fs::File.

  • aol::fs::AppendLog:

    Generic purpose append-only log implementation based on std::fs::File.

    • It is good for:

      • The encoded entry size is smaller than 64 bytes.
      • Manifest file.
      • Write is not too frequently.
    • Pros:

      • It is growable, do not require pre-allocated.
      • Support automatically rewrite.
      • No holes in the file.

File Structure

+----------------------+--------------------------+-----------------------+
| magic text (4 bytes) | external magic (2 bytes) | magic (2 bytes)       |
+----------------------+--------------------------+-----------------------+-----------------------+-----------------------+
| op (1 bit)           | custom flag (7 bits)     | len (4 bytes)         | data (N bytes)        | checksum (8 bytes)    |
+----------------------+--------------------------+-----------------------+-----------------------+-----------------------+
| op (1 bit)           | custom flag (7 bits)     | len (4 bytes)         | data (N bytes)        | checksum (8 bytes)    |
+----------------------+--------------------------+-----------------------+-----------------------+-----------------------+
| ...                  | ...                      | ...                   | ...                   | ...                   |
+----------------------+--------------------------+-----------------------+-----------------------+-----------------------+

Installation

[dependencies]
aol = "0.3"

Example

License

aol is under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE, LICENSE-MIT for details.

Copyright (c) 2024 Al Liu.

Commit count: 24

cargo fmt