我有多种丰富的数据结构(主要是树),我想坚持到磁盘,这意味着我不仅要将它们写入磁盘,而且要保证数据已经被完全写入,并且能够在掉电.
其他人似乎设计了将平面数据库表中的丰富数据结构编码为从父节点到子节点的查找表的方法.这有助于针对数据运行SQL查询,但我不需要这样做:我只想保存并加载我的树.
明显的解决方案是将数据库中的所有内容都存储为一个blob:一个可能包含长字符串的单个条目.是滥用数据库还是推荐做法?另一个解决方案可能是使用XML数据库?我应该考虑的数据库有什么替代品吗?
最后,我正在从F#这样做,所以一个完整的解决方案来保持来自.NET的数据将是理想的…
编辑:请注意,格式化(例如序列化)是无关紧要的,因为我可以使用F#在格式之间进行平凡的转换.这是关于确认写入已经完成一直到非易失性存储(即磁盘盘),并且没有一部分写入的数据仍然被保存在易失性存储器(例如RAM缓存)中,使得我可以继续保持这种知识(例如通过从磁盘中删除旧版本的数据).
解决方法
.NET的FileStream类的一些构造函数使用类型为
FileOptions的参数.FileOptions的一个值为WriteThrough,表示系统应通过任何中间缓存写入,直接转到磁盘.