Кэширование совокупных результатов в Linq2SQL - PullRequest
0 голосов
/ 06 октября 2009

У нас есть небольшая партнерская программа и простой инструмент для просмотра партнерской статистики.

Линк для отображения отчета:

from e in linq0
select new
{
    Id = e.Id,
    Name = e.CompanyName,
    EnquiryCount = (int?)e.CampaignCodes.Sum(f => f.Enquiries.Count()) ?? 0,
    EnquiryOrderSum = (int?)e.CampaignCodes.Sum(f => (int?)f.Enquiries.Sum(g => (int?)g.Orders.Sum(h => h.OrderPrice) ?? 0) ?? 0) ?? 0
    ...
}

Там, где вычисление EnquiryCount и EnquiryOrderSum занимает все больше времени по мере роста базы данных. (Индексы определены, обещаю).

Одна из идей состоит в том, чтобы кэшировать EnquiryCount и EnquiryOrderSum в отдельную таблицу и пересчитывать их каждый час или каждую ночь.

Есть ли способ (в linq2sql / asp.net) для общего кэширования этих результатов без создания статических таблиц / столбцов для каждого из них надлежащим образом?

Я думаю о создании чего-то вроде:

EnquiryCount = Cache(g => (int?)e.CampaignCodes.Sum(f => f.Enquiries.Count()) ?? 0, 3600000 /*ms lifetime*/, e.Id/*key*/, "AffiliateService.EnquiryCount"/*property*/)

Где каждый раз вызываемый ищет кэшированные значения. Но я скептически отношусь к тому, что это будет очень эффективно?

1 Ответ

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