Skip to content

Chronological key/value Database storing based on database-shaped git (core) architecture

License

Notifications You must be signed in to change notification settings

chrondb/chrondb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

chrondb

⚠️ this project is in development ⚠️

Chronological key/value Database storing based on database-shaped git (core) architecture

we are:

  • Immutable and atomic data
  • ACID transactions
  • Schemaless
  • Chronological
  • SQL compliance - in query within document

Understand how and when changes were made. chrondb stores all history, and lets you query against any point in time.

Git structure is a powerful solution for storing "data" (files) in chronological order, chrondb uses git core as a data structure to structure the data timeline, making it possible to return to any necessary point and bringing all git functions for a database:

Term alignment, from database to git

The goal is to speak the same language as the database world

  • database: git repository (local or remotely)
  • scheme: git branch
  • table: directory added on git repository
  • field struct: json (document) - will be persisted in a file and indexed in lucene

Features

  • Historic change with chronological evolution - aka git commits (gpg signature support)
  • Document - schemeless
  • Gzip compress content - when there's need for a very fast compression, gzip is the clear winner, benchmark
  • Search and Full Text Search (by lucene)
  • Sorting by any field
  • Flexible faceting, highlighting, joins and result grouping
  • Cross-Platform Solution - Linux, *BSD, macOS and Windows
  • Transactions - git merge after temp branch save
  • Cluster - multi git repository (regardless of location)
  • High availability
  • Plugable/Expandable (possibility of integration with tools that connects in git repository, e.g. jenkins)
  • Triggers by events via hooks (pre-receive, update and post-receive)
    • Data replication - post-receive

Communication Protocol

  • Clojure package
  • ODBC/JDBC - SQL Compliance
  • RESTful and/or GraphQL

Problems

Development

Dependencies

Access REPL

clj

Require the namespace and run

In the following example, it's being imported the chrondb.api namespace; creting a database in a local test atom and commiting two changes.

Those values are just tests, there's nothing being written to GIT yet at this moment.

user=> (require '[chrondb.api :as api])
nil
user=> (api/create-database "test")
{:test {:main {}}}
user=> (api/commit {:repository :test :branch :main :message "commit message" :key :a :value :b})
{:test {:main {"UFGBTUAIBP" ({:data {:a :b}, :message "commit message"})}}}
user=> (api/commit {:repository :test :branch :main :message "commit message" :key :a :value :b})
{:test {:main {"UFGBTUAIBP" ({:data {:a :b}, :message "commit message"}), "CNNJCMTDEK" ({:data {:a :b}, :message "commit message"})}}}

Important: If you want to check our Roadmap, check our announcement regards the project development plans. We are in Phase one.

About

Chronological key/value Database storing based on database-shaped git (core) architecture

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •