我有一个项目,使用BerkelyDB作为高达数亿小记录的键值存储。所有的值都被插入到数据库中,然后使用单个线程进行顺序和随机访问迭代。
使用BerkeleyDB,我可以创建“永不打算在磁盘上保留”的内存数据库。如果数据库足够小以适应BerkeleyDB缓存,则永远不会写入磁盘。如果它比缓存大,则会创建一个临时文件来保存溢出。这个选项可以显著加速,因为它防止我的应用程序在关闭数据库时将几GB的死数据写入磁盘。
我发现即使在SSD上,BerkeleyDB的写入性能也太差了,所以我想转换到LMDB。但是,根据文档,似乎没有创建非持久数据库的选项。
如果我完全不关心持久性或并发访问,想要 LMDB 的最佳性能配置/组合是什么?即使它像一个“内存数据库”一样,具有临时备份磁盘存储的功能?
使用BerkeleyDB,我可以创建“永不打算在磁盘上保留”的内存数据库。如果数据库足够小以适应BerkeleyDB缓存,则永远不会写入磁盘。如果它比缓存大,则会创建一个临时文件来保存溢出。这个选项可以显著加速,因为它防止我的应用程序在关闭数据库时将几GB的死数据写入磁盘。
我发现即使在SSD上,BerkeleyDB的写入性能也太差了,所以我想转换到LMDB。但是,根据文档,似乎没有创建非持久数据库的选项。
如果我完全不关心持久性或并发访问,想要 LMDB 的最佳性能配置/组合是什么?即使它像一个“内存数据库”一样,具有临时备份磁盘存储的功能?
close()
会阻塞。来源:http://blog.libtorrent.org/2012/10/asynchronous-disk-io/ 像这些技巧中的所有技巧一样,您需要进行试验以查看它是否适合您。 - Mike Andrews