Внешняя процедура в СУБД - PullRequest
1 голос
/ 21 марта 2011

Если мы используем внешние процедуры, могу ли я выполнить некоторый код на другом языке, я хочу использовать некоторые библиотеки числовых методов для выполнения матричных вычислений и сохранения результата в SQL, Oracle или любой другой СУБД. Возможно ли это?

Возможно, у вас есть таблица на SQL, и для ее обработки нужно указать внешний код, я бы хотел, чтобы это было как можно быстрее.

  • Как это сделать?
  • Являются ли внешние процедуры лучшим выбором?

Ответы [ 3 ]

2 голосов
/ 21 марта 2011

Как правило.

CASE 
  WHEN "can do it in SQL" THEN SQL
  WHEN "can do it in PL/SQL" THEN PL/SQL
  WHEN "can do it in Java" THEN Java
  ELSE "External Procedure"
END

Как правило, «как можно быстрее» является плохой целью, поскольку приводит к трате огромного количества денег на самое лучшее оборудование (твердотельные накопители, высокая емкость, низкаясетевые компоненты с задержкой ...).«Как можно быстрее, учитывая бюджет в x долларов», лишь немного более разумно.

Выберите измеримую цель, например, 1 миллион элементов данных, обработанных за 10 минут.Тогда возьмите подход и время это.Если он слишком медленный, найдите самые медленные части (например, диск, сеть) и устраните их или оптимизируйте.

1 голос
/ 24 марта 2011

Ваш вопрос четко объясняет, чего вы хотите достичь. Из вашего профиля я вижу, что вы задаете много вопросов о Matlab, поэтому я предполагаю, что вы хотите знать об использовании функциональности Matlab для базы данных.

В Oracle внешняя процедура - это подпрограмма серверной ОС, которую мы можем вызвать из процедуры PL / SQL внутри базы данных. Обычное использование этой функциональности - включение в наш код эзотерической функциональности Си. В последние годы внешние процедуры стали менее популярными из-за значительного увеличения диапазона встроенных средств Oracle providss, а также расширяемости, которую мы получаем от хранимых процедур Java.

Преимущество хранимых процедур заключается в том, что они выполняются внутри базы данных, что делает их очень эффективными при обработке больших объемов записей. Если вы хотите запустить какую-то функцию Matlab, снова загружающую данные, тогда, возможно, вам следует использовать ее как внешнюю процедуру. По сути, вам нужно создать объект LIBRARY для DLL, а затем создать процедуры или функции PL / SQL для необходимых библиотечных вызовов. Узнать больше .

Однако серверы баз данных, как правило, оптимизированы для определенных типов операций, и интенсивная математика не входит в их число. Поэтому, если производительность является ключевым критерием, возможно, вам лучше заплатить пошлину за ввод-вывод и подключиться к базе данных через ODBC. Узнайте больше .

1 голос
/ 21 марта 2011

В зависимости от того, какие «матричные вычисления» вы хотите сделать, вы можете сделать это внутри самого Oracle (в 10gR2 и более поздних версиях), используя пакет UTL_NA .

...