From a71e0a81aeadb6a228be1ffa21536727ea866ec0 Mon Sep 17 00:00:00 2001 From: Jeremy Dormitzer Date: Sun, 16 Aug 2020 15:13:12 -0400 Subject: [PATCH] Write unifyDB dev diary #0 --- src/blog/unifydb-dev-diary-0-intro.html.pm | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/blog/unifydb-dev-diary-0-intro.html.pm diff --git a/src/blog/unifydb-dev-diary-0-intro.html.pm b/src/blog/unifydb-dev-diary-0-intro.html.pm new file mode 100644 index 0000000..a1aa969 --- /dev/null +++ b/src/blog/unifydb-dev-diary-0-intro.html.pm @@ -0,0 +1,25 @@ +#lang pollen + +◊(define-meta title "UnifyDB Dev Diary 0: I’m building a database!") +◊(define-meta published "2020-08-09") + +Phew, it’s been a while! Over a year, in fact. And what a wild year! Lots of good things happened: I got married, got a new job that I love, moved to a nice new apartment. Also some not-so-nice things, but since you are all living through 2020 just like me I don’t think I need to go into those. But I have still found some side-project time, and I’d like to start talking about what I’m building. + +So – I’m excited to announce that I’m building a database! I’m calling it unifyDB. It’s going to be a general-purpose database with some pretty interesting properties: + +◊ul{ + ◊li{It maintains a complete history of changes to all entities stored in the database} + ◊li{You can make queries for historical data, e.g. “what did this user record look like last Tuesday?”} + ◊li{Arbitrary metadata can be attached to transactions – for example, you can add an application user ID to every transaction your app makes} + ◊li{Fine-grained access control is built into the database, allowing developers to limit access to particular attributes across all entities} +} + +This is the database that I’ve always wanted – basically, I’m tired of being in meetings where the boss says “who changed this user’s email address?” and everyone just looks at each other and shrugs. + +I’m designing unifyDB to be as modular as possible – I want it to be as easy to run it as a single node on your local machine as it is to run in an autoscaling cluster on your cloud of choice. + +I’ve actually been working on this on and off for over a year. The code lives in ◊link[#:href "https://github.com/unifydb/unifydb" #:target "_blank"]{a GitHub repository}. Fair warning: it’s mostly undocumented and nowhere close to being finished. So far, I’ve written the query engine, the transaction handler, the web server (yes, it has an HTTP interface), and a bunch of underlying infrastructure. So as it currently stands, unifyDB is able to store data (in-memory since I haven’t built the storage layer yet) and issue history-aware queries. I’m in the middle of writing the authentication mechanism. After that, it’s on to the storage layer, then most likely the access control layer. + +I’m going to start publishing monthly development diaries detailing the more interesting aspects of database. I’ll start with a post about the query system implementation sometime in the next couple of weeks. Sound interesting? Follow along ◊link[#:href "https://feedly.com/i/subscription/feed%2Fhttps%3A%2F%2Fjeremydormitzer.com%2Fblog%2Ffeed.xml" #:target "_blank"]{on Feedly} or ◊link[#:href "https://jeremydormitzer.com/blog/feed.xml" #:target "_blank"]{your RSS reader of choice}!. + +In the meantime, if you want to know more about unifyDB or just want to geek out, hit me up ◊link[#:href "https://twitter.com/jeremydormitzer" #:target "_blank"]{on Twitter}. \ No newline at end of file