Re: [ANN] Khepri 0.3.0 - A tree-like replicated on-disk database library
Frank Muller <[email protected]> Wed, 27 Apr 2022 05:14:08 +0200
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CAFA6GnC2irnoY+8ViF0qVHBi1Lz4VV4gNTiNAqHX3QH3YM=jgg@mail.gmail.com> |
--00000000000088405105dd9a348f
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Congratulations for the new release.
Did you update the benchmark against Mnesia? Is Kephri 0.3.0 faster?
> Hi!
>
> On behalf of the RabbitMQ team, I'm pleased to announce Khepri 0.3.0! It
> is available on:
> * GitHub (https://github.com/rabbitmq/khepri/releases/tag/v0.3.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.
>
> The release notes [2] describe the content of Khepri 0.3.0 in details,
> with examples. The most important and breaking change is the revamp of
> the public API. Here is a summary of the major highlights of this change:
>
> * The high- vs low-level API distinction is now gone. The public API is
> now exposed by `khepri` only. `khepri_machine` becomes an internal
> private module. As part of that `khepri` grew several new functions
> for common use cases and we will certainly add more in the future,
> based on the feedback.
>
> * Unix-like path are first-class citizen: all functions taking a native
> path ([stock, wood, <<"oak">>]) now accept Unix-like paths
> ("/:stock/:wood/oak"). In the process, the syntax of Unix-like paths
> evolved: atoms are represented as :atom and binaries are represented
> as-is, binary. The main reason is that using <<binary>> for binaries
> was difficult to read and type.
>
> * Payload and event filter records are now private. Payload types are
> automatically detected now, likewise for event filters. That said, it
> is still possible to use functions to construct the internal
> structures, but it should rarely be necessary.
>
> * `khepri_tx`, the module to perform Khepri calls inside transactions,
> will now expose the same API as `khepri`, except when functions don=E2=
=80=99t
> make sense in a transaction.
>
> As always, I would loooove to hear from anyone who glanced at the code,
> the documentation or even started to play with Khepri :-)
>
> [1] https://github.com/rabbitmq/ra
> [2] https://github.com/rabbitmq/khepri/releases/tag/v0.3.0
>
> --
> Jean-S=C3=A9bastien P=C3=A9dron
>
--00000000000088405105dd9a348f
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"auto">Congratulations for the new release.</div><div dir=3D"aut=
o"><br></div><div dir=3D"auto">Did you update the benchmark against Mnesia?=
Is Kephri 0.3.0 faster?</div><div><br><div class=3D"gmail_quote"><blockquo=
te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-widt=
h:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,20=
4,204)"><br>Hi!<br>
<br>
On behalf of the RabbitMQ team, I'm pleased to announce Khepri 0.3.0! I=
t <br>
is available on:<br>
=C2=A0 =C2=A0 =C2=A0* GitHub (<a href=3D"https://github.com/rabbitmq/khepri=
/releases/tag/v0.3.0" rel=3D"noreferrer" target=3D"_blank">https://github.c=
om/rabbitmq/khepri/releases/tag/v0.3.0</a>)<br>
=C2=A0 =C2=A0 =C2=A0* Hex.pm (<a href=3D"https://hex.pm/packages/khepri" re=
l=3D"noreferrer" target=3D"_blank">https://hex.pm/packages/khepri</a>)<br>
<br>
Khepri is a tree-like replicated on-disk database library for Erlang and <b=
r>
Elixir. This is a library we plan to use inside RabbitMQ as a <br>
replacement for Mnesia. Indeed, we want to leverage Ra[1], our <br>
implementation of the Raft consensus algorithm, to have a uniform <br>
behavior, especially w.r.t. network partitions, across all types of data <b=
r>
managed by RabbitMQ.<br>
<br>
The release notes [2] describe the content of Khepri 0.3.0 in details, <br>
with examples. The most important and breaking change is the revamp of <br>
the public API. Here is a summary of the major highlights of this change:<b=
r>
<br>
* The high- vs low-level API distinction is now gone. The public API is<br>
=C2=A0 =C2=A0now exposed by `khepri` only. `khepri_machine` becomes an inte=
rnal<br>
=C2=A0 =C2=A0private module. As part of that `khepri` grew several new func=
tions<br>
=C2=A0 =C2=A0for common use cases and we will certainly add more in the fut=
ure,<br>
=C2=A0 =C2=A0based on the feedback.<br>
<br>
* Unix-like path are first-class citizen: all functions taking a native<br>
=C2=A0 =C2=A0path ([stock, wood, <<"oak">>]) now acce=
pt Unix-like paths<br>
=C2=A0 =C2=A0("/:stock/:wood/oak"). In the process, the syntax of=
Unix-like paths<br>
=C2=A0 =C2=A0evolved: atoms are represented as :atom and binaries are repre=
sented<br>
=C2=A0 =C2=A0as-is, binary. The main reason is that using <<binary>=
;> for binaries<br>
=C2=A0 =C2=A0was difficult to read and type.<br>
<br>
* Payload and event filter records are now private. Payload types are<br>
=C2=A0 =C2=A0automatically detected now, likewise for event filters. That s=
aid, it<br>
=C2=A0 =C2=A0is still possible to use functions to construct the internal<b=
r>
=C2=A0 =C2=A0structures, but it should rarely be necessary.<br>
<br>
* `khepri_tx`, the module to perform Khepri calls inside transactions,<br>
=C2=A0 =C2=A0will now expose the same API as `khepri`, except when function=
s don=E2=80=99t<br>
=C2=A0 =C2=A0make sense in a transaction.<br>
<br>
As always, I would loooove to hear from anyone who glanced at the code, <br=
>
the documentation or even started to play with Khepri :-)<br>
<br>
[1] <a href=3D"https://github.com/rabbitmq/ra" rel=3D"noreferrer" target=3D=
"_blank">https://github.com/rabbitmq/ra</a><br>
[2] <a href=3D"https://github.com/rabbitmq/khepri/releases/tag/v0.3.0" rel=
=3D"noreferrer" target=3D"_blank">https://github.com/rabbitmq/khepri/releas=
es/tag/v0.3.0</a><br>
<br>
-- <br>
Jean-S=C3=A9bastien P=C3=A9dron<br>
</blockquote></div></div>
--00000000000088405105dd9a348f--