Обработка данных на Java в Oracle

Всегда ли Oracle — лучший инструмент или приложение для обработки данных? Ответ кроется в том, что вы делаете. Обычно данные преобразуются с помощью языка обработки данных, но они также могут быть преобразованы с помощью обработки строк или чисел. Чтобы различать эти типы обработки, предположим, что данные хранятся в области DML, каковы выходные или отображаемые данные или как сохраненные данные отображаются для пользователя. Простым примером для этого случая является дата. То, что сохраняется, может потребоваться отобразить по-разному. Примеры: 8 марта 2007 г. и 3 августа 2007 г .; Это зависит от того, что хотите видеть вы или ваши пользователи.

Основное внимание в этой статье уделяется тому, как вы можете получить от сохраненных вещей, чтобы как-то это показать. Этот фокус относится к проблемам, обрабатываемым вокруг строки или числа. Предположим, у вас есть приложение, которое поддерживает статистику или обеспечивает голосование пользователей через Интернет. Нажатие, чтобы отправить в форме онлайн-статистики, статистику по идентификатору или по номеру учетной записи, которая будет передана в качестве одной из пар имя-значение в URL-адресе, это часто встречающаяся проблема. в ваших идентификаторах.

Другой способ использования этого механизма прямой передачи — проверка или ограничение вашего использования. Голосование, будь то в бумажной или электронной форме, представлено в цифровом формате. Очень большие числа затрудняют их подделку, когда их плотность более разнесена.
Проблема, однако, в том, что передача 22-значного числа штрих-кодов, например, занимает пространство или длину в URL-адресе (ограничение 255 или 256 символов). Здесь нужно, как сократить большое число до меньшего.

Один из способов решения этой проблемы — взять числа в системе с основанием 10 и преобразовать их в числа в системе с основанием 36, таким образом вы сэкономите место. Как бы вы это сделали в Oracle?

PL / SQL метод

Рассмотрим метод PL / SQL. Код оптимизирован на биты, в которых коэффициенты имеют скачок в форме повторения или повторения, используемого в учетных записях. Он также полагается на текущий ввод с минимум 22 цифрами.

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ gen_barcode36 (i_coupon_number НОМЕР)
ВОЗВРАТ VARCHAR2 ЯВЛЯЕТСЯ
v_number номер;
v_curval число;
число v_curinc: = мощность (36,14);
номер v_true: = 0;
номер v_pos: = 15;
v_dec_count число: = 0;
номер v_pos_val: = 0;
номер v_cur_num: = 0;
v_test_num число: = 0;
номер v_new_num: = 0;
v_cur_digit char: = »;
v_new_val varchar2 (15): = »;
НАЧИНАТЬ
v_number: = i_coupon_number;
цикл while (v_true = 0)
v_curinc: = v_curinc * 36;
v_curval: = v_number / v_curinc;
если (v_curval v_true: = 1;
еще
v_pos: = v_pos + 1;
конец, если;
конец петли;
v_dec_count: = v_pos;
v_new_val: = NULL;
v_cur_num: = v_number;
WHILE (v_dec_count> 0) LOOP
v_pos_val: = мощность (36, v_dec_count — 1);
v_test_num: = trunc (v_cur_num / v_pos_val);
выберите decode (v_test_num, 35, ‘z’, 34, ‘y’, 33, ‘x’,
32, ‘w’, 31, ‘v’, 30, ‘u’,
29, t, 28, s, 27, r,
26, q, 25, p, 24, O,
23, n, 22, m, 21, l,
20, ‘k’, 19, ‘j’, 18, ‘i’,
17, ‘h’, 16, ‘g’, 15, ‘f’,
14, ‘e’, ​​13, ‘d’, 12, ‘c’,
11, ‘б’, 10, ‘а’, 9, ‘9’,
8, «8», 7, «7», 6, «6»,
5, 5, 4, 4, 3, 3,
2, ‘2’, 1, ‘1’, ‘0’)
INTO v_cur_digit FROM DUAL;
ЕСЛИ (v_new_val IS NOT NULL) ТО
v_new_val: = v_new_val || v_cur_digit;
ЕЩЕ
v_new_val: = v_cur_digit;
КОНЕЦ ЕСЛИ;
v_cur_num: v_cur_num = — (v_pos_val * v_test_num);
v_dec_count: = v_dec_count — 1;
КОНЕЦ ПЕТЛИ;
ВОЗВРАТ v_new_val;
END gen_barcode36;
/

К другой версии этого метода прикреплен вывод, поэтому вы можете увидеть, как уменьшаются числа.

SQL> выберите gen_barcode36 (770000000000000000000000) из двойного;
GEN_BARCODE36 (7,7 миллиардов триллионов)
————————————————— —
1950zn8fqxjygow
Начиная с 7,7 млрд млрд.
Должность: 6140942214464815497216 текущий номер: 1
Позиция 14 текущее значение: 1
Должность: 170581728179578208256 текущий номер: 9
Позиция 13 текущее значение: 19
Должность: 4738381338321616896 текущий номер: 5
Позиция 12 текущее значение: 195
Должность: 131621703842267136 текущий номер: 0
Позиция 11 текущее значение: 1950
Должность: 3656158440062976 текущий номер: 35
Позиция 10 текущее значение: 1950z
Должность: 101559956668416 текущий номер: 23
Позиция 9 текущее значение: 1950zn
Должность: 2821109907456 текущий номер: 8
Позиция 8 текущее значение: 1950zn8
Должность: 78364164096 текущий номер: 15
Текущее значение позиции 7: 1950zn8f
Должность: 2176782336 текущий номер: 26
Текущее значение позиции 6: 1950zn8fq
Должность: 60466176 текущий номер: 33
Текущее значение позиции 5: 1950zn8fqx
Позиция: 1679616 текущий номер: 19
Текущее значение позиции 4: 1950zn8fqxj
Должность: 46656 текущий номер: 34
Текущее значение позиции 3: 1950zn8fqxjy
Позиция: 1296 текущий номер: 16
Текущее значение позиции 2: 1950zn8fqxjyg
Позиция: 36 текущий номер: 24
Текущее значение позиции 1: 1950zn8fqxjygo
Позиция: 1 текущий номер: 32
Позиция 0 текущее значение: 1950zn8fqxjygow
Конечное значение: 1950zn8fqxjygow

Это не означает безопасность через неясный статус. Однако из-за странной строки большинству пользователей будет сложно вычислить то, что отображается.

Если значение принимается во внимание, производительность обработки данных «ОК», но сколько времени потребуется, чтобы создать миллион значений? Создайте таблицу с 3 столбцами. Первый столбец — это базовый столбец 10, второй столбец — это значение, обработанное базовым числом 36 с использованием кода PL / SQL Server, приведенного выше, а третий столбец зарезервирован для вывода с использованием другого значения для переменной, изменяющей числа. Создайте таблицу и включите миллион записей. Отрегулируйте время, чтобы увидеть, сколько времени потребуется для создания этих 36 базовых значений.

SQL> создать таблицу base36
2 (номер штрих-кода,
3 plsql_ver varchar2 (15),
4 other_ver varchar2 (15));
Создать таблицу.
SQL> создать последовательность barcode_seq start с 7,7 миллиарда триллионов;
Создайте карту.

SQL> начать
2 для i в цикле 1.1000000
3 вставить в значения base36 (штрих-код) (barcode_seq.nextval);
4 концевых петли;
5 конец;
6 /
Процедура PL / SQL успешно завершена.
SQL> совершает;
Полная фиксация.
SQL> установить время на
SQL> обновить base36 установить plsql_ver = gen_barcode36 (штрих-код);
Обновлено 1000000 строк.
Прошло: 00: 33: 09.01

<

p style=»text-align: justify;»>Скорость работы более 500 копий / сек.

Может ли PLATFORM / SQL быстро выполнить эту задачу? Эта проблема является хорошим примером, поскольку мы лучше используем язык в общении, в то время как PL / SQL выполняет преобразование данных. Хороший метод в этом случае будет использоваться для обработки строк в Java и другого присоединенного метода (для строк).

Как поместить Java-код в базу данных?

Во-первых, нам нужно иметь файл Java с соответствующим кодом в нем. Второй — загрузить код (исходную или скомпилированную версию) в базу данных. Третий — это компиляция кода, а затем последний шаг — создание функции или процедуры-оболочки вокруг кода Java. Эта функция называется объектом имени Oracle, она вызывает объект имени Java.

Исходный код.

import java.math.BigInteger;
import java.lang.String;
открытый класс BCUtils
{
общедоступная статическая строка getBarcode36 (строка barcode10)
{
Строковое значение = новая строка (barcode10);
BigInteger bigI = новый BigInteger (value.toString ());
Результат StringBuffer = новый StringBuffer (bigI.toString (36));
вернуть result.toString ();
}
}

Загрузите исходный файл и скомпилируйте его.

Изображение 1 обработки данных в Java в Oracle

Создать обертку / функцию публикации

SQL> создать или заменить функцию get_bc36 (bc_10 varchar2)
2 вернуть varchar2
3 как имя языка java
4 ‘BCUtils.getBarcode36 (java.lang.String) return java.lang.String’;
5 /
Конструктор.

Проверить разницу

SQL> обновить base36 установить other_ver = get_bc36 (штрих-код);
Обновлено 1000000 строк.
Прошло: 00: 13: 56.22

Скорость работы достигает 1200 / с, что вдвое выше, чем у версии PLATFORM / SQL. Это почему? Oracle признает, что PL / SQL не самый быстрый язык в мире и не лучший язык для обработки строк.

Список важных шагов, представленных в разделе «Шаги хранимых процедур Java» руководства Java Developer.

Заключить

PL / SQL может делать много хороших вещей, но другие языки могут делать намного лучше. Это можно проверить с помощью измерения скорости. Если вы обнаружите, что сохраненные данные необходимо обработать для отображения на выходе, вам следует выбрать другой язык для поддержки, например, Oracle.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.