кэширование простого имени пользователя для сопоставления UserId для облегчения работы с БД - PullRequest
0 голосов
/ 14 января 2011

эй, у меня есть ac # серверное приложение, которое имеет db (mysql), и довольно часто, из-за моей текущей схемы БД, мне приходится извлекать идентификатор пользователя по его имени, чтобы манипулировать данными пользователя (например,как редактирование его таблиц базы данных профиля и т. д.).

Я думал о создании простого класса кэша, который, когда он обрабатывает запрос для конкретного отображения 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>) используется для управления памятью (я делаюне хочу, чтобы словари взрывались, так что это может помочь только до тех пор, пока словари не заполнятся).

что вы думаете?Это хорошая практика кодирования БД?

Ответы [ 2 ]

1 голос
/ 14 января 2011

Это приложение ASP.NET?Если это так, рассмотрите возможность помещения идентификатора в объект Session.Он будет загружен, когда пользователь войдет в систему, и никакое другое магическое кэширование не требуется.

0 голосов
/ 14 января 2011

Идея кэширования - хорошая идея, особенно если объем транзакций очень высок.Ключевым моментом здесь является помнить, что приложения ASP.NET являются многопоточными, поэтому вы захотите заблокировать доступ к этому словарю при выполнении записи, так как вы не хотите, чтобы два потока пытались записать одни и те же данные всловарь.

Но в целом я бы сказал, что если вам нужно / нужно повысить производительность кеширования, тогда сделайте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...