Beam: Distributed knowledge graph store written in Go by eBay
github.com
github.com
The architecture is: materialized views from a central append log.
I don't see a reference to Apache Bookkeeper[1][2] in the above. My recommendation to anyone who wants to build their own variant of this architecture is to build it on top of Bookkeeper instead of rolling your own. It is designed for this precise workload [2] and addresses the write throughput limitations of the OP 'Beam'.
[edit: pull quote from [2]]:
"what makes BookKeeper unique is its ability to offer a short-tailed, low-latency, distributed scale-out storage solution. Although this is a CP system, its greater availability makes it almost a C(A)P system. It is an apt storage for immutable data."
[1]: https://bookkeeper.apache.org/
[2]:https://www.linux.com/news/event/apachecon/2017/4/high-perfo...
It sounds like this needs a second central log to enable eviction of sensitive data before it can be seriously considered usable. One log for transactions and another other for the data itself. Or at least that is the conclusion we reached when designing and building our own knowledge graph store (with a similar use of Kafka): https://juxt.pro/crux/docs/index.html#_unbundled
What would be a good alternative for less huge datasets?
Although it can be distributed, setting it up is trivial enough to be appealing in single machine configurations.
Altho it can sync across machines and backup to S3, so only a subset of your data needs to be loaded on the machine at any given time.
The Internet Archive and others use it in production.
A Write Ahead Log is an implementation detail of a distributed system, whereby the system has a log of actions it applies against a state machine. Protocols, such as Raft, exist to keep the log in sync, and the state machine is kept in sync as a consequence. The log entries would be quite abstract and low-level, like "tuple inserted".
An Event Log, on the other hand, is an application level architecture technique. The log entries would be application-specific actions, like "user logged in".
https://en.m.wikipedia.org/wiki/BEAM_(Erlang_virtual_machine...