質問: 私は複数のデータベースに接続する複雑なC#MVC 4ウェブサイトを持っています。すべてのリクエストは、次の手順を実行します。 1. ユーザーがログインしていることを確認し、認証Cookieからユーザー名を取得します。 2. 検索データベースを照会して、クライアントのデータベースの場所を把握し、接続文字列を取得します(クライアントごとに異なるデータベースが維持されます)。 3. クライアントデータベースに接続し、クエリを実行してユーザーの詳細(ID、電話番号、設定など)を取得します。 4. 選択/更新/削除を実行するか、要求に基づいて挿入します。 上記の手順に加えて、データベースにクエリを行い、ロールなどを確認するさまざまなアクションフィルタも用意されています。これらのアクションフィルタは、ユーザー情報をフェッチするために1,2,3,4の手順を実行する必要があります。私は今、実行する必要があるクエリの数のためにアプリケーションが遅く実行されていることを発見しています。私はセッションで接続文字列とユーザーの詳細をキャッシュすることで、スピードアップを大幅に図ることができます。 私たちはまもなくウェブサイトをサーバーファームに移して行きます。私はキャッシングのためにセッションに頼るつもりはありません。私が見落としている他の明白な設計の選択肢があるのですか、またはmemcachedの形式でキャッシュを使用し続ける必要がありますか、サーバーファーム全体で機能する何らかのソリューションですか? **編集:**私は、データベースとウェブサイトが異なるサーバー上にあり、クライアントの場所に応じてWAN経由でデータベースコールを行う必要があることを述べておきます。私はすでにパフォーマンスを測定しており、データベース呼び出しがパフォーマンスの悪い原因であることを認識しています。
回答: ここでは`HttpCookie`と`AuthenticationCookie`を使用して、ビューとコントローラ間でアクセスする冗長データの状態を維持することができます。私が言う簡単な例は、ログインしているユーザーのuserIdとuserNameの状態を維持することです。これを参照として使用できます。 ``` private void SetCookie(string userName, long userId) { string IdUser = Common.Encrypt(userId.ToString()); FormsAuthentication.SetAuthCookie(userName, false); HttpCookie uCookie = new HttpCookie("UserId", IdUser); Response.Cookies.Add(uCookie); } ``` これは、クッキーの生成方法を示すサンプルコードです。あなたのクッキーに情報を設定した後は、そのIDや名前、電話番号などが必要になるたびにデータベースにアクセスする必要はありません。あなたが作成したクッキーからその情報を取得するだけです。 お役に立てれば。