asp.net - 在 ASP.NET 站点中正确使用基于 xml 文件的存储作为数据库替代方案

标签 asp.net xml .net-3.5 linq-to-xml

我正在构建一个小型应用程序,为了减少托管成本和依赖性,我计划将所有持久数据存储到 xml 文件而不是 Sql Server 数据库。

在这种情况下,网站受众仅限于 friend 和家人 - 预计并发用户不会超过几个,因此网站不需要进行扩展。在所有事务中从磁盘上逐字打开和关闭 xml 文件是否可行?一个页面最多可能会显示几个 xml 文件中的数据,有时用户会执行需要更新一个文件的操作。

例如,大致遵循用于获取和保存“事物”的存储库模式,一些方法如下:

    public IEnumerable<Thing> GetThings() {
        XElement xml = XElement.Load(_xmlRepositoryPath);
        var q = from s in xml.Descendants("Thing")
                select new Thing {
                    //set properties...
                };

        return q;
    }

    public void SaveThing(Thing t) {
        XElement xml = XElement.Load(_xmlRepositoryPath);
        //update xml...
        xml.Save(_xmlRepositoryPath);
    }

这种方法有什么陷阱或问题吗?我宁愿避免添加额外的缓存或内存数据层带来的额外复杂性。额外加分:在用户负载或交易级别的什么情况下,您认为需要以不同的方式实现?

最佳答案

数据库将提供的主要内容(文件系统不会提供)是[原子性]( http://en.wikipedia.org/wiki/Atomicity_(database_systems%29) 。 一旦有多个人访问您的 xml 文件,您就需要实现 ReaderWriter 锁,以确保在您尝试更新文件时没有人在读取。这是一个不平凡的问题,但大多数数据库系统都可以解决这个问题。 如果您关心成本,那么有很多开源解决方案。

无论您决定采用哪种解决方案,请确保封装所有数据访问,以便更改它并不那么困难。

关于asp.net - 在 ASP.NET 站点中正确使用基于 xml 文件的存储作为数据库替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1771517/

相关文章:

c# - 中文本地化支持

c# - "TrimEnd()"的意外结果......结果随机太贪婪

javascript - ExtJs 编辑器中的多行文本区域

asp.net - 文本框值未清除

xml - Delphi - 我可以使用 NativeXml 创建规范的 XML 吗?

vb.net - UI线程安全

asp.net - 基于 Web 的高效开发的工具和技术

c# - 访问 gridview 隐藏域

java - Material 设计抽屉导航

javascript - 无法将 YAML 与注释合并