我需要对二级存储实现一些原子写入。我怎么能做这个傻瓜证明?
如果我使用File.Open打开一个C#文件句柄,我会收到一个句柄。我可以写一些数据。冲洗并关闭它。但我还是有一些问题。我猜以下陈述是真的吗?
数据可能无法写入磁盘,而是存在于Windows磁盘缓存
数据可能无法写入磁盘,而是存在于HDD缓存中
这将导致以下问题:
断电会使我所保存的文件中的编辑恢复(在像NTFS这样的事务性FS上)
内核恐慌将使我所恢复的文件中的编辑(在像NTFS这样的事务性FS上)
我的假设是否正确?如果是这样,我怎样才能对磁盘进行傻瓜式写入? 我已经看了一下NoSQL并且一直在想可能有一个nosql服务器可以在更接近硬件的情况下与系统通信而不会返回给我软件,直到它可以保证字节写入磁盘。
欢迎所有想法和想法
延
[编辑] 在确定所有更改都写入物理磁盘之前,我可以等待一段特定的时间吗?
答案 0 :(得分:1)
使操作完全“万无一失”的唯一方法是排队,运行操作并确认。事情保持排队,可以再次运行,直到确认,或者如果确认为否定“回滚”。
您正在谈论的时间窗口,假设您不涉及网络(一切都是本地的),非常小。不过,如果你想确保事情,你就排队了。 MSMQ是一种选择。如果数据来自SQL Server,您可以考虑它的排队机制Service Broker(不建议这个方向,但它是一种方式)。
最终,这里的想法很像握手,就像大多数服务器到服务器通信一样。每个人都同意在双方摆脱他们的工作之前完成任务。
答案 1 :(得分:0)
我不是Windows内部的专家,但我相信你是对的。我没有详细测试它,但能够使用MSMQ作为一个非常可靠的存储数据的地方,另一个进程监视队列进行最终处理。