【问题标题】:Properly saving XDocument正确保存 XDocument
【发布时间】:2011-06-22 20:57:27
【问题描述】:

我的网站中有一个自定义数据服务,它应该每 10 分钟刷新一次数据,而不会给用户带来任何停机时间。 (asp.net mvc3, mssql 2008, c#)

目前它每 10 分钟刷新一次数据并更新我的数据库 (mssql) 没问题。但问题是,我不想为每个用户请求从数据库中读取数据,而是想在刷新数据后立即将其保存到 XML 文件中,这样用户就可以在没有任何额外的数据库连接或进程的情况下获取它。

因此,将有一个进程重新收集数据并写入 XML,同时大量用户每秒都会请求该 XML。

由于我对文件写入/读取的东西不太了解,我不确定是否应该在写入文件之前锁定文件,因为其他进程可能正在读取它。或者也许没关系,因为只有一个进程正在写入,而其他进程读取/请求它不会产生任何问题?也不确定XDocument的Save功能在写入之前是否已经锁定。

所以,总而言之;当任何其他进程可能正在读取/请求该文件时,如何安全地将我的 XDocument 对象保存到 xml 文件中?

或者我应该只从 Sql 中读取数据(不管每个用户的处理时间和延迟)并返回 XDocument 对象,我猜这会更容易吗?

提前致谢!

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我认为将 XML 写入文件是一个坏主意 - 读回它甚至可能不会比调用数据库更快。相反,我会使用ASP.NET caching infrastructure,即使用Cache 类将数据缓存在内存中——这样会快得多。

    【讨论】:

    • 哦,是的,这很有道理,我在这方面没有经验,所以我完全忘记了它。现在研究一下,谢谢!
    【解决方案2】:

    您有一个经过设计、测试和构建的数据库来向用户提供数据,为什么要从中保存数据并实现您自己的基于文件系统的数据库?

    我认为您提到的最后一个选项是最好的,只需连接到数据库并根据需要将 XML 检索给用户。如果您有高效的查询和可靠的 DataAccessLayer,那么 db 将表现良好。

    【讨论】:

    • 好吧,虽然我已经有一个 sql,但使用 xml 听起来有点奇怪,但我只是认为有比为每个用户读取和处理数据更好的方法,而数据仅每 10 次刷新一次分钟。
    • SQL Server 知道,它内置了自己的缓存系统。.NET Framework 也有连接池,可以非常快地回收和重用刚刚关闭的连接。正如其他所说,您可以使用 ASP.NET 的 Cache 对象并使其每 10 分钟或更短的时间过期,无需执行自定义文件 I/O 来实现您自己的轮子(缓存)
    【解决方案3】:

    另一种选择是使用缓存机制,例如 memcache 或 AppFabric Cache。

    【讨论】:

    • 也谢谢 Eric,但我不得不接受 BrokenGlass 的回答,因为它只是在几秒钟前 :)
    猜你喜欢
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    相关资源
    最近更新 更多