# Banco de Dados Intermediário/Estrutura de Arquivos

Bem-Vindo ao Curso Intermediário de Banco de Dados
Neste curso analisaremos aspectos teóricos e práticos intermediários dos bancos de dados. Apesar de buscar ser genérico, utilizaremos exemplos diversos utilizando os SGBDs MySQL, Oracle 10g e Microsoft MS-SQL Server. Apesar dos dois últimos serem pagos, há versões gratuitas limitadas disponíveis na Internet para estudo.

## Estrutura de Armazenamento

Em príncipio os usuários devem ficar em nível lógico e não se preocupar com detalhes físicos. Porém se houver um problema relacionado, por exemplo, ao desempenho do banco de dados, o DBA e os usuários devem ter conhecimento de como ocorre a organização física do banco de dados.

### Armazenamento Físico

Existem diversos tipos de armazenamento de dados. Estes meios são classificados de acordo com sua velocidade de acesso e sua disponibilidade. Podemos definir uma hierarquia dos tipos de armazenamento de dados onde geralmente aqueles de maior capacidade tem menor velocidade de acesso.Assim temos em ordem de maior para menor velocidade (e de menor capacidade para o maior):
* Cache
* Memória Principal
* Memória Flash
* Disco Magnético
* Disco ótico
* Fitas magnéticas
Entre os dispositivos disponíveis estão:
* Cache:O cache do processador é a forma de processamento é a forma de armazenamento mais rápida, mas mais cara. Ela é pequena e geralmente o tema de gerenciamento do armazenamento em cache não é um tema de preocupação em banco de dados.
* Memória principal: Embora a memória principal possa conter gigabytes de dados, de uma forma geral é pequena para armazenar um banco de dados inteiro. O conteúdo da memória principal pode ser perdido se ocorrer uma falta de energia ou falha grave de sistema.
* Memória Flash: Esta memória difere da memória principal pois os dados sobrevivem em caso de falta de energia.
* Armazenamento em Disco Magnético: O principal meio para armazenamento de dados por longos períodos e acesso on-line. Normalmente os bancos de dados são armazenados desta forma. Os dados são então movidos do disco magnético para a memória principal para poderem ser acessados. São então executadas as operações e os dados modificados são escritos no disco. O armazenamento em disco é chamado de memória de acesso direto, já que é possível ler os dados no disco em qualquer ordem. Os discos podem falhar, mas estas falhas ocorrem com menos frequencia do que as falhas de sistema.
* Armazenamento Ótico: Um exemplo deste tipo de armazenamento é o CD-ROM, sendo os dados armazenados oticamente no disco e lidos por laser.
* Armazenamento em fita: Este tipo de armazenamento é utilizado principalmente para backups. O acesso aos dados é mais lento devido ao fato de que o acesso aos dados deve ser feito de forma sequencial (acesso sequencial).

## Discos

Para ler e gravar informações em um disco são utilizadas cabeças magnéticas de Leitura/Gravação. As medidas de desempenho de qualidade em um disco são a capacidade, o tempo de acesso, a taxa de transferência de dados e a confiabilidade. O tempo de acesso é o tempo que o gasto desde que é solicitado um pedido de leitura/escrita até o início de transferência dos dados. Desta forma, o braço com a cabeça de leitura/gravação posiciona-se sobre a trilha onde estão os dados e espera que o setor apareça sob a cabeça de leitura e escrita enquanto o disco gira. O tempo de reposicionamento do braço é o que conhecemos como tempo de procura (seek time), aumentando de acordo com a distância que o braço deve se mover. O tempo gasto aguardando que o setor a ser acessado fique sob a cabeça de leitura e escrita é chamada de tempo de latência rotacional. O tempo de acesso aos dados é a soma do tempo de procura e do tempo de latência.
Uma vez que o primeiro setor de dados a ser acessado chegou sob a cabeça de leitura e escrita a transferência de dados tem início. A taxa na qual os dados são recuperados ou armazenados no disco é chamada de taxa de transferência de dados. A última medida utilizada com frequência é o tempo médio para ocorrência de falha, que trata da medida de confiabilidade de disco, onde o tempo médio para a ocorrência de falha de um disco é, na média, a quantidade de tempo que se pode esperar que o sistema trabalhe sem falhas.

## Blocos

Para requisições de gravação e leitura em um banco de dados, o SGBD faz uma solicitação que especifica o endereço no disco a ser referenciado, sendo que este endereço está no formato de número de bloco. Um bloco é uma sequência contígua de bytes (setores) de uma única trilha em um prato. Os dados são transferidos entre o disco e a memória principal em unidades de bloco.

## RAID (Redundante Arrays of Independent Disks)

Utilizar um grande número de discos pequenos e baratos para armazenar dados pode ser mais eficiente do que utilizar números menores de discos grandes e mais caros. Um grande número de discos em um sistema dá a oportunidade de melhorar a taxa na qual os dados são lidos/escritos, se os discos são operados em paralelo. Esta configuração também permite melhorar a confiabilidade do armazenamento de dados, porque as informações podem ser armazenadas de forma redundante em diferentes discos, fazendo com que a falha em um disco não leve à perda dos dados.
Redundant Array of Independent Drives ou Conjunto Redundante de Discos Independentes é um meio de se criar um sub-sistema de armazenamento composta por vários discos individuais, com a finalidade de ganhar segurança e desempenho.
Popularmente, RAID seriam dois ou mais discos (por exemplo, HD ou disco rígido) trabalhando simultaneamente para um mesmo fim. Apesar do RAID oferecer segurança e confiabilidade na adição de redundância e evitar falhas dos discos, o RAID não protege contra falhas de energia ou erros de operação. Falhas de energia, código errado de kernel ou erros operacionais podem danificar os dados de forma irrecuperáveis.
O RAID foi proposto em 1988 por David A. Patterson, Garth A. Gibson e Randy H. Katz na publicação "Um Caso para Conjuntos de Discos Redundantes Econômicos (RAID)". Publicado na Conferência SIGMOD de 1988: pp. 109–16.
Entre as vantagens obtidas podemos destacar:
* Ganho de desempenho no acesso.
* Redundância em caso de falha em um dos discos.
* Uso múltiplo de várias unidades de discos.
* Facilidade em recuperação de conteúdo "perdido".

### Arquiteturas de RAID
#### Implementação Via software

Na implementação via software, o sistema operacional gerencia o RAID através da controladora de discos, sem a necessidade de um controlador de RAIDs, tornando-a mais barata.
Nesse tipo de implementação, todo o processamento necessário para o gerenciamento do RAID é feito pela CPU. Toda movimentação de dados(leitura e escrita) é feita por uma camada de software que faz a abstração entre a operação lógica(RAID) e os discos físicos, e é controlada pelo sistema operacional.
A configuração do RAID via software é feita pelo sistema operacional, que precisa ter implementado no próprio kernel a utilização de RAIDs via software.

#### Implementação Via hardware
##### Fake RAID

A implementação via software geralmente não possui uma facil configuração. Já na implementação via hardware as controladoras tem um preço muito elevado. Então foi criada uma "controladora barata" que em vez de um chip controlador RAID voce utiliza uma combinação de funções especias na BIOS da placa e drivers instalados no sistema operacional .

##### Comparação entre as arquiteturas

Ao compararmos RAIDs por software e por hardware percebe-se que os implementados através de software são mais flexíveis que os via hardware. Por outro lado, os primeiros exigem da CPU mais tempo de processamento. Comparando os dispositivos de blocos, os em software também são flexíveis podendo ser usados em discos inteiros, partições ou outro dispositivo de bloco.

### Níveis de RAID

Níveis de RAID são as várias maneiras de combinar discos para um fim.
O sistema RAID consiste em um conjunto de dois ou mais discos rígidos com dois objetivos básicos: 1 - Tornar o sistema de disco mais rápido (isto é, acelerar o carregamento de dados do disco), através de uma técnica chamada divisão de dados (data striping ou RAID 0); 2 - Tornar o sistema de disco mais seguro, através de uma técnica chamada espelhamento (mirroring ou RAID 1).
Essas duas técnicas podem ser usadas isoladamente ou em conjunto.

#### RAID 0 Linear

É uma simples concatenação de partições para criar uma grande partição virtual.

#### RAID 0 Striping

No striping, ou distribuição, os dados são subdivididos em segmentos consecutivos (stripes, ou faixas) que são escritos seqüencialmente através de cada um dos discos de um array, ou conjunto. Cada segmento tem um tamanho definido em blocos. A distribuição, ou striping, oferece melhor desempenho comparado a discos individuais, se o tamanho de cada segmento for ajustado de acordo com a aplicação que utilizará o conjunto, ou array.
Há problemas de confiabilidade e desempenho. RAID 0 não terá desempenho desejado com sistemas operacionais que não oferecem suporte a busca combinada de setores. Uma desvantagem desta organização é que a confiança se torna geometricamente pior. Um disco SLED com um tempo médio de vida de 20.000 horas será 4 vezes mais seguro do que 4 discos funcionando em paralelo com RAID 0 (admitindo-se que a capacidade de armazenamento somada dos quatro discos for igual ao do disco SLED). Como não existe redundância, não há confiabilidade neste tipo de organização.
Vantagens:
    - Acesso rápido as informações (até 50% mais rápido).
    - Custo baixo para expansão de memória.
Desvantagens:
    - Caso algum dos setores de algum dos HD’s venha a apresentar perda de informações, o mesmo arquivo que está dividido entre os mesmos setores dos demais HD’s não terão mais sentido existir, pois uma parte do arquivo foi corrompida, ou seja, caso algum disco falhe, não tem como recuperar.
    - Não é usado paridade.

#### RAID 1

RAID 1 implementa o espelhamento de disco, também conhecido como mirror. Para esta implementação são necessários no mínimo dois discos. O funcionamento deste nível é simples: todos os dados são gravados em dois discos diferentes; se um disco falhar ou for removido, os dados preservados no outro disco permitem a não descontinuidade da operação do sistema.
Com o RAID 1 consegue-se duplicar o desempenho na leitura de informação, pois as operações de leitura podem ser repartidas pelos dois discos.
Vantagens:
    - Caso algum setor de um dos discos venha a falhar, basta recuperar o setor defeituoso copiando os arquivos contidos do segundo disco.
    - Segurança nos dados (com relação a possíveis defeitos que possam ocorrer no HD).
Desvantagens:
    - Custo relativamente alto se comparado ao RAID 0.
    - Ocorre aumento no tempo de escrita.
    - Não é usado paridade.

#### RAID 2

RAID 2 é similar ao RAID 4, mas armazena informação ECC (Error Correcting Code), que é a informação de controle de erros, no lugar da paridade. Este facto possibilita uma pequena protecção adicional, porém o RAID 2 ficou obsoleto pelas novas tecnologias de disco já possuírem este tipo de correcção internamente. O RAID 2 origina uma maior consistência dos dados se houver queda de energia durante a escrita. Baterias de segurança e um encerramento correto podem oferecer os mesmos benefícios
Vantagem:
    - Usa ECC;
Desvantagem:
    - Hoje em dia há tecnologias melhores para o mesmo fim;

#### RAID 3

RAID 3 é similar ao RAID 4, exceto pelo fato de que ele usa o menor tamanho possível para o stripe. Como resultado, qualquer pedido de leitura invocará todos os discos, tornando as requisições de sobreposição de I/O difíceis ou impossíveis.
A fim de evitar o atraso em razão da latência rotacional, o RAID 3 exige que todos os eixos das unidades de disco estejam sincronizados. A maioria das unidades de disco mais recentes não possuem a opção de sincronização do eixo, ou se são capazes disto, faltam os conectores necessários, cabos e documentação do fabricante.
Vantagens:
    - Leitura rápida
    - Escrita rápida
    - Possui controle de erros
Desvantagem:
    - Montagem difícil via software

#### RAID 4

Funciona com dois ou mais discos iguais. Um dos discos guarda a paridade (uma forma de soma de segurança) da informação contida nos discos. Se algum dos discos avariar, a paridade pode ser imediatamente utilizada para reconstituir o seu conteúdo. Os discos restantes, usados para armazenar dados, são configurados para usarem segmentos suficientemente grandes (tamanho medido em blocos) para acomodar um registro inteiro. Isto permite leituras independentes da informação armazenada, fazendo do RAID 4 um array perfeitamente ajustado para ambientes transacionais que requerem muitas leituras pequenas e simultâneas.
O RAID 4 assim como outros RAID's, cuja característica é utilizarem paridade, usam um processo de recuperação de dados mais envolvente que arrays espelhados, como RAID 1. Este nível também é útil para criar discos virtuais de grande dimensão, pois consegue somar o espaço total oferecido por todos os discos, exceto o disco de paridade. O desempenho oferecido é razoável nas operações de leitura, pois podem ser utilizados todos os discos em simultâneo.
Sempre que os dados são escritos no array, as informações são lidas do disco de paridade e um novo dado sobre paridade deve ser escrito para o respectivo disco antes da próxima requisição de escrita ser realizada. Por causa dessas duas operações de I/O, o disco de paridade é o factor limitante do desempenho total do array. Devido ao facto do disco requerer somente um disco adicional para protecção de dados, este RAID é mais acessível em termos monetários que a implementação do RAID 1.
Vantagens:
    - Taxa de leitura rápida;
    - Possibilidade do aumento de área de discos físicos.
Desvantagens:
    - Taxa de gravação lenta.
    - Em comparação com o RAID 1, em caso de falha do disco, a reconstrução é difícil, pois o RAID 1 já tem o dado pronto no disco espelhado.
    - Tecnologia não mais usada por haver melhores para o mesmo fim.

#### RAID 5

O RAID 5 é frequentemente usado e funciona similarmente ao RAID 4, mas supera alguns dos problemas mais comuns sofridos por esse tipo. As informações sobre paridade para os dados do array são distribuídas ao longo de todos os discos do array , ao invés de serem armazenadas num disco dedicado, oferecendo assim mais desempenho que o RAID 4, e, simultaneamente, tolerância a falhas.
Para aumentar o desempenho de leitura de um array RAID 5, o tamanho de cada segmento em que os dados são divididos pode ser optimizado para o array que estiver a ser utilizado. O desempenho geral de um array RAID 5 é equivalente ao de um RAID 4, excepto no caso de leituras sequenciais, que reduzem a eficiência dos algoritmos de leitura por causa da distribuição das informações sobre paridade. A informação sobre paridade é distribuída por todos os discos; perdendo-se um, reduz-se a disponibilidade de ambos os dados e a paridade, até à recuperação do disco que falhou. Isto causa degradação do desempenho de leitura e de escrita.
Vantagens:
    - Maior rapidez com tratamento de ECC.
    - Leitura rápida (porém escrita não tão rápida).
Desvantagem:
    - Sistema complexo de controle dos HD's.

#### RAID 6

É um padrão relativamente novo, suportado por apenas algumas controladoras. É semelhante ao RAID 5, porém usa o dobro de bits de paridade, garantindo a integridade dos dados caso até 2 dos HDs falhem ao mesmo tempo. Ao usar 8 HDs de 20 GB cada um em RAID 6, teremos 120 GB de dados e 40 GB de paridade.
Vantagem:
    - Pode falhar 2 HD's ao mesmo tempo.
Desvantagens:
    - Precisa de N+2 HD's para implementar por causa dos discos de paridade.
    - Escrita lenta.
    - Sistema complexo de controle dos HD's.

#### RAID 0 (zero) + 1

O RAID 0 + 1 é uma combinação dos níveis 0 (Striping) e 1 (Mirroring), onde os dados são divididos entre os discos para melhorar o rendimento, mas também utilizam outros discos para duplicar as informações. Assim, é possível utilizar o bom rendimento do nível 0 com a redundância do nível 1. No entanto, é necessário pelo menos 4 discos para montar um RAID desse tipo. Tais características fazem do RAID 0 + 1 o mais rápido e seguro, porém o mais caro de ser implantado. No RAID 0+1, se um dos discos vier a falhar, o sistema vira um RAID 0.
Vantagens:
    - Segurança contra perda de dados.
    - Pode falhar metade dos HD's ao mesmo tempo, porém deixando de ser RAID 0 + 1.
Desvantagens:
    - Alto custo de expansão de hardware (custo mínimo = 2N HD's).
    - Os drivers devem ficar em sincronismo de velocidade para obter a máxima performance.

#### RAID 1+0

O RAID 1+0, ou 10, exige ao menos 4 discos rígidos. Cada par será espelhado, garantindo redundância, e os pares serão distribuídos, melhorando desempenho. Até metade dos discos pode falhar simultaneamente, sem colocar o conjunto a perder, desde que não falhem os dois discos de um espelho qualquer — razão pela qual usam-se discos de lotes diferentes de cada ‘lado’ do espelho. É o nível recomendado para bases de dados, por ser o mais seguro e dos mais velozes, assim como qualquer outro uso onde a necessidade de economia não se sobreponha à segurança e desempenho.
Vantagens:
    - Segurança contra perda de dados.
    - Pode falhar um ou dois dos HD's ao mesmo tempo, dependendo de qual avaria.
Desvantagens:
    - Alto custo de expansão de hardware (custo mínimo = 2N HD's).
    - Os drivers devem ficar em sincronismo de velocidade para obter a máxima performance.

#### RAID 50

É um arranjo híbrido que usa as técnicas de RAID com paridade em conjunção com a segmentação de dados. Um arranjo RAID-50 é essencialmente um arranjo com as informações segmentadas através de dois ou mais arranjos. Veja o esquema representativo abaixo:
Vantagens:
    - Alta taxa de transferência.
    - Ótimo para uso em servidores.
Desvantagens:
    - Alto custo de implementação e expansão de memória.

#### RAID 100

O RAID 100 basicamente é composto do RAID 10+0. Normalmente ele é implementado utilizando uma combinação e software e hardware, ou seja, implementa-se o RAID 0 via software sobre o RAID 10 via Hardware.
Segue exemplo abaixo:

## Organização de Arquivos

Arquivo é uma sequência de registros lógicos controlado pelo sistema de arquivos. Os dados são organizados logicamente quando se cria o modelo de dados, e estes dados são mapeados em arquivos para serem armazenados e estes são divididos em blocos físicos para finalmente serem armazenados no disco.
* Esta página é somente um esboço. Ampliando-a você ajudará a melhorar a Wikiversidade.