Giter VIP home page Giter VIP logo

haura's Introduction

Be-Tree Storage Stack

CI Pages

A storage library offering key-value and object interfaces by managing B^ε-trees on block storage devices.

Dependencies

We advise you to use always the latest version of Rust Stable. For compatability we provide the minimum rust version also in the Cargo.toml of each crate in this project.

git clone https://github.com/parcio/haura
cd haura/betree
cargo build
cd tests
./scripts/test.sh

Documentation

You can find an in-depth documentation and developer guide under https://parcio.github.io/haura or you may build it yourself locally. For building the documentation mdbook is required. You can find install directions in their documentation under https://rust-lang.github.io/mdBook/.

Also you'll require mdbook-grapviz to render graphs within the documentation. This crate also needs graphviz to be installed on your system.

The documentation is automatically built and published on GitHub Pages - the workflow for which you can find under .github/workflows/pages.yml.

julea-sys

julea-sys generates limited Rust bindings from the JULEA headers, by using rust-bindgen, which uses libclang. The location of the JULEA headers must be provided by passing the JULEA_INCLUDE environment variable.

bindgen needs to access included headers of any libraries JULEA is referencing. The search path can be provided as shown below, though the specifics may change depending on future JULEA versions and cross-compilation. See the bindgen documentation for options of providing the necessary include paths.

export BINDGEN_EXTRA_CLANG_ARGS="$(pkg-config --cflags glib-2.0) $(pkg-config --cflags libbson-1.0)"

Attribution

This code was originally written as a part of Felix Wiedemanns (@Nilix007) master's thesis.

License

Licensed under either of

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.

haura's People

Contributors

hellow554 avatar jwuensche avatar michaelkuhn avatar nilix007 avatar sajadkarim avatar tilpner avatar

Watchers

 avatar

haura's Issues

`Cursor` without preference on `ObjectHandle` does not work as intended

The documentation makes it seem that the normal way a cursor should work cannot impose a StoragePreference::NONE on the storage if the object has a defined preference.

Quote:

    /// Create a cursor without a storage preference override, at position 0.

Though in this example this happens exactly as it shouldn't.

        let (obj, _info) =
            os.open_or_create_object_with_pref(name.as_bytes(), StoragePreference::FAST)?;
        let mut cursor = obj.cursor();

        with_random_bytes(&mut client.rng, OBJECT_SIZE / 2, 8 * 1024 * 1024, |b| {
            cursor.write_all(b)
        })?;

If the default preference is FASTEST everything will end up in this tier.

Packed Leaf Migration

In the current implementation the migration unpacks packed leafs as we need to modify. This is unnecessary overhead, rather we should modify the packed leaf in place using the binary search for keys and write the leafs out as is. Here we need to take care that parents of this leaf do receive the updated position.

Async Object Migration - Client and Policy

For large objects it is advantageous to asynchronously perform migrations without user intervention. It may be advisable to perform this at a reduced rate for policy initiated migrations to remain responsive to operations from clients.

Add closed result for Dataset

Once a dataset has been closed we are not able to modify the handle anymore and it should return a closed error. This has not been done yet.

Semantic Join of Cache Space and Disk Space Accounting for pre-emptive fallbacks on inserts

For some things like objects it would be nice to know before hand if the data we are writing will fit on to the device, this has been exempted from the space accounting implemented as this does only reflect the actual on-disk state of the filesystem, which might not be the current actual state. For this reason we might want to keep an estimation of the future space requirements of data in the cache to know if storage will be available in the future.

For now a "fix" could be the assumption that all data of the cache will be written on whatever storage one wants to write data to, or faster. This will keep some space unusable and be overly careful but includes all cases in which errors might occur.

The determination of how much space will be required when writing to disk is easy as this is already part of the cache, but how this is distributed in the then storage is not trivial and also depends on the order of these objects in the tree. Determining this beforehand requires modification of the fallback semantics which leads to many more implications not fully explored yet.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.