Jon*_*rop 10 .net c# database f# persistence
我有各种丰富的数据结构(主要是树),我希望将其保存到磁盘,这意味着我不仅要将它们写入磁盘,而且还要保证数据已经完全写入并且能够在断电后继续存在.
其他人似乎设计了将平面数据库表中的丰富数据结构编码为从父节点到子节点的查找表的方法.这有助于针对数据运行SQL查询,但我不需要:我只想保存并加载我的树.
显而易见的解决方案是将所有内容作为blob存储在数据库中:单个条目可能包含长字符串.这是滥用数据库还是推荐的做法?另一种解决方案可能是使用XML数据库?我应该考虑使用数据库的替代方案吗?
最后,我是用F#做的,所以从.NET继承数据的交钥匙解决方案是理想的......
编辑:请注意格式化(例如序列化)是无关紧要的,因为我可以通过F#轻松转换格式.这是关于确认写入已经完成到非易失性存储(即磁盘盘片)并且写入数据的任何部分仍然保留在易失性存储(例如RAM高速缓存)中,以便我可以继续保持这种知识的安全性(例如,通过从磁盘中删除旧版本的数据).
Gav*_*ock 10
.NET的FileStream类的一些构造函数采用FileOptions类型的参数.FileOptions的一个值是WriteThrough,它"表示系统应该通过任何中间缓存写入并直接转到磁盘".
这应该确保在您的写入操作(到新文件)返回时,数据被提交到磁盘,您可以安全地删除旧文件.