微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Berkeley DB 在写操作时会锁定整个数据库吗?

如何解决Berkeley DB 在写操作时会锁定整个数据库吗?

我正在研究嵌入式数据库。 我知道 sqlite 在处理写操作时必须锁定整个数据库。操作完成后,DB 自动释放锁。

我对 Berkeley DB 有同样的疑问(我阅读了 Berkeley 文档,但没有找到结论)。 所以我的问题很简单:在写操作时,Dose Berkeley DB 锁定整个数据库,还是仅锁定某个表?

非常感谢!

解决方法

简短的回答是:不,BerkeleyDB 不必锁定整个数据库。虽然锁定的细节因访问方法而异(有关更多信息,请参见此处 https://web.stanford.edu/class/cs276a/projects/docs/berkeleydb/ref/lock/am_conv.html),但 BerkeleyDB 的锁定几乎适用于数据库中的每个结构,例如页面和记录以及整个事物。

另请注意,BerkeleyDB 不是关系型数据库,因此无论如何都没有要锁定的“表”。

对于使用 BTREE 访问方法在正确配置的应用程序中对记录进行就地记录更新之类的事情,它可能只锁定包含该记录的数据库页面。有时,记录插入或删除(或改变记录大小的更新)会导致树的结构变化,包括从记录所在的叶子“向上”锁定一个或多个索引页。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。