<div dir="auto">Congratulations for the new release.</div><div dir="auto"><br></div><div dir="auto">Did you update the benchmark against Mnesia? Is Kephri 0.3.0 faster?</div><div><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)"><br>Hi!<br>
<br>
On behalf of the RabbitMQ team, I'm pleased to announce Khepri 0.3.0! It <br>
is available on:<br>
* GitHub (<a href="https://github.com/rabbitmq/khepri/releases/tag/v0.3.0" rel="noreferrer" target="_blank">https://github.com/rabbitmq/khepri/releases/tag/v0.3.0</a>)<br>
* Hex.pm (<a href="https://hex.pm/packages/khepri" rel="noreferrer" target="_blank">https://hex.pm/packages/khepri</a>)<br>
<br>
Khepri is a tree-like replicated on-disk database library for Erlang and <br>
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 <br>
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:<br>
<br>
* The high- vs low-level API distinction is now gone. The public API is<br>
now exposed by `khepri` only. `khepri_machine` becomes an internal<br>
private module. As part of that `khepri` grew several new functions<br>
for common use cases and we will certainly add more in the future,<br>
based on the feedback.<br>
<br>
* Unix-like path are first-class citizen: all functions taking a native<br>
path ([stock, wood, <<"oak">>]) now accept Unix-like paths<br>
("/:stock/:wood/oak"). In the process, the syntax of Unix-like paths<br>
evolved: atoms are represented as :atom and binaries are represented<br>
as-is, binary. The main reason is that using <<binary>> for binaries<br>
was difficult to read and type.<br>
<br>
* Payload and event filter records are now private. Payload types are<br>
automatically detected now, likewise for event filters. That said, it<br>
is still possible to use functions to construct the internal<br>
structures, but it should rarely be necessary.<br>
<br>
* `khepri_tx`, the module to perform Khepri calls inside transactions,<br>
will now expose the same API as `khepri`, except when functions don’t<br>
make 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="https://github.com/rabbitmq/ra" rel="noreferrer" target="_blank">https://github.com/rabbitmq/ra</a><br>
[2] <a href="https://github.com/rabbitmq/khepri/releases/tag/v0.3.0" rel="noreferrer" target="_blank">https://github.com/rabbitmq/khepri/releases/tag/v0.3.0</a><br>
<br>
-- <br>
Jean-Sébastien Pédron<br>
</blockquote></div></div>