2

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

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

现在在项目即将结束时,我在存储对性能影响最小的站点设置方面遇到了两难境地。

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

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

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

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

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

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

目前,我更接近于选择 web.config,但让人们经常摆弄它是我不想要的。例如,如果不知何故,我错过了对某事的验证,并且它破坏了 web.config,整个站点都会崩溃。

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

4

2 回答 2

2

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

<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"];
于 2012-06-29T07:42:31.707 回答
1

在这种情况下,我会选择 Db Server + Cache 解决方案。

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

  • 谁做的改变
  • 变化是什么(旧值,新值)
  • 什么时候做的改变
  • 更改是否“活跃”

当您或站点管理员或任何设法破坏配置的人时,这使得将站点恢复到以前的配置状态变得更加容易。只需在站点工作的某个已知时间后停用所有更改并刷新缓存。

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

关于其他选择:

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

使用 SiteSettings 类文件也不能很好地工作,至少不能使用硬编码值。如果要预先设置更改以便即使在服务器重新启动后它们仍然处于活动状态,那么您仍然必须将该更改存储在其他地方。

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

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

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

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

于 2012-06-29T09:03:17.250 回答