【发布时间】:2020-01-19 07:31:12
【问题描述】:
MDB_NOLOCK 如mdb_env_open() apidoc 所述:
MDB_NOLOCK 不进行任何锁定。如果预期并发访问,调用者必须自己管理所有并发。为了正确操作,调用者必须强制执行单一写入者语义,并且必须确保在写入者处于活动状态时没有读取者正在使用旧事务。最简单的方法是使用排他锁,这样当写入器开始时,根本没有读取器处于活动状态。
- 如果 RW txnA 打算修改一组密钥,而该组密钥与另一个 RW txnB 打算修改的另一组密钥没有共同的密钥,该怎么办?不能同时发送吗?
- 对于这种情况,单作者语义不是浪费吗?由于一个 txn 正在等待前一个完成,即使它们打算在 lmdb 环境中的完全独立的区域中运行。
- 在使用
MDB_NOLOCK打开的环境中,如果客户端应用程序在域中计算,两个写入事务打算在 lmdb 环境中的任何位置写入互斥密钥集,并且无论如何都只同时发送此类事务,该怎么办?会出什么问题? - 这样的并发写入能否随内核线性扩展?喜欢RO txns吗?假设应用能够按照 3 中所述的方式管理这些并发写入。
【问题讨论】:
标签: lmdb