gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:23:22 25 4
gpt4 key购买 nike

标题本来可以写得更好,但无论如何。我想知道是否有任何写入文件的函数,就像数据库的 ACID 属性一样。原因是,我想确保我正在执行的文件写入不会在断电时弄乱和损坏文件。

最佳答案

根据您对文件的具体处理方式和平台,有几种选择:

  • 如果您重复将 blob 从内存序列化到磁盘以保持状态(例如:dhcp 租用文件),如果您使用的是 Posix 系统,则可以将数据写入临时文件并将临时文件“重命名”为您的目标。在 Posix 兼容的系统上,这保证是一个原子操作,甚至文件系统是否被记录都无关紧要。如果您使用的是 Windows 系统,则有一个名为 MoveFileTransacted 的 native 函数您可以通过绑定(bind)使用。但这里的关键概念是,临时文件保护你的数据,如果系统重新启动,最坏的情况是你的文件包含最后一次良好刷新的数据。此选项要求您每次要记录更改时都写出整个文件。对于 dhcp.leases 文件,这对性能影响不大,更大的文件可能会更麻烦。

  • 如果您不断地读写数据位,sqlite3 是您的不二之选——它支持查询组的原子提交,并拥有自己的内部日志。这里需要注意的一件事是,由于锁定数据库、等待数据刷新等的开销,原子提交会变慢。

还有一些其他的事情要考虑——如果你的文件系统是异步挂载的,写操作看起来已经完成,因为 write() 返回了,但它可能还没有被刷新到磁盘。在这种情况下,重命名可以保护您,sqlite3 也可以。

如果您的文件系统是异步挂载的,则可以写入数据并在写入数据之前移动它。所以如果你在 unix 系统上,挂载同步可能是最安全的。不过,这已经达到了“如果失败,人们可能会死”的偏执狂水平。但是,如果它是一个嵌入式系统并且它死了,“如果失败我可能会丢掉工作”也是额外保护的一个很好的合理化。

关于python - Python 中任何与 ACID 在数据库中具有相同安全性的写入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4352106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com