Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сжатие Clob при помощи GZip / 24 сообщений из 24, страница 1 из 1
30.01.2019, 14:50
    #39767055
SergK248
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
Всем привет!
У меня есть XML, хранящийся в CLOB.
Oracle 11g.
Мне нужно сжать его при помощи GZip.
Как это сделать?
...
Рейтинг: 0 / 0
30.01.2019, 14:53
    #39767059
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
В типе CLOB хранятся данные какого типа?
А файл GZip - это какой тип данных?
...
Рейтинг: 0 / 0
30.01.2019, 14:59
    #39767068
SergK248
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
Хранится структура XML в виде строки. Пока вижу выход в использовании Java под Oracle, где есть GZIPOutputStream. Но нормально сжать Clob не удается.
...
Рейтинг: 0 / 0
30.01.2019, 15:03
    #39767070
SergK248
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
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
30.01.2019, 15:12
    #39767084
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
SergK248Хранится структура XML в виде строки. Пока вижу выход в использовании Java под Oracle, где есть GZIPOutputStream. Но нормально сжать Clob не удается.
Самоответы на мои вопросы:

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

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

Вывод:
Не нужно хранить Файл GZip в полях типа CLOB.
Для хранения таких данных есть поля типов BLOB и BFILE.
...
Рейтинг: 0 / 0
30.01.2019, 15:12
    #39767085
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
SergK248сжать его при помощи GZip.lz_compress совместим с gunzip
...
Рейтинг: 0 / 0
30.01.2019, 15:14
    #39767089
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
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
30.01.2019, 15:16
    #39767094
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
SergK248,

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

Regards

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

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

Regards

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

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

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

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

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

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

Regards

Maxim
...
Рейтинг: 0 / 0
30.01.2019, 15:33
    #39767121
SergK248
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
мне по специфике задачи нужно сжатие именно GZip-ом, т.к. на стороне WS, которому я передаю запрос, расшифровка и отправка ответа происходит именно в GZip
...
Рейтинг: 0 / 0
30.01.2019, 15:41
    #39767134
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
SergK248на стороне WS, которому я передаю запроскто на ком стоял?
...
Рейтинг: 0 / 0
30.01.2019, 15:47
    #39767139
SergK248
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
Я намеренно не хочу вдаваться в детали задачи, хранении данных и обсуждать ненужные подробности.
Повторю основную задачу, мне нужно переменную типа Clob, где хранится большая строка(больше Varchar2) сжать обязательно только при помощи GZip. Навскидку вижу решение в задействовании Java, код процедуры приложил выше.
...
Рейтинг: 0 / 0
30.01.2019, 15:55
    #39767154
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
SergK248обязательно только при помощи GZipА как получатель сего определит, сжато оно обязательно или только?
...
Рейтинг: 0 / 0
30.01.2019, 16:24
    #39767189
SergK248
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
Хочу повториться, совершенно неважно, как я взаимодействую с получателем. Еще раз все таки напишу суть моего вопроса:
мне нужно переменную типа Clob, где хранится большая строка(больше Varchar2) сжать обязательно только при помощи GZip
...
Рейтинг: 0 / 0
30.01.2019, 16:39
    #39767197
Валерий Юринский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
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
30.01.2019, 21:10
    #39767316
rpovarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
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
30.01.2019, 21:11
    #39767318
rpovarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
...
Рейтинг: 0 / 0
30.01.2019, 21:16
    #39767320
rpovarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сжатие Clob при помощи GZip
Ну и вот это с прода (не моё)
Код: 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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сжатие Clob при помощи GZip / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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