MDB_NOLOCK如开放() apidoc中所述:
MDB_NOLOCK不要做任何锁定。如果预期并发访问,则调用方必须管理所有并发性本身。为了进行正确的操作,调用方必须执行单写器语义,并且必须确保在编写器处于活动状态时,没有任何读取器正在使用旧事务。最简单的方法是使用独占锁,以便在作者开始时没有任何阅读器处于活动状态。
MDB_NOLOCK打开的环境中,如果客户端应用程序在域中计算,两个写事务打算将RW发送到lmdb环境中任何地方的相互排斥的密钥集,并且只同时发送此类事务,该怎么办?会出什么问题呢?发布于 2020-04-30 16:39:42
发布于 2022-10-27 22:09:01
我将假设,写入预先存在的键的值部分并不会修改b树,因为您没有修改键。因此,道格·霍伊特( Doug )的评论站在什么位置,除了可能的第3点:
因此,只要您能够保证在并发写入期间永远不会修改、添加或删除任何键,就可以使用MDB_NOLOCK并发写入。
发布于 2022-11-20 15:38:12
根据经验,我可以说,使用MDB_NO_LOCK (或lock=False中的lock=False)打开LMDB,简单地修改预先存在的键的值,甚至只添加新的键/值,似乎效果很好。即使LMDB本身安装在NFS上,就像中型一样,并从不同的机器上查询。
@Doug -我希望更多地了解具体情况可能导致崩溃或腐败的具体情况。在我的例子中,有许多对同一个DB的短期小类型的写操作。
https://stackoverflow.com/questions/59808064
复制相似问题