问题描述
我正在测试来自 dbm 模块的 gdbm 数据库。打开它有两个子模式f
、s
。我最感兴趣的是快速模式(f)将所有数据保存在内存中
发现python以某种方式刷新了磁盘上的数据。
我已经尝试过 s
模式,但与 f
相比没有发现任何区别。
我做了什么:
蟒蛇 3.8.7
GDBM 版本 1.14.1
- 运行文件事件监控
inotifywait -m --format '%e => %w%f' -e close -e open -e create -e delete -e modify new.gdbm
- 打开数据库
- 添加数据一条记录
- 在循环中添加了许多记录
- 调用了
sync()
- 调用了
close()
我在 s
模式下得到了什么:
In [1]: import dbm.gnu
In [2]: db=dbm.gnu.open('new.gdbm','cs')
In [3]: db['k1']='data'
In [4]: for i in range(10):
...: db[f'{i}'] = 'data'
...:
In [5]: db.sync()
In [6]: db.close()
# all inotify events
# OPEN => new.gdbm
# CLOSE_WRITE,CLOSE => new.gdbm
并使用 f
模式:
In [1]: import dbm.gnu
In [2]: db=dbm.gnu.open('new.gdbm','cf')
In [3]: db['k2']='data'
In [4]: for i in range(200):
...: db[f'f{i}'] = 'data'
...:
In [5]: db.sync()
In [6]: db.close()
# inotify events
# OPEN => new.gdbm
# MODIFY => new.gdbm
# MODIFY => new.gdbm
# MODIFY => new.gdbm
# MODIFY => new.gdbm
# MODIFY => new.gdbm
# MODIFY => new.gdbm
# CLOSE_WRITE,CLOSE => new.gdbm
观察:
当 python 必须同步每个修改(模式)时,它不会这样做。当它必须将数据保存在内存中时,它只会进行同步。同步调用不起作用,在这两种情况下调用 close()
后数据都会刷新到磁盘上。
如何让事情达到正确的行为?我需要将所有数据保存在内存中,甚至在关闭数据库对象时不要将其刷新到磁盘上。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)