Не зная ваших точных требований, я могу высказать лишь некоторые общие замечания.
BLOBS в оракуле - не самый быстрый тип. Убедитесь, что вы не строите в
многие узкие места производительности в вашем дизайне, и запустить тесты производительности на
функциональность, которую вы создаете, как можно скорее, чтобы обеспечить ее соответствие требованиям.
dbms_lob - ваш друг. В частности, вам может пригодиться функция read и substr (для чтения частей большого двоичного объекта).
Держитесь подальше от внешних процедур в стиле C - они, вероятно, будут слишком медленными.
Функции PL / SQL имеют тенденцию быть намного быстрее. Я не знаю о процедурах Java. Как ява
Движок более интегрирован в Oracle, они могут быть очень хороши в использовании. Это может стоить
делает первоначальное подтверждение концепции для сравнения PL / SQL с Java.
С Java вы сможете читать данные в виде потока байтов [] и манипулировать ими.
это к вашему сердцу содержание с использованием мира Java. Внешние процедуры для Java легко выполнить - вы можете просто дать Oracle исходный код Java.
Для PL / SQL один метод, который мы нашли очень полезным, - это преобразование большого двоичного объекта в сырой, приведение к
varchar, а затем преобразовать его в гекс, затем манипулируя гекс (строки)
со стандартными строковыми функциями Oracle. То есть:
create or replace function retrieve_data_from_blob (
b blob
, tag_code
)
as
lw long raw;
data varchar(30000);
result varchar(100);
amount pls_integer := 30000;
begin
-- covert blob to long raw.
-- amount will hold total bytes read.
dbms_lob.read(b, amount, 1, lw);
data := util_raw.rawtohex(lw);
-- retrieve_embedded retrieves data tagged with tag_code
-- from internal binary structure by reading hex data
return retrieve_embedded(data, tag_code);
end;
/
Это будет работать для больших двоичных объектов размером до 15 КБ. Функция retrieve_embedded, например, может быть в состоянии прочитать первый «байт», выполнив substr(data, 1, 8)
, преобразовав его в десятичное число с помощью to_number(hexdata, 'xxxxxxxx')
, используя его как смещение ... и т. Д.