
Graham Fawcett ha scritto:
On Wed, Sep 24, 2008 at 5:17 PM, Manlio Perillo
wrote: Hi.
I need a simple, concurrent safe, database, written in Haskell. A database with the interface of Data.Map would be great, since what I need to to is atomically increment some integer values, and I would like to avoid to use SQLite.
If that's the entire requirement, and you're looking for something really fast, perhaps you could use a shared-memory region between the processes (your keys would map to addresses in shared memory), and use a compare-and-set algorithm to handle the atomic increments.
If you're on Intel/Itanium, I believe there's a CMPXCHG instruction that will do atomic compare-and-set on a memory address, and I'm not sure you could get much faster than that. :-)
I have an early draft of this type of database (written in D). Operations on integers use CMPXCHG, and for other operations a simple spin lock (implemented following the implementation in Nginx) is used. The problem is that it is a simple shared array! This means that you need to know in advance the data index in the array; for some type of applications this is true, I was trying to implement that database for using it in my HTTP Digest authentication implementation (http://hg.mperillo.ath.cx/wsgix/file/tip/wsgix/auth/auth_digest.py), in order to improve security, using "not so restful" support in the RFC 2617.
Graham
Manlio Perillo