同时具有levelDB数据库的多个实例

ezd*_*ena 11 database nosql leveldb

有没有办法从几个程序访问levelDB数据库?是否有某种选择将dababase打开为只读?

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

/path/to/dir/with/levelDBdatabase/LOCK: Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud)

干杯!

Kir*_*ril 13

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

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


Rub*_*rgh 5

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

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

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


小智 5

我能够在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
Run Code Online (Sandbox Code Playgroud)

然后$ HOME/.leveldb/myprogram_myPID可以用作只读的leveldb数据库,并且该进程的多个实例可以同时执行此操作而无需复制整个数据库.

在执行此操作之后使用快照来访问数据库可能是明智的,以避免意外写入.此外,请记住在进程结束时删除新目录.

  • 这有帮助......但实际上......像这样的“只读/未提交”访问应该内置到库中。 (2认同)