3

I need a data storage system that mimics a simple DB, but can also store the changes history, and support branching.

That is, several data tables (no need to support actual SQL syntax), option to commit arbitrary changes, option to tag the system state, and option to travel between tags.

It should be very close to a simple source control system, such as git for instance. Without merges and etc., just commit changes, put tags, and travel between tags (rollback and fast-forward), and at any moment have the "working copy" which resembles the system state for the specified tag.

I can implement such a data structure myself from the scratch, but I'd prefer to build it over an existing robust implementation, such as DB engine or etc.

Is there a known solution for this?

valdo
  • 12,632
  • 2
  • 37
  • 67
  • 1
    check out this one https://github.com/attic-labs/noms https://thenewstack.io/noms-database-aims-become-git-shared-data/ – Rick_C137 Apr 13 '18 at 09:05
  • @AshishRp: Wow, thanks! This is indeed what I need! Just I need something simpler. Merges are not necessary, and I don't intend to store large amounts of data. But this definitely worth a try. – valdo Apr 13 '18 at 18:25

2 Answers2

1

Here are your options:

  • ArcSDE - ESRI's ArcGIS supports versioning for geodatabases through ArcSDE data layer;
  • Oracle Workspace Manager - feature of Oracle Database, providing high degree of version isolation and data history management;
  • SQL:2011 temporal features, including valid time and transactional time support.
  • Noms - It is a decentralized database philosophically descendant from the Git version control system.
  • Irmin - It is a library for persistent stores with built-in snapshot, branching and reverting mechanisms.

SQL:2011 offers support for "linear" history of edits.

ESRI and Oracle are good candidates, but both have vendor-specific interfaces for manipulating versions.

In Noms, 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.

Abhishek Keshri
  • 3,074
  • 14
  • 31
1

Noms is dead by now unfortunately. Remaining options are:

Irmin comes closest to Noms, but last time I checked inserting data without specifying a path was not yet supported.

See also: How can I put a database under git (version control)?

Tails
  • 636
  • 7
  • 16