LightningMemory-MappedDatabase(LMDB)是一個軟件庫,它以鍵值存儲的形式提供高性能的嵌入式事務(wù)數(shù)據(jù)庫。LMDB是用C語言編寫的,具有多種編程語言的API綁定。LMDB將任意鍵/數(shù)據(jù)對存儲為字節(jié)數(shù)組,具有基于范圍的搜索功能,支持單個鍵的多個數(shù)據(jù)項,并具有在數(shù)據(jù)庫末尾附加記錄的特殊模式(MDB_APPEND),可提供顯著的寫入性能比其他同類商店增加。LMDB不是關(guān)系數(shù)據(jù)庫,它是嚴(yán)格的鍵值存儲等的BerkeleyDB和dbm。 LMDB也可以使用同時在多線程或多處理環(huán)境中,有讀性能通過設(shè)計線性縮放。LMDB數(shù)據(jù)庫一次只能有一個編寫器,但與許多類似的鍵值數(shù)據(jù)庫不同,寫事務(wù)不會阻止讀者,也不會阻止編寫器。LMDB也很不尋常,因為同一系統(tǒng)上的多個應(yīng)用程序可以同時打開并使用相同的LMDB存儲,作為擴展性能的手段。此外,LMDB不需要事務(wù)日志(從而通過不需要兩次寫入數(shù)據(jù)來提高寫入性能),因為它通過設(shè)計本身維護數(shù)據(jù)完整性。 LMDB內(nèi)部使用B+樹數(shù)據(jù)結(jié)構(gòu)。其設(shè)計效率和占用空間小,同時具有提供良好寫入性能的意外副作用。LMDB有一個類似于BerkeleyDB和dbm的API。LMDB將計算機的內(nèi)存視為單個地址空間,使用具有寫時復(fù)制語義的共享內(nèi)存在多個進程或線程之間共享(歷史上稱為單級存儲)。 ? 由于大多數(shù)以前的現(xiàn)代計算體系結(jié)構(gòu)具有32位內(nèi)存地址空間限制,這對使用此類技術(shù)的任何數(shù)據(jù)庫的大小施加了4GB的硬限制,因此將數(shù)據(jù)庫直接映射到單級存儲的技術(shù)的有效性嚴(yán)格限制。然而,今天的64位處理器現(xiàn)在主要實現(xiàn)48位地址空間,允許訪問47位地址或128TB的數(shù)據(jù)庫大小,使得使用共享內(nèi)存的數(shù)據(jù)庫在實際應(yīng)用程序中再次有用。(歡迎轉(zhuǎn)載分享) |
|