Перелить TPS в SQL быстро

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 464
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 124 раза
Поблагодарили: 6 раз

Перелить TPS в SQL быстро

Сообщение ingasoftplus »

Есть у меня 2 таблицы:
1. обычный ТПС - в ней сидят данные для импорта
2. SQL таблица

обе объявлены в словаре, поэтому работаем через операторы клариона.

Так вот, ТПС служит для его чтения и экспорта в СКЛ - т.е. предварительно в другой программе в ТПС скидываются записи, а потом одноразово, периодически в нашей проге их надо переливать в СКЛ. Сейчас это тупо делается в ПРОЦЕСС процедуре, где главный файл ТПС, а в Действие для Каждой записис сидит примерно след:

Код: Выделить всё

sql:field = tps:field
add (sql_table)

+ еще код добавления в другую побочную СКЛ таблицу (типа лог файл)
add (sql_table2)
никаких особых действ нет, просто тупой цикл и добавление. Разумеется все это очень медленно работает! Ведь по циклу идет чтение ТПС, потом добавление по 1 записи в СКЛ.

Вопрос - как это дело оптимизировать?? что быстрее шуршало?? хотелось бы реализацию/идею чисто на кларе/скл, без 3рд пати продуктов...
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Перелить TPS в SQL быстро

Сообщение Admin »

Не знаю можно ли под чистой кларой SQL запросы делать. Это не ко мне.
А вообще в DynStr загоняешь блоки по 200-300 записей

Код: Выделить всё

INSERT INTO dbo.MyTable (ID, Name)
VALUES 
    (123, 'Timmy'),
    (124, 'Jonny'),
    ...
    (300, 'Sally')
Выполняешь запрос.
Повторяешь до готовности.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 464
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 124 раза
Поблагодарили: 6 раз

Перелить TPS в SQL быстро

Сообщение ingasoftplus »

Admin писал(а):Не знаю можно ли под чистой кларой SQL запросы делать. Это не ко мне.
Можно конечно!!
Admin писал(а): А вообще в DynStr загоняешь блоки по 200-300 записей

Код: Выделить всё

INSERT INTO dbo.MyTable (ID, Name)
VALUES 
    (123, 'Timmy'),
    (124, 'Jonny'),
    ...
    (300, 'Sally')
Выполняешь запрос. Повторяешь до готовности.
да, была такая идея - чтение блоками!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Перелить TPS в SQL быстро

Сообщение Yufil »

Самое важное в первом тексте
ingasoftplus писал(а): Сейчас это тупо делается в ПРОЦЕСС процедуре
, то есть ОДНА запись выполняется по тику таймера, не знаю, сколько уж там задано.
Убрать процесс и заменить на Window с циклом - и никакой оптимизации не надо
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 464
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 124 раза
Поблагодарили: 6 раз

Перелить TPS в SQL быстро

Сообщение ingasoftplus »

Yufil писал(а):Самое важное в первом тексте
ingasoftplus писал(а): Сейчас это тупо делается в ПРОЦЕСС процедуре
, то есть ОДНА запись выполняется по тику таймера, не знаю, сколько уж там задано.
Убрать процесс и заменить на Window с циклом - и никакой оптимизации не надо
да, тоже идея. можно использовать класс Олега Руденко для процесса, я думаю.
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Перелить TPS в SQL быстро

Сообщение kreator »

Вот тут бодались по такому же поводу - http://forum.clarionlife.net/phpbb/view ... =16&t=2867. О каком количестве записей идёт речь?
We are hard at work… for you. :)
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 464
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 124 раза
Поблагодарили: 6 раз

Перелить TPS в SQL быстро

Сообщение ingasoftplus »

kreator писал(а):Вот тут бодались по такому же поводу - http://forum.clarionlife.net/phpbb/view ... =16&t=2867. О каком количестве записей идёт речь?
спасибо, почитал. кол-во записей - ну разное, и до 10000 может доходить.

а имеет смысл залить из ТПС сначала в очередь, а потом по очереди уже идти и добавлять в СКЛ? будет ли выигрышь по времени?
DPZ
Бывалый
Сообщения: 84
Зарегистрирован: 11 Июль 2005, 7:29
Откуда: Одесса

Перелить TPS в SQL быстро

Сообщение DPZ »

может:
stream()
add заменить append
flush()
Build()
П.З.Д.
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Перелить TPS в SQL быстро

Сообщение Admin »

Мне кажется нет смысла в очередь лить. Тут дольше всего INSERT выполняться будет чем чтение из TPS
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Перелить TPS в SQL быстро

Сообщение Admin »

DPZ писал(а): flush()
ODBC не поддерживает FLUSH
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 464
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 124 раза
Поблагодарили: 6 раз

Перелить TPS в SQL быстро

Сообщение ingasoftplus »

Admin писал(а):Мне кажется нет смысла в очередь лить. Тут дольше всего INSERT выполняться будет чем чтение из TPS
согласен. тогда stream ТПСа сделать
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Перелить TPS в SQL быстро

Сообщение Admin »

ingasoftplus писал(а): согласен. тогда stream ТПСа сделать
Я может быть забыл но кажется STREAM на запись влияет а не на чтение.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Перелить TPS в SQL быстро

Сообщение kreator »

Ну 10000 записей, 2 секунды. Или не 2 секунды? Нужен простой тест по заливке записей в SQL. Думаю, нужна конкретика. Может 10000 фоток с хорошим разрешением льются.
We are hard at work… for you. :)
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 464
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 124 раза
Поблагодарили: 6 раз

Перелить TPS в SQL быстро

Сообщение ingasoftplus »

kreator писал(а):Ну 10000 записей, 2 секунды. Или не 2 секунды? Нужен простой тест по заливке записей в SQL. Думаю, нужна конкретика. Может 10000 фоток с хорошим разрешением льются.
не - записи простые!!

и не 2 секунды - часы работает!!! юзеры жалуются что очень долго идет процесс!!!! скорее всего долго кладутся записи в скл таблицу, ну и наверное ПРОЦЕСС процедура по ТПС тоже тормозит...
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Перелить TPS в SQL быстро

Сообщение kreator »

Процесс убирайте, конечно, просто в цикле, можно по Add. Но всё равно часы не могут. Вот в том посте, ссылку на который я дал, есть моё время по Sybase ASA. Недавно я делал перелив базы FireBird в Oracle через Клашу, и кстати через процесс. Абсолютно разумное время. Даже, чтобы был заметен процесс, приходилось делать паузу по таймеру.
We are hard at work… for you. :)
Ответить