有没有办法从多个程序访问levelDB数据库?是否有某种选择将dababase打开为只读?
现在,当我从同一个数据库打开程序时,我得到了:
/path/to/dir/with/levelDBdatabase/LOCK: Resource temporarily unavailable
干杯!
答案 0 :(得分:13)
不幸的是,LevelDB是以这种方式设计的,它不允许打开多个数据库实例。所有选项都适用于单个进程,但如果您有多个线程,则可以获取快照并以只读模式对其进行迭代(允许其他线程同时读取/写入底层数据库)。 / p>
您想要实现特定行为吗?如果是这样,请告诉我们它是什么,我们可以提供帮助。
答案 1 :(得分:5)
我能够通过让每个进程创建自己的目录(例如$ HOME / .leveldb / myprogram_myPID)然后执行以下操作在linux中执行此操作:
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数据库,并且该进程的多个实例可以同时执行此操作而无需复制整个数据库。
在执行此操作之后使用快照访问数据库可能是明智之举,以避免意外写入。另外,请记住在进程结束时删除新目录。
答案 2 :(得分:4)
如果您只需要只读访问,则每个进程都可以创建LevelDB文件夹的副本:
cp -r /path/to/dir/with/levelDBdatabase /path/to/dir/with/levelDBdatabase-copy1
然后,使用levelDBdatabase
而不是使用原始levelDBdatabase-copy1
。
程序完成后,可以安全删除副本。