11

有没有办法从多个程序访问 levelDB 数据库?是否有某种选项可以将 dababase 以只读方式打开?

现在,当从我得到的程序打开相同的数据库时:

/path/to/dir/with/levelDBdatabase/LOCK: Resource temporarily unavailable

干杯!

4

3 回答 3

15

不幸的是,LevelDB 就是这样设计的,它不允许打开多个数据库实例。所有选项都适用于单个进程,但如果您有多个线程,则可以获取快照并以只读模式对其进行迭代(允许其他线程同时读取/写入底层数据库)。

你想实现一个特定的行为吗?如果是这样,请告诉我们它是什么,我们可能会提供帮助。

于 2012-02-07T14:28:43.377 回答
9

通过让每个进程创建一个自己的目录(例如 $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 数据库,并且进程的多个实例可以同时执行此操作,而无需复制整个数据库。

在这样做之后使用快照访问数据库可能是明智的,以避免意外写入。另外,请记住在该过程结束时删除新目录。

于 2014-05-08T11:25:37.800 回答
4

如果只需要只读权限,每个进程都可以创建LevelDB文件夹的副本

cp -r /path/to/dir/with/levelDBdatabase /path/to/dir/with/levelDBdatabase-copy1

然后,不要使用原始的 ,而是levelDBdatabase使用levelDBdatabase-copy1.
程序完成后,可以安全地删除副本。

于 2014-01-23T18:47:27.940 回答