pure-cdb-0.1.2: Another pure-haskell CDB (Constant Database) implementation

Copyright(c) Boris Sukholitko 2013
LicenseBSD3
Safe HaskellNone
LanguageHaskell2010

Database.PureCDB

Contents

Description

A library for reading and writing CDB (Constant Database) files.

CDB files are immutable key-value stores, designed for extremely fast and memory-efficient construction and lookup. They can be as large as 4GB, and at no point in their construction or use must all data be loaded into memory. CDB files can contain multiple values for a given key.

For more information on the CDB file format, please see: http://cr.yp.to/cdb.html

Here's how you make new CDB file:

import qualified Data.ByteString.Char8 as B
import Database.PureCDB

makeIt :: IO ()
makeIt = makeCDB (do
      addBS (B.pack "foo") (B.pack "bar")
      addBS (B.pack "foo") (B.pack "baz")) "foo.cdb"

You can later use it as in:

getIt :: IO [ByteString]
getIt = do
      f <- openCDB "foo.cdb"
      bs <- getBS f (B.pack "foo")
      closeCDB "foo.cdb"
      return bs

getIt returns [ "bar", "baz" ] in unspecified order.

Note that pure-cdb works on strict ByteString's only for now.

Synopsis

Writing interface

data WriteCDB m a #

Write context monad transformer.

Instances

MonadTrans WriteCDB # 

Methods

lift :: Monad m => m a -> WriteCDB m a #

Monad m => Monad (WriteCDB m) # 

Methods

(>>=) :: WriteCDB m a -> (a -> WriteCDB m b) -> WriteCDB m b #

(>>) :: WriteCDB m a -> WriteCDB m b -> WriteCDB m b #

return :: a -> WriteCDB m a #

fail :: String -> WriteCDB m a #

Functor m => Functor (WriteCDB m) # 

Methods

fmap :: (a -> b) -> WriteCDB m a -> WriteCDB m b #

(<$) :: a -> WriteCDB m b -> WriteCDB m a #

Monad m => Applicative (WriteCDB m) # 

Methods

pure :: a -> WriteCDB m a #

(<*>) :: WriteCDB m (a -> b) -> WriteCDB m a -> WriteCDB m b #

(*>) :: WriteCDB m a -> WriteCDB m b -> WriteCDB m b #

(<*) :: WriteCDB m a -> WriteCDB m b -> WriteCDB m a #

MonadIO m => MonadIO (WriteCDB m) # 

Methods

liftIO :: IO a -> WriteCDB m a #

makeCDB :: MonadIO m => WriteCDB m a -> FilePath -> m a #

Runs WriteCDB monad transformer to make the database.

addBS :: MonadIO m => ByteString -> ByteString -> WriteCDB m () #

Adds key and value to the CDB database.

Reading interface

data ReadCDB #

Read handle for the database.

openCDB :: FilePath -> IO ReadCDB #

Opens CDB database.

closeCDB :: ReadCDB -> IO () #

Closes the database.

getBS :: ReadCDB -> ByteString -> IO [ByteString] #

Fetches key from the database.