[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 17:04:23 CET 2022


On 18/02/2022 15:36, I Gusti Ngurah Oka Prinarjaya wrote:
> Triggers in an RDBMS database are a nightmare. I never use trigger in 
> MySQL / PostgreSQL / etc RDBMS.
> I worried the trigger feature in Khepri will also become a nightmare. 
> Please reconsider adding a trigger feature.

Thank you for your feedback! I should have explained the use case a bit 
more.

Adding, updating or deleting something in the Khepri tree is represented 
as a Ra/Raft command. All members of a Khepri cluster are instances of a 
state machine. These state machines must apply commands to make progress 
with their state and they must all reach the same result given the same 
set of commands.

Therefore, transactions in Khepri are not allowed to have side effects 
(send a message to an Erlang process, write something to the 
disk/network, etc.).

However, sometimes we need those side effects. For instance in RabbitMQ, 
when a vhost, a queue, a binding, an internal user, ... is deleted, an 
internal event is emitted to notify other processes. This can't happen 
inside the transaction code.

One possibility is for the code who requests the transaction to also 
emit that event once the transaction is complete. That's ok because it 
knows about what it is deleting.

However, some tree nodes are deleted automatically because they were 
under another node higher in the tree. In this case, we need an 
automatic way to emit that event when these nodes are deleted as a 
consequence of something else. This is when triggers are useful.

Here, triggers can't mess with the database content directly. They can 
request modifications, but like any caller in the end. Thus they would 
go through a Ra command too.

Triggers in Khepri could be compared to a combination between 
`erlang:monitor/2` (which would know about tree nodes) and `erlang:apply/2`.

Do you still see that as a source of problems?

-- 
Jean-Sébastien Pédron


More information about the erlang-questions mailing list