<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>