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

Jean-Sébastien Pédron jean-sebastien.pedron@REDACTED
Fri Feb 18 10:55:01 CET 2022


On behalf of the RabbitMQ team, I'm pleased to announce Khepri 0.2.1! It 
is available on:
     * GitHub (https://github.com/rabbitmq/khepri/releases/tag/v0.2.1)
     * 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 of 0.2.0 [2] describe the highlights of Khepri 0.2.x 
in detail, but I would like to quickly talk about the biggest one: 
triggers and stored procedures!

Triggers are a mechanism to execute an anonymous function automatically 
following some events.

Currently supported events are changes made to the tree: nodes were 
created, updated or deleted. In the future, it could support Erlang 
process monitoring, node monitoring, and so on. Triggers are registered 
using an event filter which, as its name suggests, takes care of 
filtering the event which should execute the associated function.

The anonymous function behind a trigger is stored in the database as the 
payload of tree node. This function is called a stored procedure. Before 
it is stored, the function is extracted like transaction functions are. 
However, there are no restrictions on what it can do, unlike transaction 

If you have any comments and feedback, or if you started to play with 
the library in one of your projects, please share! I’m looking forward 
to listen to your experience!

Thank you very much!

[1] https://github.com/rabbitmq/ra
[2] https://github.com/rabbitmq/khepri/releases/tag/v0.2.0

Jean-Sébastien Pédron

More information about the erlang-questions mailing list