|
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?fid=55&msg=37472886&tid=2010230]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 329ms |
total: | 489ms |
0 / 0 |