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,  спасибо большое за помощь =) в целом стало понятнее осталось детально разобрать =))) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |