16.03.2010, 23:55 | #1 |
----------------
|
Почему я не доверяю временным таблицам
Использование временных таблиц весьма удобно, по сравнению с другими формами хранения временных коллекций. И часто, как-то забывается, что они не являются полноценными таблицами.
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(); } И в этом случаи, индекс на временной таблице помогает, но редко кто о нем задумывается пока не надо будет сдавать отчетность за квартал-полгода. 2. Временная таблица, по мнению Аксапты, может быть перемещена на диск, если достигла какого-то предела в размерах (где-то была дока, которая более подробно об этом говорила). После такого подвоха работа с ней превращается в постоянное дерганье диска, что ну никак не увеличивает скорость. Я так и не научился предугадывать и ловить этот "счастливый" момент... всегда становится неприятной неожиданностью. 3. Место хранение либо клиент, либо сервер, хотя чаше хочется создать на сервере, а использовать на клиенте, что приводит к многочисленным обменам клиент-сервер. Итого: когда встречаю в чей-то разработке временную таблицу заполняемую неопределенным объемом данным, отмечаю для себя, что надо либо протестировать на большом объеме, либо постараться не использовать для больших выборок. |
|
|
За это сообщение автора поблагодарили: mazzy (2), belugin (3), zemlyn (1), konopello (2). |
17.03.2010, 09:46 | #2 |
Участник
|
Цитата:
Так что можно оценить объем одной записи и примерно понять сколько записей можно вставить до момента когда ядро начнет скидывать их на диск. |
|
17.03.2010, 12:59 | #3 |
Мрачный тип
|
Можно отрыть где-то в настройках (пусть даже и через копание в реестре) или это "прошито" в программе ?
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
17.03.2010, 14:00 | #4 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: DSPIC (7). |
17.03.2010, 16:50 | #5 |
Участник
|
Какую альтернативу временной таблицы считаете наиболее разумной?
__________________
Александр |
|
18.03.2010, 09:42 | #6 |
----------------
|
128КБ ...знаю-знаю, пробовал-пробовал, не получилось-не получилось
я не призываю избавляться от временных таблиц, а предлагаю думать над тем сколько данных вы туда кладете и как их дальше используете. альтернативы все теже - Map, Set, List |
|
18.03.2010, 11:04 | #7 |
Участник
|
Недавно воспользовался, хоть и не в полной мере, вот таким советом (Оптимизация запроса - ranges). На больших объемах данных результат по скорости поразил. Суть вкратце: использовать взамен временной - постоянную таблицу, с последующей её очисткой. У такого подхода наверняка найдется множество противников, и они будут в своём роде правы. Но в критических ситуациях может быть полезным, на мой взгляд.
|
|
18.03.2010, 11:10 | #8 |
Боец
|
|
|
18.03.2010, 11:24 | #9 |
Участник
|
|
|