Я разрабатываю веб-приложение в ASP.NET/С# с MySQL и Entity Framework. Я хочу использовать некоторые столбцы счетчиков, которые будут часто обновляться путем увеличения их значения +1. У меня есть таблица продуктов, в которой находятся столбцы счетчиков. У меня есть два вопроса:
1) Должен ли я использовать вторую таблицу для счетчиков? - Основная таблица продуктов будет часто считываться, и если я буду очень часто обновлять строку, это может снизить производительность, потому что строка будет блокироваться каждый раз, когда обновляются счетчики (я использую InnoDB)
2) Как лучше всего увеличить строку на +1 с помощью MySQL и Entity Framework. Я не против того, что счетчик будет на 100% точен, поэтому если будут какие-то конфликты обновлений, я их поймаю, но могу и пройти без обновления. Я предполагаю, что большинство обновлений будет сделано быстро и будет включено в обновление.
Я добавляю некоторый код, который я использую для реализации этого, используя статическую переменную, чтобы предотвратить частую запись в БД.
Код:
if (Global.DataCounters != null)
{
if (Global.DataCounters.ContainsKey(id))
{
int new_value = ++Global.DataCounters[id];
Global.DataCounters.Remove(id);
Global.DataCounters.Add(id, new_value);
// check datatime
if ((DateTime.Now - Global.LastFlushed).Minutes > 10)
{
// update counter in db and reset data
Global.LastFlushed = DateTime.Now;
}
}
else
{
// first time view of a device, set to zero views
Global.DataCounters.Add(id, 1);
}
}
else
{
Global.DataCounters = new Dictionary<int, int>();
}
Глобальный.asax:
public static Dictionary<int, int> DataCounters = new Dictionary<int,int>();
public static DateTime LastFlushed;
void Application_Start(object sender, EventArgs e)
{
LastFlushed = DateTime.Now;
RegisterRoutes(System.Web.Routing.RouteTable.Routes);
}
Как вы думаете, это хорошая реализация?
Спасибо