a novel approach to a database
Branch: develop
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



A NoSQL Schemaless Relational Key-Structure Store

Have a look at the transcribed talk.

sfDB5 has three main inspirations:

  • Inspiration I: Data Dependent Queries

    Solve recursion. In other words, instead of you recursing client-side and fetching data over and over again, you can just send the server a path string (similar to C's memory access syntax) and it'll do the recursion within the cluster. This is not only faster but is also (IMHO) easier to do.

  • Inspiration II: Ease of Use

    Three of the top NoSQL databases today aren't as easy to use as a database should be. One isn't exactly trivial to administer, another requires you to learn a query language (isn't that part of what we wanted to escape with NoSQL?), and the final one requires you to do manual parsing.

    sfDB5 should have everything necessary in the box. Cluster administration is just adding and removing servers - sfDB5 will take care of the rest. There's no fancy query language, just simple path strings and standard functions. Parsing isn't a thing either. sfDB5 has its own efficient internal representation, but it'll just spit out a string, blob, integer or float when you ask it for data.

  • Inspiration III: Atomic Operations

    Serverside atomic operations like basic arithmetic, bitwise, and shift operations are quite useful, especially in synchronization. While all sfDB5 operations are atomic, these additional functions can perform as basic synchronization primitives, especially seeing as that sfDB5 does not support external locking.


You will need the following:

  • a Linux or OSX box (after networking is implemented, only Linux will work)
  • GNU coreutils >= 8.9
  • one of the following compilers which support GNU C:
    • gcc >= 4.8.0 (preferable)
    • clang >= 3.5.0
  • a working copy of git >= 1.8.5
  • GNU make >= 3.8
  • premake4


Here's how you go about it; please ensure that your output looks somewhat similar to the example output listed below (your results may be slightly different, depending on various factors):

$ git clone https://github.com/haneefmubarak/sfDB5.git
Cloning into 'sfDB5'...
remote: Counting objects: 245, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 245 (delta 4), reused 0 (delta 0)
Receiving objects: 100% (245/245), 38.35 KiB | 0 bytes/s, done.
Resolving deltas: 100% (117/117), done.
Checking connectivity... done.
$ cd sfDB5/src/
$ premake4 gmake
Building configurations...
Running action 'gmake'...
Generating Makefile...
Generating sfDB5.make...
Generating backend.make...
$ make
==== Building backend ====


Linking backend
==== Building sfDB5 ====


Linking sfDB5

sfDB5 does not run as of yet.

Contributing and/or Sponsoring


sfDB5 is inspired by Redis and Couchbase, and is licensed under the MIT license.