| 
	
	
		
		
		
		
		 Раз уж зашёл разговор о местах где можно выполнить расчёты, то я добавлю. 
есть как минимум 5 способов,посчитать сумму всех строк 
 
1) посчитать всё при отдаче данных с сервера 
2) Посчитать на клиенте, передав туда все данные. 
3) Посчитать сумму всех строк при добавлении записи в бд, и сохранить результат куда нубудь. (то что преложил Trikadin) 
4) Прокешировать результат суммы строк.  То есть, когда сервер возвращает данные он возвращает их из кеша, но если в бд произошли изменения то он считает сумму строк, записывает их в кеш и только потом  возвращает результат. Определять необходимость перерасчёта суммы, можно по двум временным меткам. Одна метка, это время последней операции записи, вторая эта время (последней операции записи) которая участвовала в расчёте кеша. Если при операции получения выясняется что время последней операции не совпадает со (временем операции записи) участвующей в последнем расчёте кеша, значит кеш нужнается в перерасчёте. 
 
5) Перманентный расчёт суммы строк. (в 1С эту функцию исполняют регистры) Этот подход проще описать алгоритмом. Допустим нам нужна стоимость всех товаров на складе. 
У нас есть уже посчитанная в кеше сумма всех товаров, нам необходимо изменить количество памперсов на складе. 
а) стоимость товаров на складе =стоимость товаров на складе-количество памперсов *на стоимость памперсов. 
б) Записываем в бд новое количество памперсов. 
в) Стоимость товаров на складе =стоимость товаров на складе+количество памперсов *на стоимость памперсов. 
 
Тоесть я просто отнял старую стоимость всех памперсов а потом прибавил новую. Это гораздо быстрее чем из за пары памперсов суммировать все строки в базе (десятки тысяч). 
 
Если подытожить, то максимальное быстродействие обеспечат именно регистры, такие же как в системе 1С. Причём при помощи регистров можно реализовать 99% всех типов расчётов (даже такие как прогноз продаж в следующем периоде). Добавлю что изменение записи в таблице товаров и регистре лучше обьединить в одну транзакцию. нелишним будет и создание утилиты обслуживания, которая используется в случае повреждения бд/ручного вмешательства в бд. Суть работы такой утилиты сводится к перерасчёту всех регистров на основании бд, аналогичный инструмент есть и в 1с. 
		
	
		
		
		
		
		
			
				__________________ 
				Лучше калымить в гандурасе чем гандурасить на колыме
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось DjDiablo, 24.04.2012 в 16:20.
				
				
			
		
		
	
		
		
	
	
	 |