подключить свою dll и функцию из нее

crause
Дата: 05.04.2015 20:09:26
есть dll написанная на (с++ или delphi)
в ней есть экмпортируемые функции которые производят очень тяжелый расчет по данным из базы.
т.е. при вызове функции dll будет тянуть данные из базы и проводить по ним расчет.

можно ли при помощи расширения, либо каких то функций на "си" создать хп которая будет дергать эту экспортируемую функцию из dll???

и что можете посоветовать вообще по сабжу.
mad_nazgul
Дата: 06.04.2015 07:29:51
crause
есть dll написанная на (с++ или delphi)
в ней есть экмпортируемые функции которые производят очень тяжелый расчет по данным из базы.
т.е. при вызове функции dll будет тянуть данные из базы и проводить по ним расчет.

можно ли при помощи расширения, либо каких то функций на "си" создать хп которая будет дергать эту экспортируемую функцию из dll???

и что можете посоветовать вообще по сабжу.


Можно... Если написать ХП на C.
crause
Дата: 06.04.2015 08:49:43
mad_nazgul
Можно... Если написать ХП на C.

Раз так еще пара вопросов.

1. Могли бы подсказать примерное время выполнения такой ХП?
(экспортируемая функция к примеру будет считать a+b)

2. Можно будет и каким образом (ткните в направление) держать dll в памяти что бы уменьшить время выполнения ХП?
mad_nazgul
Дата: 06.04.2015 09:14:41
crause
mad_nazgul
Можно... Если написать ХП на C.

Раз так еще пара вопросов.

1. Могли бы подсказать примерное время выполнения такой ХП?
(экспортируемая функция к примеру будет считать a+b)


Этого я не знаю.
Может ли PostgreSQL правильно создать план запроса по ХП.

crause
2. Можно будет и каким образом (ткните в направление) держать dll в памяти что бы уменьшить время выполнения ХП?


Тут надо читать документацию разработчика.
Какова стратегия работы с ХП.
crause
Дата: 06.04.2015 10:01:17
Спасибо. Буду тужиться.

Если кто нибудь еще что нибудь скажет по делу, буду рад.
vyegorov
Дата: 06.04.2015 10:48:00
crause,

Рекомендую найти что-то похожее и смотреть как сделано.
Правда Постгрес не только в винде работает и потому только-dll решения навряд ли кто-то выкладывает в публичный доступ.
p2.
Дата: 06.04.2015 11:11:12
crause
при вызове функции dll будет тянуть данные из базы
то есть БД будет вызывать процедуру, которая будет вызывать БД?

crause
держать dll в памяти
На то она и dll, чтобы быть в памяти. По крайней мере, пока все процессы (сессии БД), использовавшие ее, не завершатся. Для быстроты можно слинковать с postgres, но это только сэкономит микросекунды на первом вызове.

mad_nazgul
план запроса по ХП
что это?
crause
Дата: 06.04.2015 12:06:25
p2.
то есть БД будет вызывать процедуру, которая будет вызывать БД?

)) да. Я понимаю что это бред, но переписать всю логику по расчету в бд очень тяжело, вернее очень много кода + плохие знания postgresql.
Если удастся все таки сделать такое и будет норм по времени выполнения, в планах передавать сразу данные которые нужны dll из базы.
mad_nazgul
Дата: 06.04.2015 13:47:04
p2.
crause
при вызове функции dll будет тянуть данные из базы
то есть БД будет вызывать процедуру, которая будет вызывать БД?


Это нормально.
ХП на C так работают.
Туда передается соединение с БД, ч/з который все работает.
p2.
Дата: 06.04.2015 14:54:25
mad_nazgul
p2.
пропущено...
то есть БД будет вызывать процедуру, которая будет вызывать БД?


Это нормально.
ХП на C так работают.
Туда передается соединение с БД, ч/з который все работает.
Не про это я спрашивал. "Хранимые процедуры", независимо от языка, могут использовать контекст вызвавшей процедуру сессии и работать в ней, а могут создавать новое подключение. Второе ненормально и используется только для определенных задач, где специально нужны несвязанные транзакции в ущерб потере производительности.