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是以这种方式设计的,它不允许打开多个数据库实例.所有选项都适用于单个进程,但如果您有多个线程,则可以获得快照并以只读模式对其进行迭代(允许其他线程同时读取/写入底层数据库).
你想实现特定的行为吗?如果是这样,请告诉我们它是什么,我们可以提供帮助.
如果只需要只读访问权限,每个进程都可以创建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数据库,并且该进程的多个实例可以同时执行此操作而无需复制整个数据库.
在执行此操作之后使用快照来访问数据库可能是明智的,以避免意外写入.此外,请记住在进程结束时删除新目录.
| 归档时间: |
|
| 查看次数: |
5977 次 |
| 最近记录: |