Diferenças entre Smart Large Object e Simple Large Object
SIMPLE LARGE OBJECT
- São os tipos TEXT e BYTE
- BYTE: Utilizado para salvar arquivos binarios como planilhas, programas,etc
- TEXT: Utilizado para salvar textos
- Limitações
- Tamanho em 2^31 (2 GB)
- Não podem ser utilizados em comparações (where)
- Não podem ser utilizados em SQL com funções agregadas: sum, avg,...
- Não podem ser utilizados em SQL com group by e order by
- Não podem ser utilizados em subquerys que são referencias com EXISTS ou IN
- Não podem ser utilizado como parâmetros de rotinas SPL , porém pode-se utilizar com o a opção REFERENCES que irá passar o ponteiro no parametro da função.
- Não podem ser declarados em variáveis de rotinas SPL, porém é possível utilizar a cláusula REFERENCES
- Monitoração:
- onstat-d update
- oncheck -pB
- onstat -O
- São gravados em BLOBSPACES e/ou DBSPACE.
- Para o banco é assumido que: pequenos dados BYTE/TEXT são gravados em DBSPACEs, portanto é possivel logar. Grandes dados BYTE/TEXT são gravados em BLOBSPACES são logados posteriormente.
- DBSPACE
- Quando gravado em DBSPACE pode-se dizer que o dado é tratado como um outro campo qualquer (logado e espaço de paginas reutilizados)
- dica: pode-se utilizar a opção CHECK com a função length para limitar o tamanho do registro gravado.
- Se o dado BYTE/TEXT ocupar mais que duas paginas(quando gravado em dbspace) é mais vantajoso gravar o dado em BLOBSPACE.
- BLOBSPACE:
- Composto por free-map pages, bitmap pages e blobpages
- Na criação de um BLOBSPACE, o a unidade utilizada no parâmetro -g é o numero de paginas e não a qtde de bytes.
- Após a criação de um BLOBSPACE não é possível utiliza-lo, é necessário trocar de logical log (onmode -l).
- Free-map e Bitmap pages tem o tamanho padrão do sistema, assim são os unicos registros que são carregados na shared memory e logados no logical log.
- Em __nenhuma__ situação os dados (blobpage) são gravados nos arquivos/dbspace de Logical Log. Quando é feito o backup do logical log o blobpage é copiado direto do blobspace para o backup do logical log.
- O acesso _não_ é feito pelo Buffer Pool, ele é gravado/lido diretamente no disco.
- BLOBPAGES:
- Contem um overhead extra de 12 bytes
- Na criação de um BLOBSPACE é necessário definir o tamanho do blobpage size que tem de ser múltiplo do tamanho de pagina default do banco. O tamanho desta pagina é fixo para todo blobspace.
Para definir o tamanho da pagina é preciso especificar o parametro -g a unidade utilizada neste parametro é numero de paginas. Portanto "-g 5" em um Informix onde a pagina padrão é 2k irá definir um BLOBPAGE de 10K - Quando é feito update em um campo BYTE/TEXT é necessário um lock para cada BLOBPAGE, portanto se um dado utilizar muitos BLOBPAGES, muitos locks serão alocados.
- Se gravado em um BLOBSPACE o espaço que sobra em um BLOBPAGE não é reutilizado.
- Um blobpage que foi excluído só é liberada novamente para uso quando sua ultima imagem inserida foi "becapeada" para o logical log.
- Um campo BYTE/TEXT utiliza 52 bytes para o ponteiro no registro que contém o campo.
- DML:
- Um dado BYTE/TEXT nunca é modificado internamente, é possível apenas inserir e deletar.
- Em caso de um update é alocado uma nova blobpage para o novo dado e o ponteiro é atualizado no registro que contém o campo, o blobpage antigo é liberado no backup do logical log.
- Não permite acesso aleatório ao dado
- Quando é transferido para o cliente é preciso transferir o objeto completo, se não couber na memória, é necessário salva-lo no file system e o cliente acessar o objeto dali.
- CLIENTE:
- Para cada conexão de cliente que utiliza Simple Large Object é definido um grupo de dois buffers para blobspace.
- Um buffer para leitura e outro para gravação
- Desta maneira é limitado o acesso a um unico campo por vez
- O tamanho de cada buffer é de um blobpage referente ao campo utilizado.
- env DBBLOBBUF: utilizado apenas com o DML UNLOAD, define o tamanho do buffer utilizado durante o processo, valor padrão é 10 (=10kbytes). Quando o dado é maior é utilizado um espaço temporário.
SMART LARGE OBJECT
- É similar ao Simple Large Object
- São os tipos BLOB e CLOB
- BLOB: Utilizado para salvar arquivos binários como planilhas, programas,etc
- CLOB: Utilizado para salvar textos
- Limite de tamanho em 4*2^40 (4 TB)
- São gravados em SBSPACES
- SBSPACE
- Composto por chunk header, metadata area, user-data e reserved data area.
- Metadata area: Contém Sbspace Descriptor tblspace(*), Chunk adjunct tblspace(*), Level 1 e 2 archive tblspace(*), Chunk one LO header tblspace, Chunk one user-data free list tblspace (*) Exclusivo apenas do primeiro chunk do sbspace
- Sbspace Descriptor: Contém informações sobre os tblspaces, não cresce.
- Chunk adjunct: ???, cresce quando é adicionado novos chunks.
- Level 1 e 2: ???,
- Chunk one LO header: ???, cresce quando é adicionado novos chunks.
- Chunk one user-data-free-list: cresce quando os espaços livres estão muito fragmentados.
- Reserved area:
- User-data area:
- Para melhor performance é recomendável que a Metadata seja alocada no meio do chunk (lugar padrão, porém pode-se especificar o local na criação do chunk.
- Devido a metadata ficar no meio do chunk, consequentemente existem duas areas para user-data e duas para reserved data, uma antes e outra depois do metadata area.
- Permite acesso aleatórios ao dado. Assim é possível ler e pesquisar no objeto como se estivesse acessando um arquivo no file system
- É possivel encriptar o campo
- É possivel utilizar mais recursos para pesquisas de textos nos campos CLOB porém é necessário utilizar API (datablade)
- Permite opções como : Logar alterações, rastrear ultimo acesso ao campo, tratamento para detectar dados corrompidos.
- Quando é feito um SQL o IDS retorna um ponteiro para o objeto e o cliente pode utilizar este ponteiro para acessar o dado.
- Funções:
FILETOBLOB carrega um arquivo para um campo BLOB
FILETOCLOB carrega um arquivo para um campo CLOB
LOTOFILE salva um campo BLOB/CLOB para arquivo
LOCOPY copia um BLOB/CLOB para outro BLOB/CLOB
ENCRYPT_DES ou
ENCRYPT_TDES Cria um campo BLOB encriptado apartir de um campo CLOB
DECRYPT_BINAR ou
DECRYPT_CHAR retorna um campo BLOB desencriptado
- 444 leituras
Tags:





Comentar