Страница 1 из 2

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

Добавлено: 03 Апрель 2015, 12:25
ingasoftplus
Есть у меня 2 таблицы:
1. обычный ТПС - в ней сидят данные для импорта
2. SQL таблица

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

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

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

sql:field = tps:field
add (sql_table)

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

Вопрос - как это дело оптимизировать?? что быстрее шуршало?? хотелось бы реализацию/идею чисто на кларе/скл, без 3рд пати продуктов...

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

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

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

INSERT INTO dbo.MyTable (ID, Name)
VALUES 
    (123, 'Timmy'),
    (124, 'Jonny'),
    ...
    (300, 'Sally')
Выполняешь запрос.
Повторяешь до готовности.

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

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

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

INSERT INTO dbo.MyTable (ID, Name)
VALUES 
    (123, 'Timmy'),
    (124, 'Jonny'),
    ...
    (300, 'Sally')
Выполняешь запрос. Повторяешь до готовности.
да, была такая идея - чтение блоками!

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

Добавлено: 03 Апрель 2015, 13:49
Yufil
Самое важное в первом тексте
ingasoftplus писал(а): Сейчас это тупо делается в ПРОЦЕСС процедуре
, то есть ОДНА запись выполняется по тику таймера, не знаю, сколько уж там задано.
Убрать процесс и заменить на Window с циклом - и никакой оптимизации не надо

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

Добавлено: 03 Апрель 2015, 14:05
ingasoftplus
Yufil писал(а):Самое важное в первом тексте
ingasoftplus писал(а): Сейчас это тупо делается в ПРОЦЕСС процедуре
, то есть ОДНА запись выполняется по тику таймера, не знаю, сколько уж там задано.
Убрать процесс и заменить на Window с циклом - и никакой оптимизации не надо
да, тоже идея. можно использовать класс Олега Руденко для процесса, я думаю.

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

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

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

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

а имеет смысл залить из ТПС сначала в очередь, а потом по очереди уже идти и добавлять в СКЛ? будет ли выигрышь по времени?

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

Добавлено: 03 Апрель 2015, 14:58
DPZ
может:
stream()
add заменить append
flush()
Build()

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

Добавлено: 03 Апрель 2015, 14:58
Admin
Мне кажется нет смысла в очередь лить. Тут дольше всего INSERT выполняться будет чем чтение из TPS

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

Добавлено: 03 Апрель 2015, 15:00
Admin
DPZ писал(а): flush()
ODBC не поддерживает FLUSH

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

Добавлено: 03 Апрель 2015, 15:09
ingasoftplus
Admin писал(а):Мне кажется нет смысла в очередь лить. Тут дольше всего INSERT выполняться будет чем чтение из TPS
согласен. тогда stream ТПСа сделать

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

Добавлено: 03 Апрель 2015, 15:16
Admin
ingasoftplus писал(а): согласен. тогда stream ТПСа сделать
Я может быть забыл но кажется STREAM на запись влияет а не на чтение.

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

Добавлено: 03 Апрель 2015, 15:21
kreator
Ну 10000 записей, 2 секунды. Или не 2 секунды? Нужен простой тест по заливке записей в SQL. Думаю, нужна конкретика. Может 10000 фоток с хорошим разрешением льются.

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

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

и не 2 секунды - часы работает!!! юзеры жалуются что очень долго идет процесс!!!! скорее всего долго кладутся записи в скл таблицу, ну и наверное ПРОЦЕСС процедура по ТПС тоже тормозит...

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

Добавлено: 03 Апрель 2015, 15:48
kreator
Процесс убирайте, конечно, просто в цикле, можно по Add. Но всё равно часы не могут. Вот в том посте, ссылку на который я дал, есть моё время по Sybase ASA. Недавно я делал перелив базы FireBird в Oracle через Клашу, и кстати через процесс. Абсолютно разумное время. Даже, чтобы был заметен процесс, приходилось делать паузу по таймеру.