Khepri is a tree-like replicated on-disk database library for Erlang and Elixir
github.com
github.com
Khepri is a project intended to replace Mnesia for replicated, clustered distributed systems written in Erlang/Elixir such as RabbitMQ. The primary reason this project started was to address shortcomings of Mnesia with regards to "network partitions", where cluster nodes are running on unreliable networks and network failures happen.
Caveat emptor! The project README still refers to Khepri as an alpha product, so I assume that RabbitMQ continues to use some kind of customized Mnesia for its production system. Unfortunately, in the absence of any significant system using Khepri, should you decide to adopt it you will be on the bleeding edge and will have scars for using it, at best, and a complete project failure at worst. Distributed systems problems are very hard problems to solve.
The data is handled by our Raft library underneath which is production ready, so for a given version of Khepri, the data is safe.
However, the public API and internals of Khepri are unstable. Therefore, as a user of Khepri, you may have to adapt your code when upgrading Khepri to a later version. If the internals change too, you may need to work on some migration tool to export the existing data and import it in a new instance. This is not something Khepri will do for you with an upgrade before it reaches 1.0.0.
And you are right that RabbitMQ releases don't use Khepri at all for now and rely entirely on Mnesia. Future releases will introduce Khepri gradually, for vhosts and users first, and more types of records with each minor release.
I know in Latin, "data" is plural and "datum" is singular, but we aren't speaking Latin, and even if we were, we're not doing so consistently. For example, we don't say, "The meeting's agenda ARE up to date," even though "agenda" is plural and "agendum" is singular. Instead, we adapt the word "agenda" to our grammar and use it as a singular collection, "The meeting's agenda IS up to date," similar to the way we say, "The population IS growing."
To me, saying "Data are..." is pretentious, like when people use the word "an" before words that start with a consonant.
EDIT: Fixed a capitalization typo.
It could be a false memory though, which is why I'm asking.
Anyway, "data" as plural is a couple of thousands years old.
Afaik that is only done for words, which sound like they start with a vowels and I think it is done for easier pronunciation. Why is that pretentious?
What I'm talking about is when people reverse this rule to make themselves sound smarter. For example, I have worked with a few people during my career who would say things like, "I will need an pen and an paper to take notes." When I asked why they did that, they'd parrot back the grammar rule for who vs. whom, which is entirely wrong. This is what I mean by pretentious.
I maintained a clustered RabbitMQ cluster and used Chef to coordinate upgrades. Uprading Erlang AND RabbitMQ at the same time wasn't very enjoyable since it had the potential to go wrong in production. Fortunately it went right and nobody noticed.
If RabbitMQ can solve the partition problem with Khepri that would be great. The userguide tells how to configure RabbitMQ to handle splits.
https://www.rabbitmq.com/partitions.html
I think we used pause_minority which sacrifices availability for consistency.
Khepri is a newer project that reuses the Raft library developed for quorum queues to store metadata, as a replacement for Mnesia, Erlang's built-in distributed DB. I think that means things like vhosts, users, permissions, etc.