Você está na página 1de 80

Capítulo 4

Conceitos Básicos sobre Estrutura de Arquivos


Programa
Introdução
Operações básicas sobre arquivos
Armazenagem secundária
Conceitos básicos sobre estrutura de arquivo
Organizando arquivos para desempenho
Indexação
Processamento co-seqüencial e ordenação
B-Tree e outras organizações em árvores
B+Tree e acesso seqüencial indexado
Hashing
Hashing estensível
2
Visão Geral

Organização por Campos


Organização por Registros
Acesso a Registros
Acesso a Arquivos
Metadados
Portabilidade e Padronização

3
Organização por Registros e Campos

Ao definir uma estrutura de arquivo


há uma imposição de organização dos dados.
• Há muitas formas de ordenar esses dados.
• O propósito desse capítulo é estudar algumas...
• ...começando pelo caso básico:
• um arquivo organizado como uma sequência de bytes.

Não será agora, mas ainda veremos uma organização de arquivos


que permitirá recuperar um registro – dentre 68 bilhões de registros –
com apenas TRÊS acesso a disco!
4
Arquivo Stream (seq. de bytes)

É um arquivo de fluxo (sequência) de caracteres:


nenhum significado é possível de ser associado a esse grupo de
caracteres.
não há nenhuma estrutura envolvendo tais caracteres.
• portanto não existem campos ou registros!
é meramente um fluxo de bytes.
a unidade básica significante é o caractere.
não há separadores de linhas, campos e nem registros.
Uma vez que as informações foram escritas, não existe como
recuperar porções individuais (nome, cidade, CEP, etc).
Ex:
JoaoSilvaSQN 210bl.
210bl. Capt. 201Brasilia
201Brasilia
5
Arquivo Stream (seq. de bytes)

A escrita é feita sem qualquer separação dos campos:


a) Uma vez que as informações foram escritas, não existe como
recuperar as porções individuais, perdendo assim a integridade das
unidades fundamentais de organização dos dados de entrada.
b) Os dados eram agregações de caracteres com significado próprio,
denominado campos, que é a menor unidade lógica de
informação em um arquivo.
• Esses campos não foram delimitados no arquivo. [perdemos os campos
que estruturam logicamente a informação em nomes e endereços
Campo é uma noção lógica, uma ferramenta conceitual, que
não corresponde necessariamente a um conceito físico.

6
Arquivo Stream (seq. de bytes)

7
Arquivo Stream (seq. de bytes)

Um arquivo Stream é adequado para armazenar


informações tais como:
A foto de um cliente, que é composta de uma
string contínua de bits representando variações
de cor.
texto de um documento, imagens, audio, video, e
documentos HTML.

8
Arquivo Stream (seq. de bytes)

9
Organização por Campos
Há muitos meios de estruturar arquivos por campos:
1. Definir campos de tamanhos fixos
2. Iniciar cada campo com um indicador de tamanho
3. Colocar delimitador no fim de cada campo
• Separando o campo do próximo.
4. Usar uma expressão “keyword = value” para identificar
cada campo e seu conteúdo.
• Esse seria um arquivo de atributos (keywords) e valores
dos atributos.

10
Organização por Campos
Método 1: campos com comprimento fixo.

Aumento do tamanho do arquivo: aloca mais espaço do que o requerido para


armazenar valores menores do que o tamanho de cada campo.
Perda da qualidade da informação: pelo limite imposto, muitos valores de
campos ficam truncados (por exemplo, nomes ou endereços).
Indicado apenas se o comprimento dos valores a armazenar for fixo
ou com pouca variação!
Facilita a implementação e a recuperação dos registros.
O arquivo pode ser lido ou gravado com o uso de arrays
heterogêneos.

11
Organização por Campos (Método 2)

Método 2: campos precedidos de um indicador de tamanho.

O tamanho de cada campo é armazenado


imediatamente antes do dado do campo:
• tamanho zero indica campo ausente.
• muito utilizado para representar strings de tamanho
variável.

12
Organização por Campos (Método 3)

Método 3: campos separados por delimitadores.

Preserva identidade de cada campo separando-os por delimitadores.


Escolhe-se algum caracter especial ou sequência de caracteres que
não podem aparecer como valores dos campos e usa como
delimitador.
O caractere escolhido não pode ser incluso como um elemento
válido de algum campo.
• Utilizar uma barra vertical, por ex.

13
Organização por Campos (Método 4)

Método 4: uso de uma expressão do tipo “keyword = value"


para identificar os campos.

Vantagens: O campo fornece informação sobre si próprio (metadado)


• Fácil identificar o conteúdo do arquivo.
• É um bom formato para lidar com campos ausentes Utilizado quando os dados
não são estruturados
• A keyword simplesmente está ausente. e de domínio pouco
• Deve-se usar delimitadores (método 3) conhecido.

• Para separar o valor anterior do atributo do próximo campo.


Funciona como uma lista de keywords.
• As keywords podem ocupar uma porção significativa do arquivo.

14
Exercício – Em casa
Faça um programa que leia os dados sobrenome, nome,
endereço, CEP e telefone do teclado e grave esses dados
segundo os métodos abaixo. Esse programa deve ser capaz
de listar os registros após gravá-los.
• campos de tamanho fixo.
• campos com tamanho no início.
• campos com separadores.
• campos com atributo = valor.
Leia e grave até que sobrenome = ‘’.
Obs: O método de organização do arquivo deve ser passado via linha
de comando.

15
Organização por Registros
Registro é um conjunto de campos (de tipos quaisquer) que devem estar
agrupados quando o arquivo é analisado em um nível de organização
mais alto:
registro é uma ferramenta conceitual, como o conceito de campo.
é um outro nível de organização que se impõe aos dados para preservar seu
significado.
Os registros não precisam ser entidades físicas de um arquivo:
mesmo que eles sejam noções lógicas relevantes inclusas na estrutura do
arquivo.
podem coexistir com entidades físicas como:
• setores (trilhas organizadas por setores),
• cluster, extensão etc.
• blocos (trilhas organizadas por blocos, páginas, etc)

16
Organização por Registros

Os métodos de organização por registro mais


freqüentes são:
1. registros de tamanho fixo.
2. registros com um número fixo de campos.
3. registros com tamanho indicado no início.
4. registros apontados por índices.
5. registros com delimitadores.

17
Organização por Registros
Método 1: Registros de tamanho fixo

O registro tem tamanho fixo, em bytes.


Aqui busca-se o reconhecimento de registro, tal qual se buscou antes
o reconhecimento de campo, preservando o seu significado.
São as estruturas mais comuns para organizar arquivos.
Todos os registros do arquivo ocupam o mesmo número de bytes.
[Análogo ao conceito de campos de tamanho fixo.]
O número fixo de bytes num registro não implica o número fixo de
bytes para o campo do registro.
• campos de tamanho fixo ou variável.
Entretanto, pode-se ter registros de tamanho fixo com campos de
tamanho variável.

18
Organização por Registros
Método 1: Registros de tamanho fixo
Registro de tamanho fixo c/ campos de tamanho fixo

A soma do tamanho dos campos e do tamanho dos elementos de controle para


sua separação, tem como limite o tamanho fixado pelo registro.
Exemplo:
registro de tamanho 62B com o conjunto de campos: nome – 20B, endereço – 20B,
cidade – 20B, UF – 2B.
Se o registro ocupa, por ex. 32B, então o tamanho efetivo será 62B.
Se desempenho é muito importante, pode-se tentar ajustar o tamanho para se
adaptar melhor a organização do disco:
se o tamanho do setor é de 512B, então, definir os registros com 64B evita a
quebra de registros entre setores (8 reg/setor).
19
Organização por Registros
Método 1: Registros de tamanho fixo

Registro de tamanho fixo c/ campos de tamanho variável


Com delimitadores de campos

Com indicadores de tamanho antes dos campos

A seleção do tamanho do registro é mais difícil quando os comprimentos dos campos podem
variar. A escolha de um comprimento fazendo a soma do tamanho máximo estimado para
cada campo garante espaço suficiente, mas é desperdiçado um espaço enorme. 20
Organização por Registros
Método 2: Registros com um Número Fixo de
Campos
Quantidade fixada de campos
ao invés de especificar que cada registro contém um número fixo de
bytes (tamanho), podemos especificar que contém um número fixo
de campos! [o tamanho do registro, em bytes, é variável].
cada campo pode ter tamanho variável ou fixo.
os campos seriam separados por delimitadores!
Tamanho do registro
Não é limitado.
É o somatório dos tamanhos dos campos.
Tamanho fixo ou variável.
• Depende dos tamanhos dos campos

21
Organização por Registros
Método 2: Registros com um Número Fixo de
Campos
Exemplo: 3 campos por registro
Com delimitadores de campos

Com indicadores de tamanho no ínicio do campo

Como o programa sabe o ínicio do registro n?


(n-1) * m + 1, onde m é o número de campos por registro.

22
Organização por Registros
Método 3: Registros com Tamanho Indicado
no Início
O registro começa com o seu tamanho
Método freqüentemente empregado para tratar registros de tamanho
variável.
Precisa conhecer o tamanho dos campos.
Tamanho do registro (em bytes) é a soma dos tamanhos dos campos
com:
• a quantidade de delimitadores dos campos.
• ou a quantidade de bytes dos indicadores dos tamanhos dos campos.
• Exemplo: Com delimitador de campos

23
Organização por Registros
Método 4: Registros Apontados por Índices

Os registros são mantidos num arquivo:


um arquivo adicional de índices aponta para os registros no arquivo de
dados.
cada índice mantém o endereço de deslocamento relativo (offset) para cada
registro no arquivo original.
a diferença dos endereços entre índices consecutivos representa o tamanho
do registro.
os registros no arquivo de dados e seus endereços no arquivo de índices são
consecutivos e correspondentes.
• Seguem a mesma ordem.
os campos são separados por delimitadores.

00 33 ......... 24
Organização por Registros
Método 5: Registros com Delimitadores
Os registros no arquivo texto são separados por um
delimitador:
O delimitador não pode ocorrer como conteúdo de um campo
armazenado.
tal delimitador pode ser um caracter de final de linha:
• “CR-LF”, usado em processamento de textos.
• CR (Carriage return) seguido por um LF (line feed)
É a mesma idéia usada na delimitação de campos.
O delimitador de campos é mantido, sendo que o método combina os
dois delimitadores.

25
Organização por Campos e
Registros

Até aqui, em todas essas formas de organizar


arquivos, por campo ou por registro, estamos
falando de:
arquivo do tipo texto, ou
fluxo de bytes (arquivo stream).

26
Acesso a registros

Estrutura de dados focada em registros


pressupõe:
registro é a unidade de informação.
• Essa unidade lógica é lida ou gravada.
ser possível recuperar um registro específico.
uma chave (key) para identificar um registro.
• Chave é uma ferramenta conceitual.

27
Acesso a registros:
Chaves de Registros

Uma chave deve ter uma forma padrão


há regras para mapear campos do registro em
chaves na forma padrão.
• Uma chave na forma padrão é dita chave canônica.
• Exemplo: se a regra define chaves com letras
maiúsculas, qualquer entrada dada pelo usuário é
convertida para a forma canônica antes da pesquisa (e
deve estar gravada no arquivo dessa forma).

28
Acesso a registros:
Chaves de Registros
Exemplo: Um arquivo é composto de registros
com dados de empregados de uma empresa.
Uma chave pode ser o sobrenome do
empregado: silva, SILVA, Silva, etc. Logo antes
de fazer a procura devemos transformar a chave
a forma padrão.

Uma chave pode ser formada por conjunto de


campos e não necessariamente por um campo
especifico: SILVA JOÃO. Para a correta
identificação durante a procura deve existir uma
regra para misturar os registros na criação das
chaves.
Acesso a registros:
Chaves de Registros

O ideal é que exista uma relação um a um entre chave e


registro, ou seja cada chave corresponde um único registro.
Chave primária.
Identifica unicamente cada registro
• Em geral, não pode ser modificada.
• Exemplo: matrícula, CPF, RG, etc.
• Preferível não usar dados pois estes podem ser repetidos ou modificados
Chave secundária.
Chave que pode ser cotizada por dois ou mais registros.
• Não há garantias de unicidade.
• Exemplo: nome, cidade, UF, etc.
• Pode ser utilizada para buscas simultâneas de várias chaves (todos os
“Silva" que moram em Curitiba, por exemplo).

30
Acesso a registros:
Busca Sequencial

Consiste em ler sequencialmente um arquivo:


selecionando os registros com chave igual a chave-de-busca
(registros pretendidos).
se a chave-de-busca é primária apenas um registro será selecionado.
Desempenho da busca sequencial:
Esforço de buscar um registro específico é proporcional ao número n
de registros do arquivo.
• Em geral a métrica é o número de leituras físicas.
• Se cada registro implica numa leitura física, então:
• no melhor caso = 1 leitura [Ordem O(1)]
• no pior caso = n leituras [Ordem O(n)]
• no caso médio = n/2 leituras [Ordem O(n)]
• Obs: Busca sequencial é proporcional a n; em geral read num ambiente
multiusuario é composto de seek+read; comparações são realizadas
rapidamente em RAM. 31
Acesso a registros:
Busca Sequencial com Blocagem

A parte mais lenta de uma operação de acesso a disco é o seeking


realizado para localizar a porção correta do disco

O custo de buscar e ler um registro, e depois buscar e ler outro,


é maior que o custo de buscar (e depois ler) dois registros
sucessivos de uma só vez

Ou seja, podemos melhorar o desempenho da busca


sequencial lendo um bloco de registros por vez,
e então processar este bloco em RAM.
32
Acesso a registros:
Busca Sequencial com Blocagem

Organização lógica de arquivos


campos e registros são formas de organização lógica de arquivos.
Organização física de arquivos
blocos, cluster, páginas e extents são formas de organização física de
arquivos, voltadas para desempenho.
Se cada bloco tem fb = k, então
O número de leituras físicas é:
• melhor caso = 1 leitura [Ordem O(1)]
• pior caso = n/k leituras [Ordem O(n)]
• caso médio = n/(2k) leituras [Ordem O(n)]

33
Acesso a registros:
Busca Sequencial com Blocagem

Melhora o desempenho substancialmente:


a blocagem economiza tempo
• Reduz o número de operações de seek.
mas não muda a ordem do esforço que é de O(n).
Reflete as diferenças entre velocidades:
da RAM e de acesso a disco.
mas não muda o número de comparações em RAM.
Pode aumentar a quantidade de transferências entre disco e
RAM:
sempre será lido o bloco todo, mesmo se o registro procurado é o
primeiro do bloco!

34
Acesso a registros:
Busca Sequencial

Vantagens da Busca Sequencial:


fácil de programar.
requer estruturas de arquivos simples.
Uso da busca sequencial é razoável:
na busca por uma cadeia em um arquivo ASCII (como faz, por
exemplo: utilitário grep do UNIX).
em arquivos com poucos registros.
em arquivos pouco pesquisados (por exemplo, mantidos em fita).
na busca por registros com um certo valor de chave secundária, para
a qual se espera muitos registros (muitas ocorrências).

35
Acesso a registros:
Acesso Direto

Alternativa ao método de busca sequencial.


Na busca do k-ésimo registro no arquivo:
acessa-se diretamente o k-ésimo registro.
• A leitura não passa pelos k-1 registros anteriores.
não importa o tamanho do arquivo, o esforço de busca será sempre
constante de O(1).
É necessário conhecer a posição relativa do registro (PRR)
na sequência de registros do arquivo.
Se o arquivo é visto como um sequência de bytes, a PRR representa
o endereço do byte inicial do registro.
Se o arquivo é visto como um conjunto de registros, a PRR é o
número relativo do registro (NRR) no arquivo.

36
Acesso a registros:
Acesso Direto

Registro de Tamanho Fixo


Nesse caso, a PRR é calculada facilmente a partir do seu NRR
• PRR = NRR * Tamanho do registro
Por exemplo, se queremos a posição do registro com NRR 546, e o
tamanho de cada registro é 128, a PRR é 546 x 128 = 69.888.

Registro de Tamanho Variável


Um método é usar um arquivo de índices para conter as PRRs de
cada registro de dados.

37
Acesso a registros:
Acesso Direto x S.O. e Linguagens
MS-DOS, Windows ou Unix e derivados
Um arquivo é visto como uma sequência de bytes:
• a LP dos aplicativos pode continuar com essa visão
(caso do C: lseek( ) ).
• a LP pode usar procedimentos próprios para ver
arquivo como um conjunto de registros (caso do
PASCAL).
A linguagem PL/I (bem como sistemas que a suportam, como VMS,
OS/MVS), tem outra visão da organização de arquivo.
-Quando o arquivo é organizado em registros, não existe acesso
por bytes, mas apenas por registros.
-Os arquivos são tratados como uma coleção de registros
acessados através de chaves. A conversão chave/endereço
do registro é realizada pelo sistema operacional. 38
Escolha da estrutura e do
tamanho dos registros
O uso do NRR implica em definir um tamanho
fixo para os registros.
Obviamente, esta decisão está relacionada ao
tamanho dos campos que desejamos armazenar
no arquivo.
• Depende se os campos possuem tamanho fixo ou
variável.

39
Escolha da estrutura e do
tamanho dos registros
Registros de tamanho fixo, com campos de tamanho
fixo
(<campo1> <campo2>...<campok>)
• Tamanho do registro = ∑ tamanho(campoi)
• Não há perdas ao nível de registros.
• Há perdas ao nível de campo.

Se o desempenho é muito importante, podemos tentar ajustar o


tamanho para se adaptar melhor à organização do disco.
Se o disco utilizado for um típico disco organizado em setores e o
tamanho do setor é 512 bytes (ou outro múltiplo de 2), em um setor
podem ser colocados exatamente 16 registros de 32 bytes cada. Assim,
escolher registros de 32 bytes evita a quebra de registros entre setores.

40
Escolha da estrutura e do
tamanho dos registros
Registros de tamanho fixo, com campos de tamanho
variável
O registro é a soma dos tamanhos máximos (estimados) de cada
campo e dos separadores:
• c/ indicador de tamanho de campos
(<Tc1><campo1><Tc2><campo2>...<Tck><campok><perda>)
• c/ separadores de campo
(<campo1>|<campo2>|...|<campok><perda>)
Pode haver perda ao nível de registro.

41
Escolha da estrutura e do
tamanho dos registros
Registro de tamanho fixo c/ campos de tamanho fixo

Registro de tamanho fixo c/ campos de tamanho variável


Escolha da estrutura e do
tamanho dos registros
A escolha de um tamanho para o registro é mais complicada quando os
comprimentos dos campos podem variar, como no exemplo dos nomes e
endereços). Se escolhemos um comprimento fazendo a soma do tamanho
máximo estimado para cada campo, teremos certeza de ter espaço suficiente,
mas estaremos desperdiçando um espaço considerável. Se usarmos um
tamanho de campo menor que o máximo esperado, corremos o risco de perder
informação associada a um campo. Uma maneira de evitar estes problemas é
usar uma estrutura interna adequada para o registro.
Já vimos que existem 2 abordagens principais para organizar campos dentro de
um registro de tamanho fixo. O primeiro usa campos de tamanho fixo. O segundo
utiliza campos de tamanhos variaveis em registros de tamanho fixo, por meio de
delimitadores ou indicando o tamanho de cada campo. Esta abordagem diminui a
perda (na média a soma de tamanhos tende a ser mais uniforme), e pode-se
misturar campos de tamanho fixo aos de tamanho variável.

43
Registro Cabeçalho
(header record)
Em geral, é interessante manter algumas informações sobre o
arquivo para uso futuro. Essas informações podem ser
mantidas em um header no início do arquivo. Algumas
informações típicas são:
número atual de registros no arquivo
política de tamanho de cada registro
os tipos dos campos de cada registro
datas de criação e atualização

r0 r1 r2 rn
Cabeçalho <Tr > <campos> <Tr > <campos> ... <Tr > <campos>
44
Registro Cabeçalho
(header record)
Ele é o primeiro registro do arquivo
A existência de um registro header torna um
arquivo um objeto auto-descrito. [O software
pode acessar arquivos de forma mais flexível]
Problemas: tira a homogeneidade dos registros.
O conteúdo do header difere dos demais
registros do arquivo.
• Embora possa ser tratado como registro variante.
• Usando um flag para indica o tipo de registro atual.

45
Acesso a arquivos x Organização de arquivos

Pode-se organizar um arquivo em registros de:


tamanho fixo
tamanho variável
O acesso pode ser:
direto
sequencial
Qualquer que seja a organização, os dois modos
de acessos são possíveis.

46
Acesso a arquivos x Organização de arquivos

ORGANIZAÇÃO ACESSO
- reg tamanho fixo - direto

- reg tamanho variável - sequêncial

Qualquer que seja a organização,


os dois modos de acessos são possíveis.
47
Acesso a arquivos x Organização de arquivos

Acesso direto em registro de tamanho fixo:


é imediato e implementável
• Com função do tipo fseek()
Acesso direto em registro de tamanho variável:
precisa-se conhecer a PRR em bytes.
• Implementado via uma estrutura de índice.
C permite acesso a qualquer byte, e o programador pode
implementar acesso direto a registros de tamanho
variável.
Pascal exige que o arquivo tenha todos os elementos do
mesmo tipo e tamanho.[de difícil implementação em
pascal por exemplo]
48
Além de estruturas de registros

Vamos analisar algumas formas mais complexas


de organização de arquivos, em que os arquivos
são mais do que simplesmente um conjunto
de registros organizados em campos.

49
Tipo Abstrato de Dados – TAD
Objetivo: Focar no conteúdo da informação, ao invés de no
seu formato físico.

Antigamente: Atualmente:
Os computadores processavam: É possível:
- registros de cartões perfurados - processar e transmitir som
e fitas magnéticas, - processar e mostrar imagens
- memória limitada, - processar e interagir com
- Ling.Progr. primitivas. documentos

Este tipo de informação não se ajusta


bem ao paradigma de dados
armazenados como seqüências de
registros separados em campos. 50
Tipo Abstrato de Dados – TAD

Para muitas aplicações é interessante conhecer:


seus objetos,
suas propriedades e
as operações realizadas sobres eles.
não interessa a maneira como esses objetos ficam armazenados
fisicamente (tratar como transparente!).
TAD permite
descrever os objetos, suas propriedades e operações.
uma visão dos dados orientada à aplicação (e não orientada ao
meio de gravação)
que a organização e o acesso aos dados seja:
• conforme a aplicação os vê.
• não como os dados estão fisicamente armazenados.

51
Tipo Abstrato de Dados – TAD
Implementando TAD
Os detalhes da implementação dos objetos são
encapsulados (escondidos do programador).
• visão: nome do tipo e lista de operações disponíveis.
Colocar no arquivo informações:
• que descrevem os objetos nesse arquivo.
• usadas pelo software de acesso para entender esses
objetos.
• implementadas por registro do tipo cabeçalho.
• poupam o programador de entender como os dados estão
fisicamente armazenados.
52
Tipo Abstrato de Dados – TAD
Arquivo auto-descritivo:
É um arquivo com registro cabeçalho contendo
todas as informações que o descrevem:
• número de campos por registro
Contrapartida:
• nome de cada campo Os programas
• tipo de cada campo precisam ser
mais sofisticados.
• número de registros efetivos, etc.
Permite o uso de programas genéricos:
• um programa genérico pode ler ou escrever “qualquer”
arquivo autodescrito.
53
Metadados
Exemplo: um astrônomo, que estuda imagens geradas por
telescópios, precisa projetar uma estrutura de arquivo para
guardar as representações digitais dessas imagens.
Poderão existir milhares de imagens, a serem guardadas em arquivos
individuais.
Dados de interesse: as imagens
Porém, várias informações sobre cada imagem devem estar
disponíveis: a localização no céu, a data de obtenção, o telescópio
utilizado, etc.

Esse tipo de informação é chamado METADADO:


são dados que descrevem os dados primários em um arquivo.

54
Metadados
São dados descrevendo dados:
descrições de dados primários num arquivo.
é bastante conveniente armazenar os metadados junto aos dados
primários.
podem ser implementados via registro cabeçalho.
Podem ser inseridos em qualquer arquivo cujos dados
primários precisam de suporte de informação:
métodos específicos, usando metadados, precisam ser empregados
para interpretar os dados primários.
exemplos:
• imagens médicas (DICOM – Digital Image Communication).
• imagens astronômicas (FITS – Flexible Image Transport System).

55
Exemplo - Metadados
DICOM (Digital Image Communication in Medicine)
Aplicações em imagens médicas;
Conjunto de normas para tratar, transmitir e armazenar
imagens médicas
A rede é o grande “gargalo” da grande maioria dos sistemas
de imagens médicas;
Formato DICOM oferece suporte para comunicação em rede
Grande variedade de produtos na área médica utilizam o
formato DICOM ;
DICOM está se tornando o formato padrão de imagens
médicas

56
DICOM Application Domain
Storage, Query/Retrieve,
Study Component
LiteBox

MAGN

ETOM

Media
Exchange
Query/Retrieve, Patient &
Query/Retrieve
Study Management
Results Management
Print Management

57
Imagens Formato DICOM
Exemplo - Metadados
Formato FITS (Flexible Image Transport System)
Arquivo:
<cabeçalho em ascii> <imagem em binário> Imagens
Astronômicas
Cabeçalho:
• uma coleção de blocos de 2.880 bytes.
• cada bloco tem registros de 80 bytes em ASCII.
• cada registro tem um único metadado com a notação:
<keyword = value> / <comentários>
• Exemplo
BITPIX = 16 / bits per pixel
NAXIS = 2 / number of axes
DATE = ’22/09/1989’ / date file written
END
59
Metadados

FITS:
exemplo
de
cabeçalho
Metadados

Uma imagem FITS é um bom exemplo


de um tipo abstrato de dados:
o dado primário não tem sentido
sem a informação contida no cabeçalho.

Metadados + dados primários = TAD

É importante observar que métodos específicos para o FITS


devem ser usados para converter a informação em dados intelegíveis.

No FITS, uso de keywords representa pouco overhead.


61
Imagem Formato FITS

Métodos específicos, usando metadados, precisam


ser empregados para interpretar os dados primários
Exemplo - Metadados

Imagem de Televisão Colorida:


É um arranjo retangular de pontos coloridos (pixels) que são exibidos
no vídeo.
Metadados para descrever uma imagem de televisão (Color Raster
Image) são:
• a dimensão da imagem:
• Número de pixels por linha e número de linhas (ex: 352x288)
• número de bits usados para descrever cada pixel
• (ex: 8 bpp).
• palette (tabela/espaço de cores):
• indica que cor deve ser associada a cada valor de pixel na
imagem (ex: 256 cores) 63
Metadados

Quando uma imagem é tratada como um Tipo Abstrato de


Dado possíveis operações (além de read e write) associadas
são:
exibir uma imagem numa janela do vídeo.
associar uma imagem a uma particular paleta de cores.
composição de imagens:
• sobrepor uma imagem com outra.
produzir animação:
• exibir várias imagens em sucessão ao longo do tempo.
Uma Color Raster Image é um exemplo de tipo de objetos
de dado que requer mais do que a tradicional estrutura de
campos/registros. 64
Imagem Color Raster Image

65
Mistura de tipos de objetos em um
único arquivo

Exemplo: Um astrônomo pode desejar guardar, num mesmo


arquivo, várias imagens FITS (metadados + dados)
juntamente com algumas notas de laboratório, associadas à
imagem, escritas por ele.
Nesse caso o arquivo pode ser visto como uma mistura de
objetos cujo conteúdo pode ser muito diferente.

As estruturas de arquivos vistas até agora


não suportam adequadamente esses casos.
66
Mistura de tipos de objetos
em um único arquivo
Arquivos com muitos objetos diferentes:
1a. solução: arquivo com metadados e registro de tamanho
variável para conter cada objeto:
• aqui o programa de acesso é construído contendo:
• o conhecimento da ordem de cada objeto no arquivo:
Exemplo: <cabeçalho> <documento> <imagem>
<cabeçalho>...
• o conhecimento do que é cada objeto.
• o arquivo precisa conter exatamente os objetos descritos
e na ordem especificada
• o acesso precisa ser seqüencial (acesso a uma dada
imagem em arquivos grandes fica muito lento).
67
Mistura de tipos de objetos
em um único arquivo
2a. solução: arquivo com tabela de índices e tags
(etiquetas):
usa-se uma tabela de índices, onde cada entrada na tabela contém:
• tag (identificando o objeto).
• PRR (posição relativa do objeto no arquivo).
• tamanho do objeto em bytes.
Permitem programas genéricos.

Exemplo de tabela de índice com tags:


Cabeçalho Notas Imagem Cabeçalho Notas Imagem ...

68
Arquivo: <seq de metadados> <anotações> <pontos da imagem> <..
Mistura de tipos de objetos em um
único arquivo

O uso de tag permite:


aplicações usando metadados.
misturas de objetos diferentes.
os registros agora podem ser diferentes:
• podem estar desordenados.
mas esta liberdade tem preço: complexidade
• tem que se escrever e ler tags.
• tem que se escrever e ler os dados (propriamente).
• tais dados podem ter:
• diferentes estruturas e formatos.

69
Mistura de tipos de objetos em um
único arquivo

Estruturas Tagged são comuns hoje em dia:


TIFF (Tagged Image File Format): uso popular no armazenamento de
imagens.
HDF (Hierachical Data Format): padrão utilizado no armazenamento de
dados científicos, incluindo imagens.
SGML (Standard General Markup Language): linguagem para
descrever a estrutura de documentos e para definição de tags utilizados
marcar (mark up) a estrutura.
HTML – (HyperText Markup Language): utilizada para descrever
documentos da World Wide Web (WWW).

70
Mistura de tipos de objetos
em um único arquivo
Para um programa que precisa acessar objetos
em um tagged file, algumas perguntas:
1. Onde encontrar um objeto já armazenado?
2. Onde armazenar um objeto no arquivo?
• Como e onde armazenar sua tag?
3. Dado que os objetos são diferentes:
• Como determinar o método correto para armazenar e
recuperar tais objetos?

As questões 1 e 2 dizem respeito a tabela de índices


e serão abordadas no Capítulo 6.
A questão 3 é abordada nesse capítulo. 71
Acesso a arquivo orientado a objeto

A aplicação não tem acesso ao formato real dos dados:


• a especificação da tag já vem acompanhada da
maneira de ler e escrever nesse arquivo.
• o procedimento de leitura ou escrita usa os dados da
tag para acessar o arquivo real.
• a aplicação se preocupa em manipular o objeto em
termos lógicos:
• não interessa como fisicamente o objeto é armazenado.
• o objeto é um TAD com suas operações lógicas.
• é delegada a outros módulos a responsabilidade de
traduzir de/para o formato físico do objeto.
72
Acesso a arquivo orientado a objeto

Formato de arquivos etiquetados:


é um meio de implementar uma visão conceitual
de organização e acesso.
na especificação da tag vem:
• a especificação dos métodos de leitura e escrita.
o enfoque orientado a objeto pressupõe:
• separação da especificação do TAD do correspondente
formato de arquivo.

73
Acesso a arquivo orientado a
objeto
Por exemplo: aplicação que trabalha com imagens em RAM de 8 bits
precisa processar uma coleção de arquivos. Alguns arquivos estão
armazenados no padrão FITS e outros em TIFF.
Adotando a orientação a objetos nessa aplicação, o programa utilizaria
uma rotina que leria os objetos para a memória no formato esperado
(8 bits). A rotina de leitura (read_image), por sua vez, estaria
encarregada de, a cada arquivo, invocar o procedimento correto para
conversão daquele arquivo no formato 8-bits necessário.
Tagged files são uma maneira de implementar esse tipo de
organização de arquivos, com esse tipo de acesso ao arquivo.
A especificação de uma tag pode ser acompanhada de métodos para
leitura, escrita, etc., do objeto correspondente, de acordo com as
necessidades de uma aplicação. 74
Portabilidade e Padronização
Ao se criar um arquivo, deve se pensar que ele
possa ser acessado por:
diferentes computadores com diferentes S.O.
diferentes programas de aplicação.
nesse contexto o arquivo é compartilhável.
O compartilhamento de um arquivo é afetado por
dois fatores:
portabilidade.
padronização.
75
Fatores que afetam portabilidade

Diferenças entre sistemas operacionais:


o formato final de um arquivo pode variar em função de diferenças
entre sistemas operacionais:
• Por exemplo, o UNIX e DOS tratam diferentemente as marcas de fim-de-
linha e fim-de-arquivo.
Diferenças entre linguagens:
o layout físico de um arquivo pode ser restringido pela linguagem de
manipulação:
• em Pascal todos os registros de um arquivo precisam ser do mesmo
tamanho.
• em C pode-se misturar registros de tamanhos diferentes.

76
Fatores que afetam portabilidade

Diferenças entre Arquitetura de Máquinas:


Máquinas diferentes podem representar binários
diferentemente (independentes da LP).
Armazenam registros diferentemente.

77
Fatores que afetam portabilidade

Se nosso arquivo de clientes possui 3210 registros, esse


número, em uma Sun 3, usando C, estará fisicamente
guardado em hexadecimal como 0020, enquanto que num
IBM PC ou num VAX, o mesmo valor será, fisicamente,
2000.
Similarmente, o valor 500.000.00010 seria armazenado
em hexa como 1dcd6500 na Sun, e como 0065cd1d no
PC e no VAX.

78
Fatores que afetam portabilidade

Diferenças entre Arquitetura de Máquinas:


Representam textos diferentemente:
• máquinas que usam a tabela EBCDIC (Extended Binary-Coded Decimal
Interchange Code ).
• Codificação de caracteres criado pela IBM
• máquinas que usam a tabela ASCII.
• A maioria das máquinas usa esse padrão
• há máquinas que suportam ambos.

Representação de diferentes conjuntos de caracteres:


• caracteres próprios de uma língua:
• português, francês, japonês, etc.
• criou-se um novo padrão: Unicode de 16 bits

79
Obtendo Portabilidade
Algumas diretrizes para tratar do problema são:
Escolha e mantenha um formato de registro físico
padrão ou standard. (ex: FITS, TIFF)

Escolha uma codificação binária padrão para os


elementos de dados. (EBCDIC, ASCII, XDR (External
Data Representation) e formatos padrão IEEE)

Estude os casos de conversão de textos e números.

80