|
|
|
ASA 11/12 как ускорить вызов внешних функций (external call interface) ?
|
|||
|---|---|---|---|
|
#18+
Возникла мысль перетащить базу со старого ASA 7.0 Win но новую платформу 12 Linux x32. (осторожно много букав дальше :) В базе используется внешняя библиотека реализующая функции DES криптования. Разобравшись с новым интерфейсом внешних вызовов сделал под Linux нужную библиотеку, но при тестах оказалось что вызов внешней функций теперь значительно медленнее чем это было при старом интерфейсе. В моем случае это катастрофично медленно. Если при единичном вызове с этой задержкой еще можно мерится, то при вызове криптования одного поля на выборке в 10-20тыс записей фетчь результата занимает уже десятки секунд. А в рабочем режиме мне нужно такое криптование делать по 4-6 полям на выборке в 100-300 тыс за раз. Выносить функцию криптования на клиентскую часть также невозможно, так как существует требования, что открытые данные не должны покидать защищенного хранилища ( В ходе экспериментов обнаружил что тормозит именно новый интерфейс передачи данных/вызова функций из библиотек. Т.к. написав тестовую функцию которая получив входные данные тут же передает их на выход получил те же самые задержки. Тесты проводил на последних билдах ASA 11 и 12 под ubuntu 32, и на ASA 12 под win 32. Причем использование старого интерфейса на ASA 12 под win 32 работает также быстро как и раньше а новый тормозит также как и на линухе. Вопрос в том есть ли хоть какие то возможности или методы ускорить вызов? Возможно я что-то не досмотрел в документации или в реализации библиотеки. Может кто-то с таким боролся. Ниже коды функций Объявление процедуры в базе: Код: plaintext 1. Код функции используемой в запросах: Код: plaintext 1. 2. 3. 4. 5. 6. С-ишная функция в библиотеке построена на базе примера в самплах Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 14:11 |
|
||
|
ASA 11/12 как ускорить вызов внешних функций (external call interface) ?
|
|||
|---|---|---|---|
|
#18+
А может быть сразу UDF как External обьявить, типа того: Код: plaintext 1. Код: plaintext 1. P.S. И еще прогоните просто UDF с заремаренным вызовом внешней процедуры. Может быть это она вообще тормозит, а не вызов внешней функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 22:14 |
|
||
|
ASA 11/12 как ускорить вызов внешних функций (external call interface) ?
|
|||
|---|---|---|---|
|
#18+
ASCRUSили даже так, если обращений к БД из функций нету: Код: plaintext 1. +1. Для начала - убрать external environment. Тестить не на чем, ибо сижу на десятке, но по логике вещей external environment д.б. заметно тормознее in-process DLL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2011, 22:13 |
|
||
|
ASA 11/12 как ускорить вызов внешних функций (external call interface) ?
|
|||
|---|---|---|---|
|
#18+
Dim2000, ASCRUS, Спасибо, все верно, объявлять нужно без директивы "language", а также верно указывать номер параметра в сишной реализации api->set_value(); Т.к. оказалось что в моем случае OUT параметр процедуры dll_Encrypt - 1. При работе через external environment out параметр устанавливался таким образом: api->set_value( arg_handle, 0 , &retval, 0 ); и процедура возвращала закриптованное значение, то при работе как native-call выходное значение нужно устанавливать так: api->set_value( arg_handle, 1 , &retval, 0 ); иначе функция выполнялась но в оуте возвращала те же данные которые в нее и передавались. Касательно же скорости, выполнение внешних функций в external environment, при условии что эти функции используются для преобразования полей в запросах просто не пригодна. Для примера, select из 1ой таблицы с простым DES криптованием 2х полей при native-call вызове внешней функции выполнился за 25сек на 250K записях. А вызов того-же самого select-а но с вызовом внешней функции через external environment за те же 25сек смог обработать только 15-16К записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2011, 17:59 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=55&tid=2010230]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 355ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...