BedRock is the system that backs Expensify, the expense management company. It had been used for 8 years prior to being launched. It was originally created as an in house solution to the strict database constraints of financial institutions - response time within milliseconds, transaction logging and authentication, and replication of multiple servers.
Multi-version Concurrency Control (MVCC)
Bedrock's synchronization engine is a private distributed general ledger, i.e, a private blockchain. It has an internal table called journal
, which has 3 columns called id
, query
, hash
. Each time a query is committed to the database, a new row is inserted into the journal
. The new row records the query, and calculates the new incremental hash based on the previous row. When a server connects to a cluster, the most recent id
and hash
are broadcasted. If two servers disagree on the the hash
corresponding to the id
, then they know that they have "forked" at some point and stop communicating with each other. A Paxos-based election scheme ensures that only one of the "splits" stands up to the new master.
https://github.com/Expensify/Bedrock
https://github.com/Expensify/Bedrock/tree/master/docs
Expensify
2016