2011-01-13 9 views
-1

ちょっと、 私はdb(mysql)を持つサーバー側のアプリケーションを持っていますが、私のDBの現在のスキーマのために、ユーザのデータを操作するために(例えば、彼のプロフィールdbテーブルの編集など)、彼のユーザ名でIDを取得します。簡単なユーザー名とユーザーIDのマッピングをキャッシングしてデータベースを簡単にする

私は、特定のusername to useridマッピングの要求を処理するときに、結果を辞書に、または指定されたユーザー名の最初の文字の専用辞書にキャッシュする単純なキャッシュクラスを作成することを考えていました。 (私は辞書が爆発したくないので、辞書がいっぱいになるまでそれだけで助けることができる

public class UsernameToIdCache 
{ 
    public int GetUserIdFromUsername(string username) 
    { 
     if (string.IsNullOrEmpty(username)) return -1; 

     var targetDictionary = _cacheDictionaries[username[0]]; 
     int id; 
     if (targetDictionary.TryGetValue(username,out id)) 
     { 
      return id; 
     } 
     else 
     { 
      id = RunSqlQuery("select id from users where username ='" + username + "'"); 
      if (IsDictionaryNotFull(targetDictionary)) 
      { 
       targetDictionary.Add(username,id); 
       return id; 
      } 
     } 
    } 
} 

IsDictionaryNotFull(Dictionary<int,string>)方法は、メモリ管理のために使用されます。ここでは

は私が考えていたものの一例です)。

あなたはどう思いますか? これは良いdbコーディングの練習ですか?

+0

私はWcf、Mysql、およびCを使用しています。 – programmer

答えて

1

ASP.NETアプリケーションですか?その場合は、IDをSessionオブジェクトに入れることを検討してください。ユーザーがログインした後にロードされ、他のマジックキャッシュは必要ありません。

+0

+1私は全く同意します。 @programmerは問題を複雑にしているようです。 –

+0

しかしわれわれはそれを知らない。彼がWebServiceを開発している場合、WSはステートレスなのでキャッシュする必要があります。 ソケットベースのサーバーを開発している場合は、接続時にIDを格納できるUserContextクラスを手動で記述することができます。 – dzendras

+0

いいえ、Wcf。質問を更新します.wcfには何か類似していますか? – programmer

0

キャッシュの概念は、特にトランザクションの量が非常に多い場合には良い考えです。ここでの重要な点は、ASP.NETアプリケーションがマルチスレッドであることを覚えておくことです。そのため、書き込みを行うときにその辞書へのアクセスをロックする必要があります。辞書。

しかし、全体的には、キャッシュのパフォーマンスを向上させたい/したいと思ったら、それを実行してください。

+0

これはWCFサービスになる予定です。 – programmer

関連する問題