尽管打开模式为 FAST 或 SYNC

问题描述

我正在测试来自 dbm 模块的 gdbm 数据库。打开它有两个子模式fs。我最感兴趣的是快速模式(f)将所有数据保存在内存中

f,以快速模式打开数据库。不会同步写入数据库

发现python以某种方式刷新了磁盘上的数据。
我已经尝试过 s 模式,但与 f 相比没有发现任何区别。

我做了什么
蟒蛇 3.8.7
GDBM 版本 1.14.1

  1. 运行文件事件监控
    inotifywait -m --format '%e => %w%f' -e close -e open -e create -e delete -e modify new.gdbm
  2. 打开数据库
  3. 添加数据一条记录
  4. 在循环中添加了许多记录
  5. 调用sync()
  6. 调用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 (将#修改为@)