Я относительно новичок в ef и хотел бы спросить совета.
У меня есть стандартная структура сущностей с очень недолгим контекстом с требованием обновлять одну страницу каждые пару минут для каждого пользователя.
Эта страница основана на данных из таблицы, содержащей более 500 тыс. Строк, которые не будут изменяться или добавляться очень часто, поэтому я хочу, чтобы эти данные сохранялись в памяти, а не извлекали данные при каждом обновлении ....
Так что я ищу, чтобы кэшировать эти данные в объекте списка уровня приложения, но при каждом запросе этой информации для проверки кэша, и если есть какие-либо дельты, то только те, которые запрашиваются и обновляются в кэше, а не затем вытаскивая всю таблицу и обрабатывая одну за другой.
Так, например.
List<T> cache_list;
public List<T> getdata()
{
if (cache_list != db.table.ToList())
{
cache_list.AddRange(db.table.Except(cache_list).ToList())
}
return cache_list;
}
Я знаю, что это добавит все новые записи в кеш, но не обновит существующие строки. Также я думаю, что это будет интенсивно, потому что (и я могу ошибаться здесь) либо придется отправить кэш в базу данных, либо загрузить всю таблицу перед сравнением с другой.
Любой совет, как лучше всего это сделать?
Edit:
На самом деле я не вытягиваю все 500 тыс. Строк для страницы, может быть 500, после фильтрации, но вытягивание 500 все же более интенсивно, чем либо отсутствие запроса, потому что кеш корректен, либо вытягивание пары меняется, особенно если на страницу одновременно попадает много пользователей. время.