pearl 0.5.2-alpha.3

Pearl is a low level blob-based I/O library
Documentation
Pearl
=====
[![Build Status](https://travis-ci.org/qoollo/pearl.svg?branch=master)](https://travis-ci.org/qoollo/pearl)
[![Crate Status](https://img.shields.io/crates/v/pearl.svg)](https://crates.io/crates/pearl)
[![Docs Status](https://docs.rs/pearl/badge.svg)](https://docs.rs/crate/pearl)


Append only key-value blob storage on disk

* [documentation]https://qoollo.github.io/pearl/pearl/index.html

Table of Contents
=================

* [Overview]#overview
    * [Storage scheme]#storage-scheme
    * [Blob]#blob
        * [Header]#header
    * [Record]#record
        * [Header]#header
    * [Index]#index
        * [Header]#header
* [Rust Version]#rust-version

# Overview
## Storage scheme
![pearl storage scheme](pearl_storage_scheme.svg)

## Blob
### Header

Structure:
```rust
struct Header {
    magic_byte: u64,
    version: u32,
    flags: u64,
}
```
Description

| Field       | Size, B | Description |
| ----------- | :----:  | :----------- |
|magic_byte   | 8       | marks `pearl` blob
|version      | any     | used to check compatibility
|flags        | 1       | additional file props

## Record
### Header

Structure:
```rust
pub struct Header {
    magic_byte: u64,
    key: Vec<u8>,
    meta_size: u64,
    data_size: u64,
    flags: u8,
    blob_offset: u64,
    created: u64,
    data_checksum: u32,
    header_checksum: u32,
}
```
Description

| Field          | Size, B | Description |
| -------------- | :----:  | :----------- |
|magic_byte      | 8       | separates records in blob
|key             | (any)   | key for record location and searching
|meta_size       | 8       | meta length
|data_size       | 8       | data length (without header)
|flags           | 1       | additional record metadata
|blob_offset     | 8       | record offset from blob start
|created         | 8       | created timestamp
|data_checksum   | 4       | data crc32 checksum (without header)
|header_checksum | 4       | header crc32 checksum (only record header)

# Rust Version
`pearl` works on stable rust and above
```
$ rustup update
$ cargo build
```