我有一个项目,该项目使用BerkelyDB作为多达数亿条小记录的键值存储。
它的使用方式是将所有值插入数据库,然后使用顺序访问和随机访问对它们进行迭代,所有这些都从单个线程进行。
使用BerkeleyDB,我可以创建“绝不打算保留在磁盘上”的内存数据库。如果数据库足够小以适合BerkeleyDB缓存,则永远不会将其写入磁盘。如果它大于缓存,那么将创建一个临时文件来保存溢出。此选项可以显着加快处理速度,因为它可以防止我的应用程序在关闭数据库时将数十亿字节的无效数据写入磁盘。
我发现即使在SSD上,BerkeleyDB的写入性能也太差,因此我想切换到LMDB。但是,根据文档,似乎没有创建非持久数据库的选项。
如果我根本不关心持久性或并发访问,应该使用哪种配置/选项组合来获得LMDB的最佳性能?即使它像具有临时后备磁盘存储的“内存数据库”一样工作?
只需使用MDB_NOSYNC,就不要自己调用mdb_env_sync()。您还可以另外使用MDB_WRITEMAP。操作系统仍将最终将脏页刷新到磁盘。您可以使用/ proc / sys / vm / dirty_ratio等来控制该行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句