| 
			| 
					
						| Okkkks 
								Помогающий    Offline | 
								|  | «  : 24-01-2011 08:47 »  |  | 
 
 Ребята, помогите, пожалуйста, разобраться с кэшированием данных. У меня есть метод который считывает из базы одну таблицу: public static List<Dish> Read_Dish() //выборка всех блюд из базы и сортировка по категории
 {
 List<Dish> dish = new List<Dish>();
 
 using (DataClasses_RestaurantDataContext dc = new DataClasses_RestaurantDataContext())
 {
 dish = dc.Dishes.OrderBy(d => d.Category).ToList();
 }
 return dish;
 }
 
результат помещаю и список:  List<Dish> _dish = Read_Dish();
и вот теперь мне нужно этот список поместить в кэш, так чтобы при любом изменении в таблице обновлялся кэш...   понимаю, что нужно как-то прикрутить сюда CacheDependency, но никак не могу с ним договориться... =(( если указать путь к файлу базы, тогда как указать нужную таблицу?.. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #1 : 24-01-2011 09:50 »  |  | 
 
 Какой кэш, чей кэш? Кэш страницы? Кэш базы данных? Твой собственный самописный кэш?
 Зачем этот кэш нужен? Какие задачи решаются с его помощью?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Okkkks 
								Помогающий    Offline | 
								|  | « Ответ #2 : 24-01-2011 10:27 »  |  | 
 
 я так понимаю кэш, который System.Web.Caching.Cache. мне нужно кэшировать объект(список  _dish ), не страницу. С его помощью предполагается разгрузить базу(из данной таблицы часто извлекаются даннные).
 
 изначально при добавлении скажем записи в таблицу,  так же добавлялась эта запись и в список, чтобы лишний раз не читать из базы, на что мне сказали "нафиг такие сложности, если есть стандартный вариант решения через кэширование объекта. там есть возможность отследить изменения в таблице и автоматически обновить кэш".
 вот и думаю теперь как это сделать-то....=(
 
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #3 : 24-01-2011 14:01 »  |  | 
 
 Okkkks, т.е. речь идёт о том, чтобы использовать кэш веб-приложения для хранения своих объектов.
 Во-первых, это должно быть разрешено в веб-приложении. Полагаю, что это есть.
 
 Во-вторых, кэш приложения существует в единственном экземпляре, а пользователей, одновременно работающих с одной страницей и этим набором данных, может быть много. Поэтому набор данных должен быть независим от контекста пользователя.
 
 В-третьих, очистка кэша приложения происходит автоматически, и поэтому если список объёмный по размеру (десятки Мб), он скорее подвергнется удалению - выгоднее хранить в кэше данные маленькими независимыми частями, чем большим куском.
 
 Поэтому непонятно, как данная задача накладывается на данные обстоятельства.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Okkkks 
								Помогающий    Offline | 
								|  | « Ответ #4 : 24-01-2011 14:05 »  |  | 
 
 ну сколько у ресторана может быть блюд?... ну даже если 100-150 что мало вероятно(как мне кажется)... это же не много...   а список этот - он общий для всех пользователей.  да я в принципе склонна с вами согласиться =)) но только подскажите тогда как будет правильно это реализовать?  сейчас у меня получается дублирование действий(вставка в базу-вставка в список, удаление из базы - удаление из списка...)     |  
						| 
								|  |  
								| « Последнее редактирование: 24-01-2011 14:12 от Okkkks » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #5 : 24-01-2011 14:33 »  |  | 
 
 Okkkks, насколько часто изменяется этот список? Мне почему-то кажется, что читают его гораздо чаще, чем меняют.
 Разумеется, кэшировать нужно исходные данные (как они пришли от сервера), а не результаты сортировки, потому что сортировка - это форма представления - для разных пользователей разная.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Okkkks 
								Помогающий    Offline | 
								|  | « Ответ #6 : 24-01-2011 14:36 »  |  | 
 
 да, читают его гораздо чаще.  у меня получается выборка из данных,хранящихся  в этом списке ну почти на каждой странице...этот список как раз и хранит данные, которые вернул сервер, а  сортировка там для порядка, чтоб потом отдельно не сортировать =))
 |  
						| 
								|  |  
								| « Последнее редактирование: 24-01-2011 14:49 от Okkkks » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #7 :  24-01-2011 20:01 »   |  | 
 
 Okkkks, разумно:1) написать синглетон, обеспечивающий работу с этими данными;
 2) внутри него реализовать доступ к кэшу по схеме много читателей-один писатель;
 3) при записи одновременно вносить изменения в кэшированный список и базу данных;
 4) если в кэше ничего нет - запросить данные из базы данных и построить список.
 
 Пункты 3-4 справедливы только при условии, что данные в базе данных меняются только посредством этого веб-приложения (т.е. нет других приложений, добавляющих/изменяющих/удаляющих эти данные). Если другие приложения есть, для пункта 4 нужно изменить правило.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Okkkks 
								Помогающий    Offline | 
								|  | « Ответ #8 : 25-01-2011 19:43 »  |  | 
 
 Dimka, а можно по 2-му пункту чуточку подробнее?...  как реализуется схема много читателей-один писатель? а как быть если у меня может быть не один писатель? например 2 администратора одновременно с разных компов захотят добавлять?... или синглетон нужен для того, чтобы обеспечить работы с данными, в один и тот же момент времени, только одного пользователя? я правильно понимаю? |  
						| 
								|  |  
								| « Последнее редактирование: 25-01-2011 20:25 от Okkkks » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #9 : 25-01-2011 20:54 »  |  | 
 
 Okkkks,
 1) Синглетон обеспечивает не работу только одного пользователя в один момент времени с данными, а то, что эти данные являются общими для всех (имеются в единственном экземпляре).
 
 2) Как раз единственность изменения данных в один момент времени обеспечивает схема организации параллельной работы пользователей "много читателей - один писатель". Я не могу "чуточку подробнее" про это говорить - фактически это шаблон проектирования взаимодействия параллельных процессов. Либо его излагать целиком (чего я делать не собираюсь - google ещё не отменяли и к ASP.NET это отношения не имеет), либо и говорить про это особо нечего: много читателей ходят и читают (в том числе одновременно) какие-то данные, затем приходит писатель, выгоняет (или дожидается, пока сами уйдут) всех читателей и меняет данные, затем допускает их обратно - читать новые данные.
 
 Соответственно, 2 администратора тут ни причём. Хоть десять. Для приложения это всё одно и то же - пользователи с теми или иными правами.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Okkkks 
								Помогающий    Offline | 
								|  | « Ответ #10 : 26-01-2011 06:30 »  |  | 
 
 Dimka,  спасибо большое за помощь =) в целом стало понятнее осталось детально разобрать =))) |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |