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