powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сжатие Clob при помощи GZip
24 сообщений из 24, страница 1 из 1
Сжатие Clob при помощи GZip
    #39767055
SergK248
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
У меня есть XML, хранящийся в CLOB.
Oracle 11g.
Мне нужно сжать его при помощи GZip.
Как это сделать?
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767059
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В типе CLOB хранятся данные какого типа?
А файл GZip - это какой тип данных?
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767068
SergK248
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хранится структура XML в виде строки. Пока вижу выход в использовании Java под Oracle, где есть GZIPOutputStream. Но нормально сжать Clob не удается.
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767070
SergK248
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
C Java никогда не сталкивался. Попробовал написать процедуру, но нужного результата не получаю.
public static void gZipCompress(CLOB pInData, CLOB pOutData) {
try {
InputStream in = pInData.getAsciiStream();
ByteArrayOutputStream z = new ByteArrayOutputStream();
byte[] aDataToCompress = new byte[pInData.getBufferSize()];
int cnt;
while ((cnt = in.read(aDataToCompress))!=-1) {
z.write(aDataToCompress, 0, cnt);
}
in.close();
z.close();

ByteArrayOutputStream byteStream = new ByteArrayOutputStream(aDataToCompress.length);
java.io.OutputStream out;
try {
GZIPOutputStream zipStream = new GZIPOutputStream(byteStream);
try {
zipStream.write(aDataToCompress);
} finally {
zipStream.close();
}
} finally {
byteStream.close();
}
byte[] compressedData = byteStream.toByteArray();

out = ((CLOB)pOutData).getAsciiOutputStream();
out.write(compressedData);
out.flush();
out.close();
} catch (Exception e) {
//
}
}
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767084
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergK248Хранится структура XML в виде строки. Пока вижу выход в использовании Java под Oracle, где есть GZIPOutputStream. Но нормально сжать Clob не удается.
Самоответы на мои вопросы:

- В типе CLOB хранятся данные какого типа?
- В типе CLOB хранятся данные символьного типа.
При передаче по сети они могут быть перекодированы из кодировки базы в кодировку клиента и наоборот.

- А файл GZip - это какой тип данных?
- Файл GZip - это двоичные данные. При передаче по сети они не должны перекодироваться.

Вывод:
Не нужно хранить Файл GZip в полях типа CLOB.
Для хранения таких данных есть поля типов BLOB и BFILE.
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767085
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergK248сжать его при помощи GZip.lz_compress совместим с gunzip
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767089
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergK248C Java никогда не сталкивался. Попробовал написать процедуру, но нужного результата не получаю.
Код: java
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.
27.
28.
29.
30.
31.
32.
33.
34.
  public static void gZipCompress(CLOB pInData, CLOB pOutData) {
      try {
          InputStream in = pInData.getAsciiStream();
          ByteArrayOutputStream z = new ByteArrayOutputStream();
          byte[] aDataToCompress = new byte[pInData.getBufferSize()];
          int cnt;
          while ((cnt = in.read(aDataToCompress))!=-1) {
                z.write(aDataToCompress, 0, cnt);
          }
          in.close();
          z.close();          

          ByteArrayOutputStream byteStream = new ByteArrayOutputStream(aDataToCompress.length);
          java.io.OutputStream out;
          try {
              GZIPOutputStream zipStream = new GZIPOutputStream(byteStream);
              try {
                  zipStream.write(aDataToCompress);
              } finally {
                  zipStream.close();
              }
          } finally {
              byteStream.close();
          }
          byte[] compressedData = byteStream.toByteArray();
          
          out = ((CLOB)pOutData).getAsciiOutputStream();
          out.write(compressedData);
          out.flush();
          out.close();
      } catch (Exception e) {
          //
      }
  }



При публикации кода используйте, пожалуйста, тег SRC.
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767094
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergK248,

Да терабайты же ссылок в google dbms_lob.converttoblob + utl_compress, где хранить сжатый xml потом - вольному воля

Regards

Maxim
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767100
SergK248
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно хранить XML именно в Clob в символьном виде, а сжимать в GZip только для передачи данных. Причем XML могут быть большими, за пределами Varchar2(40000)
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767101
SergK248
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
varchar - 4000
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767102
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim DemenkoSergK248,

Да терабайты же ссылок в google dbms_lob.converttoblob + utl_compress, где хранить сжатый xml потом - вольному воля

Regards

MaximТерабайты ссылок никому не нужны, если человек только начинает и не может пока грамотно формулировать вопросы.
Ему нужна подсказка и помощь.
Для этого и есть форум.

Если бы вы на свой вопрос получали терабайт ссылок, что бы вы с ними делали? :-)
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767105
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergK248Мне нужно хранить XML именно в Clob в символьном виде, а сжимать в GZip только для передачи данных. Причем XML могут быть большими, за пределами Varchar2(40000)Воооот!
Уже новые подробности.
Так постепенно и учатся правильно задавать вопросы!

SergK248Всем привет!
У меня есть XML, хранящийся в CLOB.
Oracle 11g.
Мне нужно сжать его при помощи GZip.
Мне нужно хранить XML именно в Clob в символьном виде, а сжимать в GZip только для передачи данных.
Причем XML могут быть большими, за пределами Varchar2(40000)
Как это сделать?Ждём новые подробности...
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767114
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SergK248,

а зачем? оракловый sqlnet поддерживает компрессию и может сам сжимать для передачи по сети
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767115
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767118
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plusчеловек только начинает и не может пока грамотно формулировать вопросы.

ИМХО - измышлизм

ТС вполне внятно задал свой вопрос и никто сжатый XML в CLOB хранить не собирается.

Regards

Maxim
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767121
SergK248
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне по специфике задачи нужно сжатие именно GZip-ом, т.к. на стороне WS, которому я передаю запрос, расшифровка и отправка ответа происходит именно в GZip
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767134
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergK248на стороне WS, которому я передаю запроскто на ком стоял?
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767139
SergK248
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я намеренно не хочу вдаваться в детали задачи, хранении данных и обсуждать ненужные подробности.
Повторю основную задачу, мне нужно переменную типа Clob, где хранится большая строка(больше Varchar2) сжать обязательно только при помощи GZip. Навскидку вижу решение в задействовании Java, код процедуры приложил выше.
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767154
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergK248обязательно только при помощи GZipА как получатель сего определит, сжато оно обязательно или только?
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767189
SergK248
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу повториться, совершенно неважно, как я взаимодействую с получателем. Еще раз все таки напишу суть моего вопроса:
мне нужно переменную типа Clob, где хранится большая строка(больше Varchar2) сжать обязательно только при помощи GZip
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767197
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderSergK248,

а зачем? оракловый sqlnet поддерживает компрессию и может сам сжимать для передачи по сети

https://www.oracle.com/technetwork/database/enterprise-edition/advancednetworkcompression-2141325.pdf
https://blogs.oracle.com/dbstorage/advanced-network-compression-a-lesser-known-feature-of-advanced-compression
Для легального использования Advanced Network Compression
требуется лицензировать (купить) опцию Advanced Compression.

Oracle Database Options and Their Permitted Features
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767316
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
https://docs.oracle.com/cd/B13789_01/appdev.101/b10802/u_compr.htm#999326
The output of the UTL_COMPRESS compressed data is compatible with gzip(with -n option)/gunzip on a single file.
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767318
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Сжатие Clob при помощи GZip
    #39767320
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и вот это с прода (не моё)
Код: plsql
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.
27.
28.
29.
30.
31.
32.
33.
34.
  function compressClobMessage(p_message IN CLOB)
    return BLOB IS
    l_original_blob      BLOB;
    l_compressed_blob    BLOB;
    v_dest_offset NUMBER := 1;
    v_src_offset NUMBER := 1;
    v_amount INTEGER := dbms_lob.lobmaxsize;
    v_blob_csid NUMBER := dbms_lob.default_csid;
    v_lang_ctx INTEGER := dbms_lob.default_lang_ctx;
    v_warning INTEGER;
    BEGIN
      if p_message is null then
        return null;
      end if;
      --
      DBMS_LOB.CREATETEMPORARY(lob_loc=>l_original_blob, cache=>TRUE);
      DBMS_LOB.CREATETEMPORARY(lob_loc=>l_compressed_blob, cache=>TRUE);
      --
      begin
        DBMS_LOB.CONVERTTOBLOB(l_original_blob,p_message,v_amount,v_dest_offset,v_src_offset,v_blob_csid,v_lang_ctx,v_warning);
        if v_warning <> DBMS_LOB.NO_WARNING then
          RAISE_APPLICATION_ERROR(-20001, 'Character in source cannot be properly converted to BLOB!');
        end if;
        UTL_COMPRESS.lz_compress (src => l_original_blob, dst => l_compressed_blob);
        exception
        when others then
        DBMS_LOB.FREETEMPORARY(l_original_blob);
        DBMS_LOB.FREETEMPORARY(l_compressed_blob);
        raise;
      end;
      --
      DBMS_LOB.FREETEMPORARY(l_original_blob);
      return l_compressed_blob;
    end compressClobMessage; 
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сжатие Clob при помощи GZip
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]