我正在重建一个新闻门户网站,每天都有大量的访问量。重建此站点时的主要问题之一是最大限度地提高性能和速度。
话虽如此,我们已经做了很多事情,从缓存到各种其他措施,以确保速度。
现在,在项目结束时,我遇到了在哪里存储我的网站设置最不会影响性能的两难选择。
网站设置包括以下内容:域名,DefaultImgPath,Google Analytics代码,编辑器的默认电子邮件以及更多动态设计/显示功能设置,例如特定DIV的背景颜色和链接的默认颜色等。
据我所知,我有4个选择存储所有这些信息。
数据库: 在DB中存储常规设置并缓存它们可能是一个解决方案,但是,我想限制对数据库的访问仅限于项目的必要和基本功能,通常是插入/更新/删除新闻项目,作者文章等。< / p>
XML : 我可以将这些设置存储在XML文件中,但我之前没有做过这种事情,因此我不知道将来会遇到什么样的问题。
CONFIG : 我也可以将这些设置存储在web.config
中CLASS FILE : 我可以在SiteSettings类中对所有这些设置进行硬编码,但由于站点管理员本身可以编辑这些设置,因此它可能不是最佳解决方案。
目前,我更接近选择web.config,但让人们经常摆弄它是我不想要的东西。例如。如果不知何故,我错过了某些事情的验证,它打破了web.config,整个网站都会崩溃。
我的担心基本上是,我不能预见使用上述任何方法的任何可能后果(或者还有其他任何方法?),我希望将这个问题提交给更有经验的人,他们希望能帮助我决策。
答案 0 :(得分: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"];
答案 1 :(得分:1)
在这种情况下,我会选择Db Server + Cache解决方案。
我的意见是,使用数据库,您可以存储有关每个配置更改的元信息。例如,存储关于以下内容的信息可能会很好:
当您或站点管理员或任何设法破坏配置时,可以更轻松地将站点还原到以前的配置状态。只需停用在网站工作的某个已知时间之后完成的所有更改并刷新缓存。
只是为了澄清我的意思:我不会有一个db表,其中配置名称是主键/唯一。相反,我会有一个代理键,并在配置设置更改时附加行。缓存版本将始终保持每个配置密钥的最新活动值。因此,在更改设置时,将其作为新记录发送到数据库并更新缓存。
关于其他替代方案:
我不允许网站管理员更改web.config文件。那只是在惹麻烦。
使用SiteSettings类文件也不会很好,至少不能使用硬编码值。如果更改将被保留,以便即使在服务器重新启动后它们仍然保持活动状态,您仍然必须将该更改存储在其他位置。
使用自定义Xml文件(或通常是某种文件)可以正常工作。此文件可能包含我建议您包含在数据库版本中的相同信息。但是为了处理可能的并发编辑,需要更多的关注。
所以在我看来,在db中存储可能是最简单,最可靠的方式。
编辑:我在答案中假设存在某种可以进行配置更新的界面。也就是说,我认为更新应该可以“在运行中”进行,而无需重新启动应用程序。如果不是这种情况,并且没有用于更新conf数据的特定接口,则数据库版本可能不太可行,因为对于外行来说,手动更新数据库比仅仅在光盘上某处编辑文件更困难。
编辑2 :我肯定会创建一个或几个类,以便与缓存进行交互。可能我会创建一个具有命名属性的类(可能ConfSettings
),可以将其初始化并存储在缓存中(广泛定义缓存 - Asp.Net服务器缓存,应用程序范围,存储在静态类中等)。还有一个类(ConfSettingsManager
或类似的)用于访问缓存对象,存储更新和刷新缓存对象等。