python中任何与ACID具有相同安全性的写函数在数据库中

Var*_*unt 4 python acid

标题本来可以更好,但无论如何。我想知道是否有任何写入文件的功能,例如数据库的ACID属性。原因是,我要确保在电源中断的情况下,文件写入“我正在做”不会弄乱和破坏文件。

syn*_*tel 5

根据您对文件和平台执行的操作,有两种选择:

  • 如果您要从内存到磁盘反复将Blob序列化以维持状态(例如:dhcp租用文件),则在Posix系统上时,可以将数据写入临时文件,并将临时文件“重命名”为目标。在符合Posix的系统上,可以保证这是原子操作,即使文件系统是否已记录日志也无关紧要。如果您使用的是Windows系统,则有一个名为MoveFileTransacted的本机函数也许可以通过绑定来利用。但是这里的关键概念是,临时文件可以保护您的数据,如果系统重新启动,最坏的情况是您的文件包含最新的数据刷新。此选项要求您每次要记录更改时都将整个文件写出。对于dhcp.leases文件,这对性能影响不大,较大的文件可能会变得更麻烦。

  • 如果您一直在读写数据,那么sqlite3是可行的方法-它支持对查询组的原子提交,并且拥有自己的内部日志。这里要注意的一件事是,由于锁定数据库,等待数据刷新等开销,原子提交会变慢。

需要考虑的其他几件事-如果您的文件系统是异步安装的,则由于write()返回,写操作似乎已完成,但可能尚未刷新到磁盘。在这种情况下,重命名可以保护您,sqlite3也可以。

如果您的文件系统是异步安装的,则可以在写入数据之前写入数据并移动它。因此,如果您使用的是Unix系统,安装同步可能是最安全的。那是在“ 如果失败人们可能会死 ”的偏执狂。但是,如果它是嵌入式系统并且死了,“如果失败了,我可能会失去工作”,这也是获得额外保护的良好理由。