While there are many arguments about the value and valuation of Bitcoin, the crypto-currency, there is overall consensus on the importance of the block-chain, which is the technology that underpins all crypto-currencies in this world. The block-chain, as a distributed ledger, is extremely useful as a storage mechanism to replace centralised databases.
You can read more about the differences between the various database types elsewhere.
However, what we were interested in looking at was the ability to tack-on block-chain technology onto existing applications as a replacement for centralised databases. One such project that we have found to be quite interesting is Catena – a distributed database based on a blockchain, accessible using SQL.
As far as I understand it, it’s a proxy for a regular database where the block-chain is used to maintain all the mutable database transactions e.g. INSERT, UPDATE, DELETE. It uses SQLite as the back-end database and provides a PostgreSQL wire-protocol for front-end application integration. This allows applications that rely on existing RDBMS architectures to be migrated to a block-chain based technology.
When joining the network, a new node will replicate the block-chain, and replay all the SQL transactions on its own local SQLite database. Once fully replicated, the local SQLite database will be in the same state as the rest of the distributed databases. Database SELECT queries can be performed directly on the SQLite database, which benefits from all the advantages of having a local embedded RDBMS.
In fact, this proxy methodology can be used to provide block-chain technology onto other applications. It is entirely feasible to plug a block-chain capable HTTP proxy in front of a REST API back-end which intercepts all operations and adds all non-idempotent operations onto the chain. In the same way, new nodes just need to replay the entire block-chain to end up with the present state of the application.
This is something that can be generalised into a reverse-proxy application.
Something to consider.