我正在和Database.LevelDB.Higher一起玩,虽然表演很适合偶尔获取和放置,但对于建立像这样的大型数据库来说并不好:
runCreateLevelDB "mydb" "" $
mapM_ (uncurry put . serialize) bigTable
花费65秒来插入1M小记录。我的猜测是每个put
来电都有一些开销,这就是文档提到这些的原因:
runBatch :: MonadLevelDB m => WriterT WriteBatch m () -> m ()
putB :: MonadLevelDB m => Key -> Value -> WriterT WriteBatch m ()
文档有点神秘,我很难理解这些类型。这尤其不起作用:
runCreateLevelDB "mydb" "" $
runBatch
mapM (uncurry putB . serialize) bigTable
我很惊讶在GitHub上找不到使用Database.LevelDB.Higher
的代码。它似乎是一个强大的工具。
我确实在leveldb-higher本身的测试套件中找到了一个例子。我太近了
runCreateLevelDB "mydb" "" $ do
runBatch $
mapM_ (uncurry putB . serialize) bigTable
但是,这需要59秒。所以也许表现不太好......