Python讀寫LMDB檔案
LMDB的全稱是Lightning Memory-Mapped Database,它的檔案結構簡單,包含一個資料檔案和一個鎖檔案。
LMDB檔案可以同時由多個程序打開,具有極高的資料存取速度,通路簡單,不需要運作單獨的資料庫管理程序,隻要在通路資料的代碼裡引用LMDB庫,通路時給檔案路徑即可。
讓系統通路大量小檔案的開銷很大,而LMDB使用記憶體映射的方式通路檔案,使得檔案内尋址的開銷非常小,使用指針運算就能實作。資料庫單檔案還能減少資料集複制/傳輸過程的開銷。
在python中使用lmdb: linux中,可以使用指令‘pip install lmdb’ 安裝lmdb包。
1. 生成一個空的lmdb資料庫檔案
import lmdb
# 如果train檔案夾下沒有data.mbd或lock.mdb檔案,則會生成一個空的,如果有,不會覆寫
# map_size定義最大儲存容量,機關是kb,以下定義1TB容量
env = lmdb.open("./train",map_size=1099511627776)
env.close()
2. LMDB資料的添加、修改、删除
import lmdb
# map_size定義最大儲存容量,機關是kb,以下定義1TB容量
env = lmdb.open("./train", map_size=1099511627776)
txn = env.begin(write=True)
# 添加資料和鍵值
txn.put(key = '1', value = 'aaa')
txn.put(key = '2', value = 'bbb')
txn.put(key = '3', value = 'ccc')
# 通過鍵值删除資料
txn.delete(key = '1')
# 修改資料
txn.put(key = '3', value = 'ddd')
# 通過commit()函數送出更改
txn.commit()
env.close()
3. 查詢lmdb資料庫内容
import lmdb
env = lmdb.open("./train")
# 參數write設定為True才可以寫入
txn = env.begin(write=True)
############################################添加、修改、删除資料
# 添加資料和鍵值
txn.put(key = '1', value = 'aaa')
txn.put(key = '2', value = 'bbb')
txn.put(key = '3', value = 'ccc')
# 通過鍵值删除資料
txn.delete(key = '1')
# 修改資料
txn.put(key = '3', value = 'ddd')
# 通過commit()函數送出更改
txn.commit()
############################################查詢lmdb資料
txn = env.begin()
# get函數通過鍵值查詢資料
print txn.get(str(2))
# 通過cursor()周遊所有資料和鍵值
for key, value in txn.cursor():
print (key, value)
############################################
env.close()
4. 讀取已有lmdb檔案内容
import lmdb
env_db = lmdb.Environment('trainC')
# env_db = lmdb.open("./trainC")
txn = env_db.begin()
# get函數通過鍵值查詢資料,如果要查詢的鍵值沒有對應資料,則輸出None
print txn.get(str(200))
for key, value in txn.cursor(): #周遊
print (key, value)
env_db.close()