0

ASP.NET Web サイトの一部として、ローカリゼーション/テキスト翻訳は、ResX ファイルではなく、SQL データベースに保存されたテキストを使用して処理されます。なぜこのように行われるのかはレガシーにかかっていますが、それは私たちがしていることですが、かなり簡単に変更を加えることができます. テキストは次のようにテーブルに格納されます。

CREATE TABLE [Text](
    [TextID] [int] NOT NULL,
    [LanguageID] [int] NOT NULL,
    [Text] [nvarchar](max) NULL
)
CONSTRAINT [PK_Text] PRIMARY KEY CLUSTERED 
(
    [TextID] ASC,
    [LanguageID] ASC
)

また、Web サイトのコード ビハインドは、選択した言語のテキスト ID を参照して、正しいテキストをラベルなどの HTML 要素に割り当てます。

利用可能なテキストが非常に多く、ページを翻訳するためだけに各ページ要求でデータベースをヒットするのは非常に遅いため、実際に行うことは、アプリケーションの起動時にHttpApplicationStateを使用して、そのテーブル内のすべてのテキストをサーバー メモリにキャッシュすることです。

現在の問題は、いくつかの Web サーバーが負荷分散されているため、静的キャッシュの更新が難しくなっていることです。加えられた変更が表示される前に、アプリケーション プールがリサイクルされるのを待つ必要があります。また、上記のリンクが示唆するように:

...アプリケーション状態で大きなデータ ブロックを格納すると、サーバー メモリがいっぱいになり、サーバーがメモリをディスクにページングする可能性があります。

それで、私が知りたいのは、他にどのような解決策を使用できるかということです? パフォーマンスを向上させるために、このすべてのテキストをキャッシュできる必要がありますが、1 日に 1 回以上定期的に更新できるようにする必要があり、複数のサーバー間でこのキャッシュを管理できる必要もあります。

4

1 に答える 1

1

あなたが探している用語は「分散キャッシュ」です。そのためにGoogleで検索すると、役立つオプションがいくつか見つかります。分散キャッシュの利点:

  1. データはディスクではなく RAM に保存されます。
  2. データは多くのノードに分散され、水平方向にスケーリングできます (ノードを追加するだけです)。
  3. キャッシュは専用のマシンで実行されます。これにより、Web サーバーの負荷が軽減されます。

検討すべきいくつかのテクノロジー:

  1. AppFabric (.NET でうまく動作): http://en.wikipedia.org/wiki/AppFabric#AppFabric_Caching
  2. Memcached: http://memcached.org/
  3. カウチベース: http://www.couchbase.com/

以前に .NET で AppFabric を使用したことがあり、当社では非常にうまく機能しました。必要に応じてノードを追加して拡張するのは簡単でした。

于 2013-04-16T17:28:30.000 に答える