
Dynalog
I built Dynalog after realizing that I needed a database for the serverless backend for my first Clojure project, Clojure Workout Tracker. I was using Datomic for it previously, but Datomic needs a long-running transaction server, which is of course, not serverless. On top of that, in order to reduce cold start times, I needed to migrate my code to run on the SCI with babashka. However, Datomic is not babashka compatible due to its heavy use of reflection, and as a result I realized I would have to build the tool myself. Dynalog is complete with a transaction and query API and uses DynamoDB with multiple GSIs as its fact store. It implements most of Datomic's syntax and features, such as pull queries. It is fairly quick and can be used for performant serverless applications. Using it, cold starts were reduced from over 10 seconds on the JVM to the ms range with Babashka and holy-lambda.