在哪里存储站点设置:DB?.XML?配置?类文件



我正在重建一个新闻门户网站,该门户网站每天都有大量访问量。重建此站点时的主要问题之一是最大限度地提高性能和速度。

话虽如此,我们已经做了很多事情,从缓存到各种其他措施来确保速度。

现在在项目即将结束时,我遇到了一个两难的问题是在哪里存储对性能影响最小的网站设置。

网站设置将包括以下内容:域,默认ImgPath,Google Analytics代码,编辑的默认电子邮件以及更动态的设计/显示功能设置,例如特定DIV的背景颜色和链接的默认颜色等。

据我所知,我有4种选择来存储所有这些信息。

数据库:将常规设置存储在数据库中并缓存它们可能是一种解决方案,但是,我想将对数据库的访问限制为仅对项目的必要和基本功能,这些功能通常是插入/更新/删除新闻项、作者文章等。

XML:我可以将这些设置存储在XML文件中,但我以前没有做过这种事情,所以我不知道将来可能会遇到什么样的问题(如果有的话)。

配置:我还可以将这些设置存储在 web.config 中

类文件:我可以在SiteSettings类中对所有这些设置进行硬编码,但是由于站点管理员本人将能够编辑这些设置,因此这可能不是最佳解决方案。

目前,我更接近选择 web.config,但让人们经常摆弄它是我不想要的。 例如,如果以某种方式,我错过了对某些东西的验证并且它破坏了 web.config,整个网站都会崩溃。

担心的是,我无法预见使用上述任何方法(或者还有其他方法?)的任何可能后果,我希望将这个问题交给更有经验的人,他们希望能帮助我做出决定。

尝试使用此代码(全局参数化变量)

<appSettings>
    <add key="YourKey1" value="Your value 1" />
    <add key="YourKey2" value="Your value 2" />
</appSettings>
And this code for getting ( Add reference to System.Configuration, API configuration )
var yourValue1 = ConfigurationSettings.AppSettings["YourKey1"];
var yourValue2 = ConfigurationSettings.AppSettings["YourKey2"];
在这种情况下,

我会选择Db服务器+缓存解决方案。

我的观点的原因是,使用数据库,您可以存储有关每个配置更改的元信息。例如,存储有关以下内容的信息可能会很好:

  • 谁做了改变
  • 变化是什么(旧值,新值)
  • 何时进行更改
  • 更改是否"有效"

这样,当您或站点管理员或任何设法破坏配置的人时,可以更轻松地将站点还原到以前的配置状态。只需在站点工作一段时间后停用所做的所有更改并刷新缓存即可。

只是为了澄清我的意思:我不会有配置名称为主键/唯一性的数据库表。相反,我会有一个代理键,并在配置设置更改时附加行。缓存版本将始终保存每个配置键的最新活动值。因此,在更改设置时,请将其作为新记录发送到数据库并更新缓存。

关于其他替代方案:

我不允许站点管理员更改 web.config 文件。那只是自找麻烦。

使用

SiteSettings 类文件也不能很好地工作,至少不能使用硬编码值。如果要阻止更改,以便即使在服务器重新启动后它们仍保持活动状态,则仍必须将该更改存储在其他位置。

使用自定义 Xml 文件(或通常是某种文件)可以工作。此文件可能包含我建议您包含在数据库版本中的相同信息。但是为了处理可能的并发编辑,这需要更多的小心。

所以在我看来,存储在 db 中可能是最简单、最可靠的方法。

编辑:我在回答中假设有某种界面可以进行配置更新。也就是说,我假设更新应该可以"动态"进行,而无需重新启动应用程序。如果不是这种情况,并且没有用于更新 conf 数据的特定接口,则数据库版本可能不太可行,因为对于外行来说,手动更新数据库比简单地编辑光盘上的某个位置的文件更困难。

编辑2:我肯定会创建一个或几个类以便与缓存进行交互。可能我会创建一个具有命名属性的类(也许是ConfSettings),这些命名属性可以初始化并存储在缓存中(广泛定义的缓存 - Asp.Net 服务器缓存、应用程序范围、存储在静态类等中)。还有一个类(ConfSettingsManager或类似),用于访问缓存对象、存储更新和刷新缓存对象等。

最新更新