Поделитесь опытом

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Re: Поделитесь опытом

Сообщение gopstop2007 »

Алексей- Софт-Центр писал(а):Добрый день!
Создал две таблицы в MySql.
В одну записал 50 000 записей .
Вторая таблица аналог первой.
Время выполнения запроса:

insert INTO t2 SELECT * from t1 on duplicate key
update t2.c1=t1.c1,t2.c2=t1.c2 ;

Хранимая процедура 'proba.p' была успешно выполнена.
proba_t2: Запрос открыт за 0.003c [0.002c выполнение, 0.001c выборка]

Так что особенной "нагрузки" на сервер не наблюдается.

Алексей
я так понимаю это скорость двух таблиц на одном сервере при выполнении ХП, а как же + время загрузки всех данных на сервер?
И как насчет удаления "нулевых" записей при таком запросе?
Вот здесь будет "засада":
так как кларион добавляет записи , использую previous оператор, то такое добавление будет ну очень долгое!
тут засады нет , так как таблица создается с нуля для каждого пользователя
то есть
1. Сначала копируются с проверкой (добавлений,изменений, удаление записей) данные с TPS в MySQL таблица (SQLOstatkiAll) с каждого пользователя(всего 15)
2. После выше указанного обновления, старый файл TPS удаляется, а таблица (SQLOstatkiAll) в MYSQL "забирается" и сливается в ново создаваемый файл TPS.
Все!
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Поделитесь опытом

Сообщение Алексей- Софт-Центр »

Добрый день!

Хранимая процедура выполняет вашу "подзадачу"
необходимо используя 'Пользов.' и 'Код товара' изменить 'Остаток товара' в файле MySQL(SQLOstatkiAll) или добавить, если записи нет.


Я не ставил задачу полностью смоделировать вашу модель.
Я просто показал, что часть обработки можно спокойно отдать MySql. При этом и нагрузка на сервер не такая большая на примере 50000 записей,
да и программу не надо "перекомпелировать", а просто изменить хранимую процедуру.

А про это я уже писал:
Правда, на вкус и цвет ... :)


Алексей
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Re: Поделитесь опытом

Сообщение kreator »

Алексей, а сколько по времени будут вливаться 50000 записей на MySQL Server с клиентской станции? Просто интересно. Код типа такого:
LOC:TimeOfExecuting = clock()
loop LOC:Counter=1 to 50000
Wares{PROP:SQL} = 'Insert into DBA.Wares values('&LOC:Counter&','&LOC:Counter&')'
END
LOC:TimeOfExecuting = clock() - LOC:TimeOfExecuting
stop(format(LOC:TimeOfExecuting,@t4))
Ну и заодно, update -
LOC:TimeOfExecuting = clock()
loop LOC:Counter=1 to 50000
Wares{PROP:SQL} = 'Update DBA.Wares set DBA.Wares.Ostat = '&(LOC:Counter+1)&' where DBA.Wares.NWares = '&LOC:Counter
END
LOC:TimeOfExecuting = clock() - LOC:TimeOfExecuting
stop(format(LOC:TimeOfExecuting,@t4))
We are hard at work… for you. :)
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Поделитесь опытом

Сообщение Алексей- Софт-Центр »

Добрый день!

TimeOfExecuting = clock()
t1{PROP:SQL} = ' delete QUICK FROM proba.t1; '
TimeOfExecuting = clock() - TimeOfExecuting
stop(format(TimeOfExecuting,@t4))

TimeOfExecuting = clock()
loop Counter=1 to 50000
t1{PROP:SQL} = 'Insert into proba.t1 values('&Counter&','&Counter&','&Counter&')'
END
YIELD
TimeOfExecuting = clock() - TimeOfExecuting
stop(format(TimeOfExecuting,@t4))

Первый стоп выдал 00:00
Второй стоп выдал 08:17

Алексей
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Re: Поделитесь опытом

Сообщение kreator »

Алексей, я так понимаю - 8 минут 17 секунд?
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Поделитесь опытом

Сообщение Admin »

Фантастическое время... с MAV по идее на порядок быстрее будет если правильно запрос построить.
Типа

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

INSERT ()
UNION
INSERT ()
...
UNION
INSERT ()
и т.д.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Поделитесь опытом

Сообщение Алексей- Софт-Центр »

Добрый день!
Да. 8 минут.
Второй запрос - (update) 1500 апдейтов в минуту.
Значит около 33 минут.


Алексей
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Re: Поделитесь опытом

Сообщение gopstop2007 »

TimeOfExecuting = clock()
loop Counter=1 to 50000
t1{PROP:SQL} = 'Insert into proba.t1 values('&Counter&','&Counter&','&Counter&')'
END
А почему не реализовать таким пакетным способом? Вроде побыстрее будет в несколько раз
INSERT INTO myTable (col1, col2, col3) VALUES(val1, val2, val3), (val11, val22, val33), (valn1, valn2, valn3)
и как это выглядит с использованием MAV шаблонов? Профи поделитесь ...
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Ответить