簡體   English   中英

同時具有levelDB數據庫的多個實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM