powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / сжатие CLOB
10 сообщений из 10, страница 1 из 1
сжатие CLOB
    #35362714
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть таблица, есть пара полей CLOB содержащие большие объемы "повторяющейся" информации в каждой записи. есть желание при отдаче "наружу" на клиент через сеть гнать CLOB в сжатом виде и на клиенте разжимать - экономия трафика _очень_ существенная чтоб ради нее заморачиваться.

может у кого есть наработка хранимой функции на жабе которая на входе принимает CLOB а на выходе выдает сжатый BLOB?

Если жизнь так коротка, какой смысл куда-то спешить?!
...
Рейтинг: 0 / 0
сжатие CLOB
    #35363714
Сжатие/разжатие это ресурсоемкая операция, и применение в этом случае ява-хранимых может привести к излишнему потреблению мощностей.
ИМХО лучше это реализовывать как External-функцию ну скажем на чистом C.

Есть еще вариант, сделать SSL-туннель, т.к. в SSL есть алгоритмы для сжатия передаваемого потока данных. И это не потребует модификации прикладного ПО. Сжатием/расжатием будет заниматься транспорт.
В DB2 есть собственная реализация работы по SSL, но пока не проверял поддерживается ли там сжатие, по идее должно.
Сделать SSL-туннель несложно, методика достаточно хорошо описана в интернет-ресурсах.
...
Рейтинг: 0 / 0
сжатие CLOB
    #35364056
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сжатие конечно ресурсоемко, но затраты по времени в сумме меньше чем толкать эти "тучные" CLOB вголую через узкий канал.

просто после замеров под высокой нагрузкой когда происходят лаги узкое место именно ширина канала - часть клиентов висит на 32-64 кбит средней паршивости. проца хватает с запасом поэтому скорость сжатия не особо волнует (на данном этапе по крайне мере)

ЗЫ. туннель пробовал - проблемы лезли из-за местных инфраструктурных тараканов на которую повлиять я не могу

Если жизнь так коротка, какой смысл куда-то спешить?!
...
Рейтинг: 0 / 0
сжатие CLOB
    #35364065
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗЫ2: сейчас клиенты с узким каналом сидят через VJDBC - но здесь тоже есть свои минусы

Если жизнь так коротка, какой смысл куда-то спешить?!
...
Рейтинг: 0 / 0
сжатие CLOB
    #35364141
В таком случае делай функцию. Можешь для начала и на Java.
Сами методики компрессии/декомпрессии встроены в JDK. Смотри классы в пакете java.util.zip.
Если производительность/нагрузка на сервер будет устраивать, можно конечно так и оставить. Но помнить, что это может оказаться узким местом.

А с туннелем какие проблемы возникли? Не хотят пропускать через брандмаузер?
...
Рейтинг: 0 / 0
сжатие CLOB
    #35364210
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сам код сжатия я накатаю - не проблема. меня в основном интересовало как правильно внутрь передать CLOB и наружу отдать BLOB - то бишь как параметры корректно объявить у функции.

у нас каналы не свои - у прова свое железо и софт стоит хз какой. плюс у нас свое железо. и все опутано vipnet (спущен сверху). плюс большая территориальная разнесенность и как следствие разнощерстность железа. в сумме - тошнотворный коктейль.

Если жизнь так коротка, какой смысл куда-то спешить?!
...
Рейтинг: 0 / 0
сжатие CLOB
    #35364318
gals
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему, тут задача чуточку неправильно поставлена...
Вы хотите, чтобы сервер при отдаче данных сжимал CLOB в BLOB меньшего объема.
Может быть, имеет смысл хранить в БД как CLOB так и готовый BLOB?
Дело в том, что операций вставки идет значительно меньше, чем операций чтения записей... Или я ошибаюсь?
...
Рейтинг: 0 / 0
сжатие CLOB
    #35364368
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть сторонний софт который работает в том числе и с этой базой, заточен на CLOB и который переписывать никто не собирается. для себя я просто сделаю второй вариант хранимок (6 штук) которые отдают наружу вместо CLOB сжатые BLOB и все. и можно будет выбирать прямо на клиенте со сжатыми или нет данными работать "на ходу".

по идее можно бы было хранить данные в сжатом виде и если нужны не сжатые CLOB то разжимать перед отдачей. но тут не факт что быстрее получится - содержимое CLOB обновляется (перегенерируется на сервере) в среднем раз в сутки практически по всем записям. а на клиент за те же сутки отдается от силы 2-3% из них.

Если жизнь так коротка, какой смысл куда-то спешить?!
...
Рейтинг: 0 / 0
сжатие CLOB
    #35365480
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте:
Код: plaintext
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
// Zip.java
import java.io.*;
import java.util.zip.*;
import COM.ibm.db2.app.*;

public class Zip extends UDF {
   static final int BUFFER =  2048 ;
   
   public void zip(Clob clob, Blob b) throws Exception {
     b = Lob.newBlob();
     ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(b.getOutputStream()));
     char ca[] = new char[BUFFER];
     byte ba[] = new byte[ 2 *BUFFER];
     BufferedReader in = new BufferedReader(clob.getReader(), BUFFER);
     ZipEntry entry = new ZipEntry(".");
     zos.putNextEntry(entry);
     int count;
     while((count = in.read(ca,  0 , BUFFER)) != - 1 ) {
       for (int i= 0 ; i<count; i++) {
       	  ba[ 2 *i]   = (byte)(ca[i] & 0xff);
         ba[ 2 *i+ 1 ] = (byte)(ca[i] >>  8  & 0xff);
       }
       zos.write(ba,  0 ,  2 *count);
     }
     in.close();
     zos.close();
     set( 2 , b);
   }
   
   public void unzip(Blob b, Clob clob) throws Exception {
     clob = Lob.newClob(); 
     ZipInputStream zis = new ZipInputStream(new BufferedInputStream(b.getInputStream()));
     Writer out = clob.getWriter();
     if(zis.getNextEntry() != null) {
     	 char ca[] = new char[BUFFER];
    	 byte ba[] = new byte[ 2 *BUFFER];
       int count;
       while((count = zis.read(ba,  0 ,  2 *BUFFER)) != - 1 ) {
      	 for (int i= 0 ; i<count/ 2 ; i++) {
      		 ca[i] = (char)(((ba[ 2 *i+ 1 ] & 0xff) <<  8 ) | (ba[ 2 *i] & 0xff));
      	 }
         out.write(ca,  0 , count/ 2 );
       }
     }  
     zis.close();
     out.close();
     set( 2 , clob);
  }
}   
Класс положить в %DB2PATH%/FUNCTION
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create function zip(c clob(2m))
RETURNS blob(1m)
LANGUAGE java
EXTERNAL NAME 'Zip.zip'
FENCED THREADSAFE
NO SQL
NOT NULL CALL
NO EXTERNAL ACTION
DISALLOW PARALLEL
PARAMETER STYLE db2general;

create function unzip(c blob(1m))
RETURNS clob(2m)
LANGUAGE java
EXTERNAL NAME 'Zip.unzip'
FENCED THREADSAFE
NO SQL
NOT NULL CALL
NO EXTERNAL ACTION
DISALLOW PARALLEL
PARAMETER STYLE db2general;
...
Рейтинг: 0 / 0
сжатие CLOB
    #35366386
Alexei Zaycev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пасиб, попробую

Если жизнь так коротка, какой смысл куда-то спешить?!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / сжатие CLOB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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