2

すでに毎日多数のアクセスがあるニュースポータルを再構築しています。このサイトを再構築する際の主な懸念事項の 1 つは、パフォーマンスと速度を最大化することでした。

そうは言っても、速度を確保するために、キャッシングからその他のあらゆる種類の対策まで、多くのことを行いました。

プロジェクトの終わりに向けて、パフォーマンスへの影響が最も少ないサイト設定をどこに保存するかというジレンマを抱えています。

サイト設定には、ドメイン、DefaultImgPath、Google アナリティクス コード、編集者のデフォルトの電子メール、および特定の DIV の背景色やリンクのデフォルト色などのより動的なデザイン/表示機能の設定などが含まれます。

私の知る限り、これらすべての情報を保存するには 4 つの選択肢があります。

データベース:一般的な設定をDBに保存してキャッシュすることは解決策かもしれませんが、データベースへのアクセスをプロジェクトの必要不可欠な機能のみに制限したいと思います。 .

XML : これらの設定を XML ファイルに保存することはできますが、この種のことを以前に行ったことがないため、今後どのような問題に直面する可能性があるかはわかりません。

CONFIG : これらの設定を web.config に保存することもできます

CLASS FILE : これらすべての設定を 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 ソリューションを使用します。

私の意見の理由は、データベースを使用すると、すべての構成変更に関するメタ情報を保存できるからです。たとえば、次の情報を保存するとよいでしょう。

  • 誰が変更を行ったのか
  • 変更内容 (古い値、新しい値)
  • 変更が行われたのはいつですか
  • 変更が「アクティブ」かどうか

これにより、あなたやサイト管理者、または構成を壊してしまった場合に、サイトを以前の構成状態に簡単に復元できます。サイトが機能していたことがわかっている時間の後に行われたすべての変更を無効にし、キャッシュをフラッシュするだけです。

私が言いたいことを明確にするために:構成名が主キー/一意であるdbテーブルはありません。代わりに、代理キーを用意し、構成設定が変更されるたびに行を追加します。キャッシュ バージョンは、構成キーごとに常に最新のアクティブな値を保持します。したがって、設定を変更するときは、それを新しいレコードとしてデータベースに送信し、キャッシュを更新します。

他の選択肢について:

サイト管理者が web.config ファイルを変更することは許可しません。それはただトラブルを求めているだけです。

SiteSettings クラス ファイルを使用しても、少なくともハード コードされた値ではうまく機能しません。サーバーの再起動後も変更がアクティブなままになるように変更を保存する場合は、その変更を別の場所に保存する必要があります。

カスタム Xml ファイル (または通常は何らかのファイル) を使用するとうまくいく可能性があります。このファイルには、データベース バージョンに含めることを提案したのと同じ情報が含まれている可能性があります。ただし、同時編集の可能性を処理するには、さらに注意が必要です。

したがって、私の意見では、db に保存するのがおそらく最も簡単で信頼できる方法になるでしょう。

編集:私の回答では、構成の更新を行うことができるある種のインターフェースがあると想定しています。つまり、アプリケーションを再起動することなく、「その場で」更新できるはずだと思います。これが当てはまらず、conf データを更新するための特定のインターフェイスがない場合、データベース バージョンは実現可能性が低い可能性があります。

編集 2 : キャッシュを操作するために、1 つまたはいくつかのクラスを作成します。ConfSettingsおそらく、初期化してキャッシュに保存できる名前付きプロパティを持つ1つのクラス(おそらく)を作成します(キャッシュは広く定義されています-Asp.Netサーバーキャッシュ、アプリケーションスコープ、静的クラスなどに保存されます)。ConfSettingsManagerそして、キャッシュされたオブジェクトにアクセスし、更新を保存し、キャッシュされたオブジェクトをフラッシュするための1つのクラス(または同様のもの)。

于 2012-06-29T09:03:17.250 に答える