leveldb-haskell-0.1.1: examples/filterpolicy.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Demo filter policy / bloom filter
module Main where
import Control.Monad.IO.Class (liftIO)
import Data.BloomFilter
import Data.BloomFilter.Easy (easyList)
import Data.BloomFilter.Hash (cheapHashes)
import Data.ByteString.Char8 (take)
import Data.Default
import Database.LevelDB
import qualified Data.Serialize as S
builtinBloom :: IO ()
builtinBloom = runResourceT $ do
bloom <- bloomFilter 10
db <- open "/tmp/lvlbloomtest"
defaultOptions { createIfMissing = True
, filterPolicy = Just . Left $ bloom
}
put db def "zzz" "zzz"
put db def "yyy" "yyy"
put db def "xxx" "xxx"
get db def "yyy" >>= liftIO . print
get db def "xxx" >>= liftIO . print
return ()
customFilterPolicy :: IO ()
customFilterPolicy = runResourceT $ do
let create bs = S.encode . bitArrayB $ easyList 0.01 bs
maymatch k bs = False
fp = FilterPolicy
{ fpName = "custom.filter.policy"
, createFilter = create
, keyMayMatch = maymatch
}
db <- open "/tmp/lvlfptest"
defaultOptions { createIfMissing = True
, filterPolicy = Just . Right $ fp
}
put db def "zzz" "zzz"
put db def "yyy" "yyy"
put db def "xxx" "xxx"
get db def "yyy" >>= liftIO . print
get db def "xxx" >>= liftIO . print
return ()
main :: IO ()
main = do
builtinBloom
customFilterPolicy