AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.03.2010, 23:55   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Почему я не доверяю временным таблицам
Использование временных таблиц весьма удобно, по сравнению с другими формами хранения временных коллекций. И часто, как-то забывается, что они не являются полноценными таблицами.

1. Любимая многими схема использования временной таблицы для группировки данных, особенно часто встречается в отчетах:
X++:
	TransTable	trans;	// постоянная таблица каких-то строк
	TmpTable	tmpTable;	// временная таблица

	while select trans
		where trans.Tratata <= "tititi" &&
			trans.LaLaLa >= "gogogo"
	{
		select firstonly tmpTable
			where tmpTable.Field1 == trans.SomeRefId &&
				tmpTable.Date1 == trans.TransDate;
		
		if(! tmpTable)
		{
			tmpTable.initFromTrans(trans);
		}

		tmpTable.Amount += trans.Amount;
		tmpTable.Qty += trans.Qty;

		tmpTable.write();
	}
Такой код замечательно работает до 1000 записей, но чем дальше, тем все хуже и хуже, потому что с каждым циклом время на 1 итерацию увеличивается... 5000 вообще сложно дождаться.
И в этом случаи, индекс на временной таблице помогает, но редко кто о нем задумывается пока не надо будет сдавать отчетность за квартал-полгода.

2. Временная таблица, по мнению Аксапты, может быть перемещена на диск, если достигла какого-то предела в размерах (где-то была дока, которая более подробно об этом говорила). После такого подвоха работа с ней превращается в постоянное дерганье диска, что ну никак не увеличивает скорость.
Я так и не научился предугадывать и ловить этот "счастливый" момент... всегда становится неприятной неожиданностью.

3. Место хранение либо клиент, либо сервер, хотя чаше хочется создать на сервере, а использовать на клиенте, что приводит к многочисленным обменам клиент-сервер.

Итого: когда встречаю в чей-то разработке временную таблицу заполняемую неопределенным объемом данным, отмечаю для себя, что надо либо протестировать на большом объеме, либо постараться не использовать для больших выборок.
За это сообщение автора поблагодарили: mazzy (2), belugin (3), zemlyn (1), konopello (2).
Старый 17.03.2010, 09:46   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,960 / 3246 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Wamr Посмотреть сообщение
Я так и не научился предугадывать и ловить этот "счастливый" момент... всегда становится неприятной неожиданностью.
Если не ошибаюсь то таблицы объемом до 128 килобайт хранятся в памяти (ax4.0) а то что выше - сбрасывается на диск.

Так что можно оценить объем одной записи и примерно понять сколько записей можно вставить до момента когда ядро начнет скидывать их на диск.
Старый 17.03.2010, 12:59   #3  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от Logger Посмотреть сообщение
128 килобайт
Можно отрыть где-то в настройках (пусть даже и через копание в реестре) или это "прошито" в программе ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 17.03.2010, 14:00   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,960 / 3246 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Можно отрыть где-то в настройках (пусть даже и через копание в реестре) или это "прошито" в программе ?
Не знаю.
Я об этом прочитал в книге Inside Ax 4.0

Там не описывалось можно ли играть этим параметром.
За это сообщение автора поблагодарили: DSPIC (7).
Старый 17.03.2010, 16:50   #5  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от Wamr Посмотреть сообщение
Использование временных таблиц весьма удобно, по сравнению с другими формами хранения временных коллекций. И часто, как-то забывается, что они не являются полноценными таблицами.
Какую альтернативу временной таблицы считаете наиболее разумной?
__________________
Александр
Старый 18.03.2010, 09:42   #6  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
128КБ ...знаю-знаю, пробовал-пробовал, не получилось-не получилось

я не призываю избавляться от временных таблиц, а предлагаю думать над тем сколько данных вы туда кладете и как их дальше используете.

альтернативы все теже - Map, Set, List
Старый 18.03.2010, 11:04   #7  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Цитата:
Сообщение от tolstjak Посмотреть сообщение
Какую альтернативу временной таблицы считаете наиболее разумной?
Недавно воспользовался, хоть и не в полной мере, вот таким советом (Оптимизация запроса - ranges). На больших объемах данных результат по скорости поразил. Суть вкратце: использовать взамен временной - постоянную таблицу, с последующей её очисткой. У такого подхода наверняка найдется множество противников, и они будут в своём роде правы. Но в критических ситуациях может быть полезным, на мой взгляд.
Старый 18.03.2010, 11:10   #8  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Logger Посмотреть сообщение
Не знаю.
Я об этом прочитал в книге Inside Ax 4.0

Там не описывалось можно ли играть этим параметром.
И я за то, чтобы читали книжки, а не удивлялись "чуду"
Старый 18.03.2010, 11:24   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,960 / 3246 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Wamr Посмотреть сообщение
альтернативы все теже - Map, Set, List
RecordSortedList ?
Теги
временная таблица, полезное, производительность

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Почему loka DAX: Программирование 2 01.12.2005 17:36
Почему такое расхождение в скорости выполнения Владимир Максимов DAX: Программирование 28 11.09.2004 12:44
Вопрос по временным таблицам Кирилл DAX: Программирование 3 15.04.2004 14:09
Запросы к временным таблицам или group by Anais DAX: Программирование 4 23.03.2004 12:48
почему форма сразу закрывается ? puz DAX: Программирование 3 09.09.2003 11:56

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:14.