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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.12.2002, 11:22   #1  
Surok is offline
Surok
Участник
 
17 / 10 (1) +
Регистрация: 11.09.2002
Адрес: Moscow
Массовый Insert / инициализация таблицы
Привет !

Есть таблица , в ней 3 поля, ее нужно заполнить (проинициализировать) значениями ключа от 1 до "Х". Остальные поля - знаечния фиксированы. Как это сделать оптимально ?

следующий код в static методе таблицы, выполняющемся на сервере (при Х = 100000)

Gamenumber = 50;

for (i=1; i<= Х ; i++)
{
t.VariantNumber = i;
t.GameNumber = Gamenumber;
t.Possible = True;
t.doInsert();
}

работает 27 секунд. Это много.

Нет - ли какого - нибудь "массового" inserta , что - то типа как в СИ инициализируется область памяти. Чтобы загнать значения в какой - нить буфер, а потом одним оператором из этого буфера вставить все это дело в таблицу ???
Старый 26.09.2007, 14:09   #2  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Использую примерно так, ничего не получается. Что сделано не так?

X++:
TableMy t;
RecordInsertList  arrayInsert = new RecordInsertList(tableNum(TableMy ),true,true); 

for (i=1; i<=  ; i++)
{
t.VariantNumber = i;
t.GameNumber = Gamenumber;
arrayInsert.add(t); 
}
arrayInsert.insertDatabase();
recordInsertList.insertDatabase(); - он физически добавляет запись в мою таблицу TableMy ? или в переменую t?

Причина не работы выяснилась метод не может работать с временными таблицами, только не пойму почему?

Последний раз редактировалось Arahnid; 26.09.2007 в 14:40.
Старый 27.09.2007, 13:37   #3  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Товарищи, ну давайте без разборок, я же вопрос задала и надеялась оответ услышать на вопрос, а не ответ, как уничтожить врага на работе.
Старый 27.09.2007, 14:10   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Товарищи, ну давайте без разборок, я же вопрос задала и надеялась оответ услышать на вопрос, а не ответ, как уничтожить врага на работе.
Ответ - потому что она временная.
Там ссылка на файл этой таблицы нужно чтобы сохранялась при добавлении записей.

А с использованием этого класса это не происходит. Потому что он на это не рассчитан.
Но он вполне справедливо на это не рассчитан.

Вставка записей во временную таблицу в любом случае идет последовательно, запись за записью, потому что это файл на диске.
Поэтому выигыша от использования пакетной вставки не было бы.
Старый 27.09.2007, 22:34   #5  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Товарищи, ну давайте без разборок, я же вопрос задала и надеялась оответ услышать на вопрос, а не ответ, как уничтожить врага на работе.
почему-то когда просишь уточнить постановку задачи все вопросы отпадают
Старый 27.09.2007, 14:09   #6  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Попробовал. На таблице из трех полей ваш джоб запускать для темповой doInsert и для настоящей arrayInsert.insertDatabase() - результат приблизительно одинаковый 20 и 25 секунд - в пользу настоящей. Смысл в том, что темповые таблицы в принципе не расчитаны на такие объемы (100 000). Если бы рассказали подробнее постановку задачи - было б легче.
Старый 27.09.2007, 15:39   #7  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,286 / 3494 (123) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Тут я говорил про этот класс (RecordInsertList). Фактом могу подтвердить увеличение скорости минимум в 6 раз по сравнением с doInsert.
Он действительно рассчитан на постоянные таблицы
__________________
Возможно сделать все. Вопрос времени
Старый 27.09.2007, 17:42   #8  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Пробовал вставлять без ttsbegin и ttscommit большое количество строк.
С ними система зависала. Т.к. кэш похоже перегружался. Ведь надо же где то эту транзакцию хранить.
Без них в кэш ничего не идёт. Или очень мало.
И всё сработало.
Правда есть вероятность. Что в каком то месте оборвётся вставка. И выйдет половина вставилась, а половина нет. Но job можно дописать таким макаром, чтоб то что не доставилось довставлялось пока всё не вставиться.
Старый 27.09.2007, 17:46   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вообще-то достаточно флага обычного, что все удачно вставилось.

И только если флаг установлен, продолжается обработка этой временной таблицы.
А так как она временная, нет нужны беспокоиться о ее очисте перед повторным использованием.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пересоздание таблицы при синхронизации Serg16 DAX: Администрирование 1 26.08.2009 13:55
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
method insert() when insert table from outside susenyudha DAX in English 1 29.08.2008 18:51
Про Insert, DoInsert и IAxaptaRecord::Insert murad DAX: Программирование 5 23.05.2006 12:26
Получение из поля Map кода поля реальной таблицы, к ней привязанной (Mappings) vey DAX: Функционал 5 16.03.2005 11:16

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:06.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.