Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 varchar(4000) или CLOB или ДНК?  [new]
Rostislav74
Member

Откуда:
Сообщений: 138
Есть большая логовая таблица.
В нее ежесекундно пишется информация по работе системы.
В этой таблице есть поле varchar(4000) в которую пишется что то типа XML и в 99% случаев он короткий и помещается в размер 4К
...более того 70% размер информации имеет вообще 100-200 байт...

Но есть один процент данных который не входит в 4К... приходилось верезать "ненужное"...

Что лучше сделать:
1.Перевести поле на CLOB... но боюсь может замедлить логирование и повысить нагрузку...
2.Сделать еще одно поле varchar(4000) и резать на части... что как то не по спортивному...
3.Может есть другой выход на который я не могу выйти своим умом...


PS

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production


Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
2 апр 12, 14:41    [12351548]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Rostislav74
Но есть один процент данных который не входит в 4К... приходилось верезать "ненужное"...

clob enable storage in row?
2 апр 12, 14:48    [12351621]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
Rostislav74
Member

Откуда:
Сообщений: 138
AmKad
Rostislav74
Но есть один процент данных который не входит в 4К... приходилось верезать "ненужное"...

clob enable storage in row?


сейчас да... но можно сделать и обратное...
ALTER TABLE ... MOVE LOB( ... ) STORE AS( DISABLE STORAGE IN ROW )
2 апр 12, 15:00    [12351716]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
ORA__SQL
Member

Откуда: Moscow
Сообщений: 1774
Rostislav74
AmKad
пропущено...
clob enable storage in row?

сейчас да... но можно сделать и обратное...
ALTER TABLE ... MOVE LOB( ... ) STORE AS( DISABLE STORAGE IN ROW )

А смысл? Lob сегмент раздуется, т.к.
Rostislav74
...более того 70% размер информации имеет вообще 100-200 байт...
2 апр 12, 15:32    [12351950]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9278
Rostislav74
... но боюсь может замедлить логирование и повысить нагрузку...

Если важна скорость - тестировать на конкретных средствах разработки.

Лично я бы, если есть гарантия, что XML всегда меньше 8 Kb - резал бы на два Varchar2. Сталкивался, что ряд средств работы с БД, давали значительно меньшею (в порядки) скорость работы с blob / clob, чем с varchar2 или даже вообще не умели работать с blob/clob ))).

Я бы сделал бы простейший тест и посмотрел, какая разница. Если разницы нет, то тогда делать по нормальному. Если разница существенная, то выбирать, что важнее: прямой и красивый код или скорость работы и код через одно место.
2 апр 12, 15:46    [12352082]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Rostislav74,

если таблица таки логовая, то я бы в случае >4000 засунул хвост в еще одну строку.
2 апр 12, 16:40    [12352577]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
Клоб
Guest
Rostislav74
Что лучше сделать:


"лучше" - для кого/чего ? Под какие задачи ищешь решение ?
3 апр 12, 03:35    [12354606]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
Rostislav74
Member

Откуда:
Сообщений: 138
Клоб
Rostislav74
Что лучше сделать:


"лучше" - для кого/чего ? Под какие задачи ищешь решение ?


Речь о логировании действий пользователей в системе...
Работает одновременно около 1500-2000 пользователей по всей России с базой данных...
Определенные действия (настраивается из интерфейса службой безопасности, часть зашиты и отключить нельзя) логируются

собираются данные и пишутся в поле примерно в следующим виде:
<FIELD name="NAME" old="Смирнов В.В." new="Вундер В.В." /> 
<FIELD name="NAME_FULL" old="Смирнов Вадим Владимирович" new="Вундер Виталий Викторович" /> 
<FIELD name="FIZ_SEX" old="" new="1" /> 
<FIELD name="FIZ_BIRTH_DATE" old="" new="16.02.1973 00:00:00" />


работают не браузером, а приложением... каналы свои...
Данные в лог генерятся на сервере...
3 апр 12, 13:20    [12356674]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Rostislav74,

Смотря что понимать под лучше.

Можно, например два поля иметь короткую версию лога (если нужна для поиска) в varchar
, а длинную в CLOB.
3 апр 12, 15:19    [12357896]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
-2-
Member

Откуда:
Сообщений: 15330
orawish
если таблица таки логовая, то я бы в случае >4000 засунул хвост в еще одну строку.
извращаться лучше с особым цинизмом
create or replace function cmprs (c clob) return raw as
   r raw(32000);
begin
   r := utl_raw.cast_to_raw(c);
   r := utl_compress.lz_compress(r, 9);
   return r;
end;
/

with t as (
  select dbms_metadata.get_xml('TABLE','TAB$','SYS') x
  from dual
)
select length(x), length(cmprs(x)) from t;

LENGTH(X) LENGTH(CMPRS(X))
--------- ----------------
    24426             3990 
3 апр 12, 16:24    [12358625]     Ответить | Цитировать Сообщить модератору
 Re: varchar(4000) или CLOB или ДНК?  [new]
Клоб
Guest
Rostislav74
Клоб
пропущено...


"лучше" - для кого/чего ? Под какие задачи ищешь решение ?


Речь о логировании действий пользователей в системе...
[src XML]
<FIELD name="FIZ_SEX" old="" new="1" /> .


К сожалению, это не ответ на поставленный вопрос.
Лучше это что :
1. Максимально быстрая вставка данных
2. Минимум занимаемого пространства при хранении
3. Максимально быстрое извлечение данных ( для каких запросов ?)
4. Простота администрирования данных
5. И тд

А приведенный кусок xml вообще парсится и укладывается в простую реляционую таблицу ( если кто-то вообще собирается читать эти xml-и :) )
4 апр 12, 03:38    [12361450]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить