失败安全序列化

时间:2013-12-21 10:32:40

标签: .net serialization protobuf-net

好的,我们会对某些内容进行实现/反序列化,但是当您处理人员重要数据时, 你需要保证100%正确地序列化/反序列化对象。例如,假设您的应用程序在序列化期间被强制关闭时会出现这种情况。在大多数情况下,您将获得损坏的对象,这对我来说是不可接受的,我不知道我可以手动执行文件备份并写入标记,在开始序列化之前lke uncommited并在proccess结束时添加提交的标志,如果在反序列化期间它是uncommited则从备份中获取文件。这不好,因为我必须在每次更改后备份非常大的文件。在.NET Framework或protobuf中的流行序列化器中是否存在一些易损安全逻辑?我找不到任何信息abaut faile安全序列化。 或者你能告诉我一些好的模式如何使序列化错误安全吗?

1 个答案:

答案 0 :(得分:2)

序列化与此无关。您的实际问题是:如何以原子方式将大量数据写入磁盘?以下是一些选项:

  1. 如果数据足够小以适合单个磁盘集群(512字节或4K),请使用FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING在单个写入调用中以原子方式写入单个磁盘扇区。
  2. 使用事务性NTFS以原子方式写入任意数量的数据。
  3. 写入.tmp文件并以原子方式重命名为所需文件名
  4. 使用其他方法实现数据库(甚至可能是SqlLite,Esent,...)或Windows的CLFS等原子性。