[elephant-devel] QDBM Support

Ian Eslick eslick at media.mit.edu
Wed Feb 13 15:41:38 UTC 2008


In general, I'm with Henrik on this.  I'd rather see us get Elephant  
to a reasonable degree of feature completeness before we start to add  
more non-lisp datastore functionality.  You can use postmodern for  
licensing purposes and BDB for performance.

The answer to all of this, I think, is having a native lisp version  
that has BDB's performance and no licensing restrictions.  Then  
supporting the other two becomes: Postmodern for a higher degree of  
reliability as well as for distributed systems and BDB for legacy  
reasons.

I have a pretty good idea in my head of what an all-lisp backend  
requires and having one would lay to rest all of these discussions of  
bringing up "yet another backend".  Edi Weitz and I discussed  
collaborating on this, but unfortunately he had some other projects  
that took priority.

Is there a small critical mass of people out there that care enough  
about this that they'd be willing to contribute to such a project?  I  
don't have the time to do it on my own, but if we broke it up into  
small projects over the next handful of months, I don't think it's a  
ton of work.  I can put in a solid chunk of integration work in mid to  
late April.

So what is involved?

The tricky problems I've discovered so far are:
- An efficient model of BTree-like storage for Elephant
   1) BDB-like paged data + explicit page cache + operations over fields
   2) Something more customized?
- Efficient pointer-based indexing (BTtree plus ptrs to data in main  
BTree)
- Performing sorting and searching on serialized data rather than  
having to
   deserialize to sort as in the clsql backend (required to do BTree  
insertions)
- Transaction/logging architecture; how to store transaction data,  
track conflicts, etc.
   (at lisp layer, in page cache ala BDB?)
   multi-thread and multi-process safe?
- locking to enable transactions on all 3 platforms; multi-process safe?
   (Is there a free library that has a C library that does this already,
    I think having a simple library that compensates for some of the  
missing
    features in lisps is fine)

Some additional considerations:
- Do we add support for persistent heap garbage collection?
- Do we want to add supports for large persistent sets?
- Do we want a server mode for N:1 distributed transactions?

This is by no means a trivial design, but I think if we sketched out  
the architecture there are a set of subsystems that could be made  
somewhat independent:
- BTrees and disk storage
- Database maintenance ops: (reconstruct DB from log files, dump db,  
optimize, etc)
- transaction support and logging
- low-level locking library
- online garbage collection

Cheers,
Ian

On Feb 13, 2008, at 10:11 AM, Henrik Hjelte wrote:

> I had never heard of this project, but I it seems that Tokyo Cabinet
> describes itself as fast, has transactions and can handle multiple
> clients which is good. And it has a tcp/ip interface and protocol so
> you wouldn't even need uffi/cffi to interface it from Lisp. Tokyo
> cabinet seems to map to the bdb model good, so it should probably be
> easier to do an interface than the sql interfaces. One observation
> though, do we need yet another backend at this time, there are other
> things to fix first on my personal wishlist.
>
> Henrik
> _______________________________________________
> elephant-devel site list
> elephant-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/elephant-devel




More information about the elephant-devel mailing list