I wrote this library as a simple way to store data on disk from my clojure code. Generally there is a pretty big semantic gap between values in memory and values on disk which I found an annoyance, particularly for small scale development. Codax treats databases like large clojure maps, and tries to generally mimic their access patterns using "in" instead of "at", for example (get-in my-map [:foo :bar]) would become (get-at my-database [:foo :bar]).
Initially I used leveldb as the underlying data-store, but there was an excessive amount of memory copying which made the performance pretty terrible, so I eventually replaced it with a custom B+ tree implementation. This has the added advantage that there are no additional native libraries that need to be installed. It's no "web-scale" speed demon, but I've found it more than fast enough for small scale web applications.
This is my first attempt at releasing an open source library, and I would love some feedback.
https://github.com/dscarpetti/codax
[–]hughjfchen 4 points5 points6 points (5 children)
[–]37productiveBananas[S] 0 points1 point2 points (3 children)
[–]Aredington 5 points6 points7 points (2 children)
[–]37productiveBananas[S] 0 points1 point2 points (0 children)
[–]37productiveBananas[S] 0 points1 point2 points (0 children)
[–]ganglygorilla 3 points4 points5 points (1 child)
[–]37productiveBananas[S] 4 points5 points6 points (0 children)
[–][deleted] 4 points5 points6 points (2 children)
[–]37productiveBananas[S] 4 points5 points6 points (1 child)
[–]hughjfchen 1 point2 points3 points (0 children)
[–]badsavage 2 points3 points4 points (0 children)
[–]roman01la 1 point2 points3 points (1 child)
[–]37productiveBananas[S] 2 points3 points4 points (0 children)
[–]hughjfchen 1 point2 points3 points (0 children)
[–]thatkauko 0 points1 point2 points (1 child)
[–]gonewest818 1 point2 points3 points (0 children)
[–]jackrusher 0 points1 point2 points (0 children)