That's a good question. Relaxo is a database designed around immutable, transactional structures where
convenience is more important than
scale. Think of things like comments on a blog, items for sale in a small shop -
https://github.com/ioquatix/financier is an example of an actual project which is in production.
Some things which I personally find useful about Relaxo:
- Easy to move data around, merge and fork data (it's just a git repository).
- Easy to roll back or inspect changes. If you make a mistake, just reset HEAD.
- Easy to backup (guaranteed consistency on disk).
- Better grouping of changes by transactions, which have a description, date, and information about who committed it (can even tie to currently logged in user for a web app, for example).
In theory Relaxo could scale up. Using libgit2 as the backend, it wouldn't be hard to use redis as an object store for git. The git data structure on disk is really just a key-value store with some specific data structures.
The main issue with Relaxo is query performance and indexes. Simple queries like fetching a document is fast. Complex queries including subsets, aggregations, and joins require supporting indexes to work efficiently, and this is something that is hard to build into a pure document storage system. The naive solution is to load all the documents and filter them, which is actually fine until you get a large number of documents (e.g. 1,000+).
However, git does provide one useful guarantee - it will sort directory entries. With this in mind, it's possible to make radix-sorted indexes (e.g. /invoices/by_date/2017/07/). You can use this to do basic indexes, but it's still not as good as a traditional SQL database in this regard.