如何将文件系统视为数据库?

时间:2012-12-13 10:45:45

标签: .net ado.net

我正在开始一个新项目,我对数据有一个限制。基本上,“数据”实际上是一组以明确定义的层次结构组织的文件。

客户希望能够使用Windows文件资源管理器访问这些文件,同时还在程序中加载数据以获得信息的精确视图。该程序将加载文件,解析它们并提取所需的信息。它应该能够对文件执行某种查询(修改的最后日期,大小,某种类型的所有文件)

我的问题是能够将这两种观点结合起来。

我的第一个想法是使用包含路径的数据库和有关文件的一些元数据来备份文件系统...... 但是,如果有任何类型的文件系统抽象来实现这种事情,我就会徘徊?或者我可以使用基于文档的数据库?

基本上我想尽量少处理文件系统(但也许我不应该)

希望这不是太模糊...... 感谢。

1 个答案:

答案 0 :(得分:2)

听起来更像是架构问题。

我建议在表示层和数据源之间使用抽象层,以避免耦合到实际文件。为文件访问和数据库访问建立公共接口。您的应用程序不需要知道它是处理文件或数据库数据,还是需要在将来的更改中可能需要的其他来源。在这里实现存储库设计模式应该很有用。

此外,我建议使用完全独立于底层文件/数据库结构的通用数据访问对象,这样您就可以尝试不同的数据访问方式,而无需触及应用程序本身。

对于面向文档的数据库,我没有这个领域的经验。但是,例如RavenDb是一种流行的开源产品,它支持开箱即用的.NET支持,值得一看。

考虑到应用程序以及Windows资源管理器的双重访问,您可能需要考虑使用FileSystemWatcher检查是否有任何文件被更改,然后使用更改的内容更新相应的数据库条目。

如果这是一种可用的方法,当然,在很大程度上取决于数据的更改频率。如果过于频繁地编辑文件,则可能会使DB访问负担过重。您应该尽早查看可能的性能影响。

对于其他想法,我们可能需要更多信息。 但至少这些想法可能会给你一个起点。