Caffe代码导读(2):LMDB简介
閃電般的內(nèi)存映射型數(shù)據(jù)庫管理(LMDB)
簡介
LMDB是基于二叉樹的數(shù)據(jù)庫管理庫,建模基于伯克利數(shù)據(jù)庫的應(yīng)用程序接口,但做了大幅精簡。整個數(shù)據(jù)庫都是內(nèi)存映射型的,所有數(shù)據(jù)獲取返回數(shù)據(jù)都是直接從映射的內(nèi)存中返回,所以獲取數(shù)據(jù)時沒有malloc或memcpy發(fā)生。因此該數(shù)據(jù)庫仍是非常簡單的,因?yàn)樗恍枰约旱捻撁婢彺鎸?#xff0c;并且非常高效、省內(nèi)存。它在語義上完全符合ACID(原子性、一致性、隔離性、持久性)。當(dāng)內(nèi)存映射為只讀時,數(shù)據(jù)庫完整性不會被應(yīng)用程序的迷失指針寫破壞。
?
該庫也是線程可見的,支持來自多進(jìn)程/線程的并發(fā)讀/寫訪問。數(shù)據(jù)頁使用寫時復(fù)制策略,故沒有活動數(shù)據(jù)頁被覆蓋寫入。這也提供了保護(hù)機(jī)制,經(jīng)歷系統(tǒng)崩潰后不需要特殊恢復(fù)過程。寫入過程為完全串行的;一次只有一個寫會話是活動的,這保證了寫入者不可能死鎖。數(shù)據(jù)庫結(jié)構(gòu)是多個版本,所以讀出者運(yùn)行時不加鎖。寫入這不會阻塞讀出者,讀出者也不會阻塞寫入者。
?
不像其他熟知的數(shù)據(jù)庫機(jī)制(使用寫前會話日志或數(shù)據(jù)僅追加寫),LMDB操作時不需要保持會話。前面兩種都需要周期性地檢查或者壓縮他們的日志或數(shù)據(jù)庫文件,否則會無限增長。LMDB記錄數(shù)據(jù)庫內(nèi)的空頁面,在新的寫入操作時重用他們,所以正常使用時數(shù)據(jù)庫尺寸不會無限增加。
?
內(nèi)存映射可以用作只讀映射或讀寫映射。默認(rèn)為只讀映射,這提供了對破壞完全的免疫力。使用讀寫模式提供了更高的寫性能,但增加了被惡意寫入破壞數(shù)據(jù)庫的可能性。當(dāng)然如果你的應(yīng)用代碼是已知無bug的,那么這不是個嚴(yán)重的問題。
總結(jié)
以上是生活随笔為你收集整理的Caffe代码导读(2):LMDB简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Caffe代码导读(1):Protobu
- 下一篇: Caffe代码导读(4):数据集准备