【问题标题】:ASP.NET and storing dynamic data - XML or Database?ASP.NET 和存储动态数据 - XML 还是数据库?
【发布时间】:2010-01-02 18:13:30
【问题描述】:

我有一个 ASP.NET 应用程序,需要存储一些设置。

除其他外,设置是我的应用程序中显示的页面上的标题。标题会定期更改(每周左右),我想知道如何以聪明的方式做到这一点:

  1. 将设置保存在web.config 中(读取时间慢,并且必须重新启动应用程序才能检测更改)。

  2. 将设置保存在数据库中。

  3. 我自己的 XML 文件(例如自己的 XML 文件中的自定义配置部分)。

我正在寻找任何可以为我指明更好方向的东西。

你会怎么做?

【问题讨论】:

  • 是什么让您认为 web.config 的读取时间很慢?

标签: .net asp.net asp.net-3.5 appsettings


【解决方案1】:

web.config 是您存储与应用程序相关的信息的地方,即应用程序离不开的配置。因此,database server name 可以,但page name of the default.aspx 不行。

在我看来,其他两个选项是相同的,只有当管理员更改标题时,在记事本中更新 XML 文件而不是 SQL 服务器中的数据库表更容易(除非你有一个很好的 GUI 来更新它)。

编辑:你不应该害怕web.config 的读取时间很慢——文件只有在你“触摸”它时才会重新加载,也就是说,当文件的“修改”属性发生变化时。

【讨论】:

    【解决方案2】:

    这里有两个问题:

    1. 存储设置。

    2. 存储每个页面上显示的动态值。

    如果您要存储应用程序设置,那么我会使用Custom Configuration Section。它允许您为设置创建有意义的名称,而不是 web.config 使用的 key/value 对方法。您可以将此自定义配置部分粘贴在其自己的 XML 文件中,并在您的 web.config 中引用它。

    如果您要存储动态数据(不是应用程序设置),那么如果您已有数据库,我会使用数据库。

    原因是 web.config 用于保存设置。您可以使用它来保存键/值页面对,但这很麻烦。真正的动态数据应该与任何其他数据库数据一起保存在数据库存储中。您提到了这一点,因此如果这是您要存储的数据类型,那么使用数据库最有意义。页面标题不是应用程序设置,它们是动态数据。如果是本地化数据,那就另当别论了,但你没有给出任何迹象表明它是。

    【讨论】:

      【解决方案3】:

      我会使用数据库。

      正如其他人所说,web.config 仅适用于应用程序级设置。

      XML 文件的一个问题是,如果您决定迁移到负载平衡方案,那么您必须担心如何将该文件从一台服务器复制到另一台服务器。从可扩展性和安全性的角度来看,在 Web 层的文件系统中没有任何应用程序动态数据被认为是最佳实践(如果您希望能够更新文件,这意味着您必须允许您的 Web 应用程序具有写入权限)访问本地文件系统,这是一个安全风险)。

      将它放在数据库中可以让您在应用首次启动时读取一次。然后,您可以使用 SqlDependency 或 SqlCacheDependency 将其全部或部分缓存在内存中,以便代码在 DB 表更改时收到通知(如果必须,您可以对 XML 文件执行类似的操作)。

      利用数据库中的信息,您可以在以后更轻松地添加负载平衡服务器(如果需要),并且您的网络应用程序可以保持只读状态。

      【讨论】:

        【解决方案4】:

        为什么不使用 umbraco 作为您所有网站内容/设置的内容管理系统?

        在您决定集成特定元素之前,Umbraco 位于 asp .net 网站的后台。

        您甚至可以在没有代码/设置更改的情况下安排对页面的更改,因为它们听起来更像是内容元素。

        【讨论】:

        • 为什么要添加另一个 CMS?他有一个自定义站点,他有一个数据库。为什么要尝试使用 CMS 来做一些简单的事情?
        • 原始发帖人表示他的内容会定期更改,并且他正在寻找新的方法来维护看似网站内容的内容。我建议使用 cms 方法,因为在您研究过 umbraco 提供的乳清产品之前,您对于如何创建一个易于使用的 msintainsble 网站一无所知。
        【解决方案5】:

        纯粹基于它们每周左右更改的事实,我会将它们存储在数据库中,并创建一个页面来管理这些值。

        这里有很多因素。需要考虑的一件事是,更改配置设置确实会导致应用程序重新启动,因为 ASP.NET 仅在启动时读取配置设置,然后在此期间缓存它们。不断更改配置文件可能会导致孤立会话等问题。这非常可能,但可能。

        使用服务器上的 xml 文件(不属于 .NET 配置设置的一部分)可以解决此问题,但编辑它更容易出错,并且每次请求都需要读取它。

        创建一个页面来管理这些值是更多的初始工作,但我认为从长远来看它会有所回报。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-05
          • 2018-04-27
          相关资源
          最近更新 更多