如mdb_env_open() apidoc中所述为MDB_NOLOCK:
MDB_NOLOCK不执行任何锁定。如果预计会进行并发访问,则调用方必须自行管理所有并发。为了进行适当的操作,调用者必须执行单写者语义,并且必须确保在写者处于活动状态时,没有任何读者在使用旧事务。最简单的方法是使用排他锁,以便在编写者开始时根本没有任何读者处于活动状态。
MDB_NOLOCK
打开的环境中,如果客户端应用程序在域中进行计算,那么打算在lmdb环境中的任意位置将两个写事务打算读写互斥的密钥集,并且无论如何只能同时发送此类事务?怎么可能出问题?否,因为修改键/值对还需要修改b树结构,这两个事务会相互冲突。
您应避免在写事务中间进行长时间运行的计算。尝试事先做尽可能多的事情。如果您不能这样做,那么LMDB可能不适合您的应用程序。通常您可以。
非常糟糕的东西。应用程序崩溃和数据库损坏。
写入通常是受IO限制的,无论如何都无法与许多内核一起扩展。您可以使用LMDB的writemap和/或pwrite(2)进行一些非常棘手的操作,但是在这里您可以独自一人。