Today I'm pleased to announce that Chronos, my long-term data persistence and versioning project for the JDK, has finally been released in its 1.0.0 version as an open-source project on Github.
What is Chronos?
The Chronos Project started as my PhD project, but eventually turned into a production-ready versioned database during my work at Txture. It offers:
- ChronoDB: A versioned key-value store
- ChronoGraph: A TinkerPop-compliant Graph Database with versioning support
- ChronoSphere: An EMF-compliant model repository
Versioning
Versioning means that every change made to the database will be retained and managed indefinitely. This allows for the ability of time travel through your data and its history, similar to an AS OF
Query in SQL. Chronos employs a smart data storage layout to ensure that the data is not needlessly duplicated on your hard drive, but you can still access it as if it were.
Here's a basic example where we fetch yesterday's data with ChronoGraph:
long yesterday = System.currentTimeMills() - TimeUnit.DAYS.toMillis(1);
try(ChronoGraph txGraph = graph.tx().createThreadedTx(yesterday)){
// txGraph will contain the database state as it was yesterday
Vertex johnDoe = txGraph.traversal().V().has("name", "John Doe").next();
// johnDoe will also have the same state as it did yesterday
}
Branching
In the same way as Chronos offers version control, it also allows for branching in your data, just like you've come to expect it from e.g. Git or SVN:
try(ChronoGraph txGraph = graph.tx().createThreadedTx("my-branch")){
// txGraph now points to branch "my-branch".
// Everything you do here will only be visible on this branch.
}
... and much more!
There's a whole bunch of features included in Chronos, such as:
- full ACID transactions
- secondary indexing
- full & incremental backups
- dateback (a
rebase
-like API)
All in an open-source project. Free for everyone under the aGPL v3.0 license.
Final Words
This project has been very dear to me since its inception, and it will continue to be. I'm proud to release the 1.0.0 version finally as open-source. Visit our Github Repository and give it a star if you think it's interesting :)