unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* [ANN] guile-wiredtiger 0.2
@ 2015-11-06  8:06 Amirouche Boubekki
  0 siblings, 0 replies; only message in thread
From: Amirouche Boubekki @ 2015-11-06  8:06 UTC (permalink / raw)
  To: Guile User

Héllo Guilers!


I'm happy to announce the immediate availability  of guile bindings of 
wiredtiger [0][1] aka. guile-wiredtiger 0.2.

It licensed under GPLv2 or GPLv3.

# Kesako wiredtiger?

At the very core, it's a configurable persistent ordered key/value 
store, column aware, with global transactions.

wiredtiger is a versatile database built by the engineers who created 
Oracle Berkeley Database (formely known as Sleepycat Database and bsddb) 
to be the best of its kind taking advantage of new hardwares.

It's today the database engine of mongodb.

# Installation

wiredtiger does not work on 32 bits architectures.

It was tested with wiredtiger 2.6.2 currently develop branch.

You need to install wiredtiger with the usual cli dance:

   git clone https://github.com/wiredtiger/wiredtiger.git
   cd wiredtiger
   git checkout develop
   ./configure && make && make install

And then clone guile-wiredtiger:

   git clone git@git.framasoft.org:a-guile-mind/guile-wiredtiger.git

There is two modules `wiredtiger.scm` and `wiredtigerz.scm` each of 
which has a documentation file.

The second module `wiredtigerz.scm` provide an extra set of procedures 
to make it easier to work with wiredtiger and simplify common access to 
the database. An example tuple space database can be found in `uav.scm` 
[2], other examples can be found in the example directory. Even if they 
don't work they can give an idea how things can be done...

# Getting started

One of the advantage of wiredtigerz.scm is that it's compatible with raw 
bindings. You can declare a UAV table, create it unconditionally and 
open cursor over it using the following code:

   ;; define table configuration
   (define-public *tuples*
     '(tuples
       ((uid . string) (attribute . string))  ;; key columns
       ((value . string))  ;; value columns
       ()))  ;; empty indices

   ;; open thread safe database connection
   (define connection (connection-open "/tmp/" "create"))

   ;; open session (not thread safe)
   (define session (session-open connection))

   ;; create table (wiredtigerz specific)
   (session-create* session *tuples*)
   (session-close session)  ;; not needed anymore

   ;; create context (wiredtigerz specific)
   (define context (context-open connection *tuples*))

   ;; retrieve cursor (wiredtigerz specific)
   (define cursor (context-ref context 'tuples))

   ;; use cursor with wiredtiger procedures...

Context is thread specific and only opens one kind of cursors for a 
given table specification so it entails a particular way of working with 
the database. In particular it assumes that you don't use the cursor to 
retrieve results lazily... The good news is that you can create the 
database using the declarative configuration and rely on plain 
wiredtiger procedure to do advanced stuff.

Also the above declarative configuration doesn't specify indices with 
projections. If you do declare indices cursors will be opened for them. 
Refer to wiredtigerz.md for more information.


# Changelog

## 0.2

- add handy procedures in wiredtigerz.scm
- rely on wiredtiger packing infrastructure

## 0.1

- initial release

# Roadmap

- add server helpers


[0] http://www.wiredtiger.com/
[1] http://source.wiredtiger.com/2.6.1/index.html
[2] 
https://git.framasoft.org/a-guile-mind/guile-wiredtiger/blob/master/uav.scm

-- 
Amirouche ~ amz3 ~ http://www.hypermove.fr



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2015-11-06  8:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-06  8:06 [ANN] guile-wiredtiger 0.2 Amirouche Boubekki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).