clj.orcery

Language, Expression and Design

Monday

21

March 2016

adi - data modelling for the ambitious

by Chris Zheng,

I've finally managed to sit down and write out the use cases for all the options available for adi, a project I've been working on and off now for the past 3 years.

The library has been inspired by firebase - to have a simple interface around datomic, and to allow customisable security to the CRUD interface around databases. I wanted to have a backend that empowers the frontend and so a data processing pipeline was built around the query mechanism to enable more declarative hooks into the system:

So what is adi?

  • Document and graph hybrid database.
  • Conversion of relational data to maps and vice-versa
  • Data-centric, declarative CRUD
  • Schema driven validation and processing.
  • Intuitive, simple, expressive.

The key to adi lies the power of the schema. Instead of limiting the programmer, the schema should exhance him/her, much like what a type system does for programmers but without being as restrictive. adi allows for relationships in data to be expressed as schema and then provides methods for smarter, more declarative control over data access.

I would say that the security and query models for adi are much stronger than firebase but it lacks real-time updates. Another novelty is that because the underlying database is not a document datastore, so much more can be accomplished with very little effort. Because of the freedom and flexibility with how data can be inserted and manipulated, it is very easy and intuitive to develop ideas with adi. When the schema, the query, the result and the data are all the same structure, there is flow; and when there is flow, magic happens.

In organisations that I have worked with, there tends to be a very strong resistence to use Datomic in production, however, I've been using this for prototyping my own ideas and it has been used in some cool and very niche projects:

  • clortex - an implementation of the nupic algorithm
  • bkell - maintaining balanced records for business transactions

There is a lot more to be done but I'm pretty happy for the time being. Enjoy!

comments powered by Disqus