[英]Multiple instances of a levelDB database at the same time
有沒有辦法從幾個程序訪問levelDB數據庫? 是否有某種選擇將dababase打開為只讀?
現在,當從程序中打開相同的數據庫時,我得到:
/path/to/dir/with/levelDBdatabase/LOCK: Resource temporarily unavailable
干杯!
不幸的是,LevelDB是以這種方式設計的,它不允許打開多個數據庫實例。 所有選項都適用於單個進程,但如果您有多個線程,則可以獲得快照並以只讀模式對其進行迭代(允許其他線程同時讀取/寫入底層數據庫)。
你想實現特定的行為嗎? 如果是這樣,請告訴我們它是什么,我們可以提供幫助。
我能夠在linux中通過讓每個進程創建自己的目錄(例如$ HOME / .leveldb / myprogram_myPID)來執行此操作,然后執行以下操作:
ln -s -t $HOME/.leveldb/myprogram_myPID /path/to/dir/with/levelDBdatabase/*
rm $HOME/.leveldb/myprogram_myPID/LOCK
touch $HOME/.leveldb/myprogram_myPID/LOCK
然后$ HOME / .leveldb / myprogram_myPID可以用作只讀的leveldb數據庫,並且該進程的多個實例可以同時執行此操作而無需復制整個數據庫。
在執行此操作之后使用快照來訪問數據庫可能是明智的,以避免意外寫入。 此外,請記住在進程結束時刪除新目錄。
如果您只需要只讀訪問權限 ,則每個進程都可以創建LevelDB文件夾的副本 :
cp -r /path/to/dir/with/levelDBdatabase /path/to/dir/with/levelDBdatabase-copy1
然后,而不是使用原始levelDBdatabase
,使用levelDBdatabase-copy1
。
程序完成后,可以安全刪除副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.