[ANN] Khepri 0.1.0 - A tree-like replicated on-disk database library

Frank Muller frank.muller.erl@REDACTED
Fri Nov 5 12:45:44 CET 2021


Hi Jean-Sebastian

I like it. Don’t you think the provided example (GitHub README.md) should
be like this instead:

%% This transaction checks the left quantity of wood and returns true or

%% false if we need to process a new order.

khepri:transaction(

    fun() ->

        case khepri_tx:get([stock, wood]) of

            {ok, #{[stock, wood] := #{data := Quantity}}}

              when Quantity < 100 ->

                %% There is less than 100 pieces of wood, or there is none

                %% at all (the node does not exist in Khepri). We need to

                %% request a new order.

                {ok, _} = khepri_tx:put([order, wood], ?DATA_PAYLOAD(1000)),

                false;

            _ ->

                 %% There is enough wood left.

                true

        end

    end).

Best
/F.


> Hi!
>
> On behalf of the RabbitMQ team, I'm proud to announce the Khepri
> database library (https://github.com/rabbitmq/khepri)!
>
> Release 0.1.0 is available on;
>      * GitHub (https://github.com/rabbitmq/khepri/releases/tag/v0.1.0)
>      * Hex.pm (https://hex.pm/packages/khepri)
>
> Khepri is a tree-like replicated on-disk database library for Erlang and
> Elixir. This is a library we plan to use inside RabbitMQ as a
> replacement for Mnesia. Indeed, we want to leverage Ra[1], our
> implementation of the Raft consensus algorithm, to have a uniform
> behavior, especially w.r.t. network partitions, across all types of data
> managed by RabbitMQ.
>
> In Khepri, data are organized as nodes in a tree. All tree nodes may
> contain data, not only the leaves. Here is a quick example:
>
>      %% Store "150" under /stock/wood/oak.
>      khepri:insert([stock, wood, oak], 150),
>
>      %% The tree now looks like:
>      %% .
>      %% `-- stock
>      %%     `-- wood
>      %%         `-- oak = 150
>
>      %% Get what is stored under /stock/wood/oak.
>      Ret = khepri:get([stock, wood, oak]),
>      {ok, #{[stock, wood, oak] := #{data := Units}}} = Ret,
>
>      %% Check /stock/wood/oak exists.
>      true = khepri:exists([stock, wood, oak]),
>
>      %% Delete /stock/wood/oak.
>      khepri:delete([stock, wood, oak]).
>
> Most of the concepts and a part of the API are described in the
> documentation (https://rabbitmq.github.io/khepri/). Note that the
> documentation is also far from complete.
>
> The implementation is very alpha at this stage. The internal design
> should not change drastically now but the API and ABI might.
>
> I would love Khepri to be as easy to use and intuitive as possible.
> That's why I'm reaching out to the community! If anyone is interested,
> could you please take a look at the documentation and/or the code and
> share your comments?
>
> Thank you very much!
>
> [1] https://github.com/rabbitmq/ra
>
> --
> Jean-Sébastien Pédron
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20211105/f5eb7aba/attachment.htm>


More information about the erlang-questions mailing list