Hacker News new | ask | show | jobs
by eliomattia 1136 days ago
Really interesting, also diff-based, and 3.5 years in development.

On the homepage I read "An in-memory, distributed, and open-source document graph database". Do you know whether the whole database, including all documents, needs to be in memory, and what happens when the datasets exceed available memory space? Or is it perhaps in-memory per document, one-by-one?

Do you have to create diffs manually with terminusdb (CLI example below from https://terminusdb.com/products/terminusdb/), or can they be detected automatically from, e.g., SQL database tables or files in a folder, similarly to Git monitoring a working directory and committing changes based on its contents?

  # Add more philosophers to new branch
  echo '{ "name": "Plato" }' | terminusdb doc insert admin/philosophers/local/branch/changes
  echo '{ "name": "Aristotle" }' | terminusdb doc insert admin/philosophers/local/branch/changes

  # Look at the difference between branches
  terminusdb diff admin/philosophers --before-commit main --after-commit changes | jq

  # Apply the differences to main
  terminusdb apply admin/philosophers --before-commit main --after-commit changes
1 comments

TerminusDB represents the data using succinct data structures which reduces the required memory substantially over many other representations. Each branch needs to be capable of being loaded into memory completely - but individual revisions are loaded separately.

Diffs can be constructed between two objects, or you can get sets of diffs of objects between commits automatically. You can manually construct diffs and use them to patch branches.

We don't have a conversion tool from SQL database tables, but it's something on my list.