Кэширование больших наборов данных

Я работаю над приложением ASP.NET, которое имеет следующие требования:

  1. Раз в 15 минут выполнять довольно затратный запрос из примерно 20 000 элементов (не из базы данных). Имеет около 10 столбцов, все короткие строки, за исключением одного, который хранит до 3000 символов (обычно намного меньше).
  2. Обработайте полученную таблицу данных с помощью различных сортировок и фильтров, а затем сохраните первые 100 элементов в дополнительных таблицах данных.
  3. Отобразите эту информацию как форму агрегирования потенциально 10 000 человек.

Мне кажется, что это отличный кандидат для кэширования (System.Web.Caching), особенно учитывая, что мы можем захотеть поддерживать дополнительную фильтрацию «на лету». Например: фильтрация таблицы до строк, относящихся только к конкретному пользователю.

Однако, прежде чем начать, я хотел бы понять:

  1. Если есть какие-либо рекомендации по хранению такой большой DataTable в Cache.
  2. Если у кого есть опыт, поделитесь? Большие таблицы вы сохранили?
  3. Какие-нибудь ловушки, которых следует остерегаться на этом пути?

Заранее спасибо.


person Community    schedule 21.09.2009    source источник


Ответы (4)


Это довольно просто, но вы можете следить за тем, что на самом деле кешируется. У Рика Страла есть интересный пост о том, как на самом деле кеш был пуст из-за к нагрузкам на память.

person StingyJack    schedule 21.09.2009

Стив Смит выиграл конкурс на мероприятии Microsoft с одним из своих решений для кэширования. Вот сообщение из его блога. Вот выпуск DNR TV, где он рассматривает свои приемы.

person David Robbins    schedule 21.09.2009

Вы смотрели блок приложений кэширования корпоративной библиотеки Microsoft?

Он основан на лучших практиках и очень прост в использовании.

http://msdn.microsoft.com/en-us/library/cc309103.aspx

person monkey_p    schedule 21.09.2009
comment
Насколько я понимаю, эта самая структура предполагает использование System.Web.Caching для веб-приложений, поэтому я не уверен, что это добавляет большую ценность. - person ; 21.09.2009
comment
Это хорошо, если у вас есть код приложения, который используется несколькими платформами (ASP.NET/winforms/библиотеки классов). - person StingyJack; 21.09.2009

Предположительно, некоторые строки в таблице данных обновляются между запусками запроса. Таким образом, вам нужно будет обновлять кеш перед каждым запуском, что не даст вам никаких улучшений по сравнению с простым чтением файла.

В любом случае файловая система работает с довольно эффективным кешем, так зачем изобретать велосипед.

Лучшим подходом может быть переписывание вашего «запроса», чтобы вы получили все, что вам нужно, за один проход файла.

person James Anderson    schedule 21.09.2009
comment
Это не из файловой системы, и мы рады, что информация устарела на 15 минут. Что делает его пригодным для кэширования. - person ; 21.09.2009