【发布时间】:2015-04-27 13:24:09
【问题描述】:
我正在开发需要确保其保存到磁盘的数据的一致性的应用。我需要保证数据在转储到磁盘时永远不会损坏。 IE。保存数据时可能会发生重启或应用关闭。
我知道需要完成的步骤: http://blogs.msdn.com/b/adioltean/archive/2005/12/28/507866.aspx
但我想知道是否已经有一个实现允许最好以跨平台的方式实现这一点?我认为 boost::filesystem 保证原子重命名(在 Windows 和 POSIX 上),所以想知道我是否在某处的 boost 中错过了这个功能?谢谢
UPD:我希望 boost::interprocess::message_queue 但是如果进程在添加到队列的过程中被杀死 + 内存映射文件占用磁盘上的最大大小,它只会挂起读取队列无论如何,预计会是最坏的情况。
【问题讨论】:
-
您不能只使用支持事务的 sql 数据库,还是出于某种原因需要在自己的文件中使用它?数据库供应商已经花费了很多精力来保证这种事情。还是你想知道他们使用的算法?
-
@rlb:我不希望仅仅为了序列化非常简单的数据结构而引入额外的依赖。此外,我需要有关损坏的数据条目的信息(即可用于恢复)。因此,我可以看到如何实现这一点(请参阅我帖子中的链接)。用 SQL 观察数据库一致性似乎不是一件容易的事,因为关于损坏条目的简单报告是不够的。
标签: c++ boost filesystems cross-platform transactional