开发者

Is there a database with git-like qualities? [closed]

开发者 https://www.devze.com 2022-12-25 09:08 出处:网络
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.

开发者_C百科

Closed 3 years ago.

Improve this question

I'm looking for a database where multiple users can contribute and commit new data; other users can then pull that data into their own database repository, all in a git-like manner. A transcriptional database, if you like; does such a thing exist?

My current thinking is to dump the database to a single file as SQL, but that could well get unwieldy once it is of any size. Another option is to dump the database and use the filesystem, but again it gets unwieldy once of any size.


There's Irmin: https://github.com/mirage/irmin


Currently it's only offered as an OCaml API, but there's future plans for a GraphQL API and a Cap'n'Proto one.

Despite the complex API and the still scarce documentation, it allows you to plug any backend (In-Memory, Unix Filesystem, Git In-Memory and Git On-Disk). Therefore, it runs even on Unikernels and Browsers.


It also offers a bidirectional model where changes on the Git local repository are reflected upon Application State and vice-versa. With the complex API, you can operate on any Git-level:

  • Append-only Blob storage.
  • Transactional/compound Tree layer.
  • Commit layer featuring chain of changes and metadata.
  • Branch/Ref/Tag layer (only-local, but offers also remotes) for mutability.

The immutable store is often associated/regarded for the blobs + trees + commits on documentation.


Due the Content-addressable inherited Git-feature, Irmin allows deduplication and thus, reduced memory-consumption. Some functionally persistent data structures fit perfectly on this database, and the 3-way merge is a novel approach to handle merge conflicts on a CRDT-style.


Answer from: How can I put a database under version control?

I have been looking for the same feature for Postgres (or SQL databases in general) for a while, but I found no tools to be suitable (simple and intuitive) enough. This is probably due to the binary nature of how data is stored. Klonio sounds ideal but looks dead. Noms DB looks interesting (and alive). Also take a look at Irmin (OCaml-based with Git-properties).

Though this doesn't answer the question in that it would work with Postgres, check out the Flur.ee database. It has a "time-travel" feature that allows you to query the data from an arbitrary point in time. I'm guessing it should be able to work with a "branching" model.

This database was recently being developed for blockchain-purposes. Due to the nature of blockchains, the data needs to be recorded in increments, which is exactly how git works. They are targeting an open-source release in Q2 2019.

Because each Fluree database is a blockchain, it stores the entire history of every transaction performed. This is part of how a blockchain ensures that information is immutable and secure.


It's not SQL, but CouchDB supports replicating the database and pushing/pulling changes between users in a way similar to what you describe.

Some more information in the chapter on replication in the O'Reilly CouchDB book.

0

精彩评论

暂无评论...
验证码 换一张
取 消