I have a Pet project were I will be storing a lot of data, that is text based, and I would like to have it versioned like in Git, and in my initial research I end up finding that we can use Git as a database…
What, are you serious!!!
Continuing my search I came today across the Noms Database, that claims to be descendant of the Git version control system:
Noms is a decentralized database philosophically descendant from the Git version control system.
Like Git, Noms is:
- Versioned: By default, all previous versions of the database are retained. You can trivially track how the database evolved to its current state, easily and efficiently compare any two versions, or even rewind and branch from any previous version.
- Synchronizable: Instances of a single Noms database can be disconnected from each other for any amount of time, then later reconcile their changes efficiently and correctly.
Unlike Git, Noms is a database, so it also:
- Primarily stores structured data , not files and directories (see: the Noms type system)
- Scales well to large amounts of data and concurrent clients
- Supports atomic transactions (a single instance of Noms is CP, but Noms is typically run in production backed by S3, in which case it is “effectively CA”)
- Supports efficient indexes (see: Noms prolly-trees)
- Features a flexible query model (see: GraphQL)
A Noms database can reside within a file system or in the cloud:
- The (built-in) NBS
ChunkStoreimplementation provides two back-ends which provide persistence for Noms databases: one for storage in a file system and one for storage in an S3 bucket.
Finally, because Noms is content-addressed, it yields a very pleasant programming model.
Working with Noms is declarative . You don’t
UPDATEexisting data, or
DELETEold data. You simply declare what the data ought to be right now. If you commit the same data twice, it will be deduplicated because of content-addressing. If you commit almost the same data, only the part that is different will be written.
So my question to the community its if anyone is using this type of database in production or even in a pet project?
Or do you know other Git like database alternatives to build a content versioned system?
Note: I know I can just add a column with the version of the content in a normal SQL database, but that is not what I am looking for.