实现事务处理以持久保存应用程序数据

时间:2011-05-27 05:36:09

标签: c# .net vb.net

假设应用程序需要保留大部分不可变数据。假设应用程序的数据文件可能会变得相当大。您将如何实现简单的事务处理,以便成功提交或回滚更改?

唯一的要求是使用内置的.Net库。 (没有数据库,没有第三方库)

这是我目前的解决方案。数据文件将包含三个主要部分:(1)标题,(2)数据,(3)索引。现在,标题部分只包含索引部分开头的偏移量。数据部分将存储大部分不可变数据。索引部分将包含序列化对象,其中包含足以访问数据部分的信息。

当应用程序启动时,它只需要从索引部分反序列化对象。可以根据需要获取数据部分中的任何内容。当应用程序准备好编写更改时,它会生成原始头部和索引部分的临时副本。这些相对于数据部分来说很小。然后将新数据附加到原始数据部分。一旦所有数据都被写入,内存中的对象将被序列化到文件的末尾,成为新的索引部分。

如果所有这一切顺利进行,则可以删除临时文件。如果出现问题,可以使用临时文件将数据文件恢复到其原始状态。

这会有效还是有更优雅的方法?

1 个答案:

答案 0 :(得分:1)

使用the transactional file system on Vista, Windows 7 or Windows 2008会容易得多。它可以在.NET中使用

如何实现这样的事情在很大程度上取决于要求:安全性,隔离级别,回滚和转发功能,实际上您需要详细指定所有ACID属性才能进行设计。这不是值得低估的东西。

我所知道的数据库使用write ahead log方式解决了一些细节问题。

为了能够更好地帮助您,我们需要更具体的细节,或许还有更多理由让您这样做,以便我们能够一起思考。