tc – dei, 2005/2006. armazenamento de dados -- ficheiros & bases-de-dados -- paulo marques...
TRANSCRIPT
TC – DEI, 2005/2006
Armazenamento de Dados-- Ficheiros & Bases-de-Dados --
Paulo [email protected]://www.dei.uc.pt/~pmarques
Tecnologia dos Computadores 2005/2006
TC – DEI, 2005/2006
Motivação
Departamento de Engenharia Informática Numerus clausus = 120, Duração média=4.5anos Alunos Inscritos… 120x4.5 = 630 Adicionemos alunos de mestrado, doutoramento, docentes e
funcionários… ~ 1000 pessoas
Sistema de Informação… struct Pessoa {
char nome[80]; long BI;
char morada[200]; pixel_rgb fotografia[640][480]; ...
};
sizeof(Pessoa) 900 Kbyte 900Kbyte * 1000 900 Mbyte
TC – DEI, 2005/2006
Motivação (2)
É necessário armazenar os dados de forma persistente (i.e. não volátil)
Não é possível manter simultaneamente todos os dados em memória, mesmo quando o programa está em execução Os 900 Mbyte foram uma estimativa por baixo!
TC – DEI, 2005/2006
Sistemas de Informação
Actualmente, é comum separar-se as aplicações em dados persistentes e “lógica de negócio” Em sistemas “pequenos”: Ficheiros directos Em sistemas “grandes”: Bases-de-dados
Lógicade
Controlo
DadosPersistentes
Programa
TC – DEI, 2005/2006
Sistema de Ficheiros
Sistema de Ficheiros: Recurso directamente disponível a nível do sistema operativo
O SO apenas oferece primitivas para: Abrir e fechar ficheiros Ler e escrever blocos de bytes no ficheiro
O programador é responsável por programar toda a gestão de dados nos ficheiros Índices para pesquisas rápidas, tolerância a erros, gestão de
concorrência, etc.
AplicaçãoAplicação
TC – DEI, 2005/2006
Bases-de-Dados
Existe um programa especial (SGBD – Sistema de Gestão de Base-de-Dados) que faz toda a gestão dos dados Oracle, MS-SQL Server, Postgre, MySQL, etc.
O programa estabelece uma ligação à base-de-dados utilizando um protocolo chamado ODBC A BD pode estar na mesma máquina ou noutra máquina
Através da ligação, envia os seus dados e pode fazer pesquisas SQL = Structured Query Language
AplicaçãoAplicação
Base de
Dados
SGBD (Sistema de
Gestão de BD)
ODBC
Sistemas de Ficheiros
TC – DEI, 2005/2006
Acesso a ficheiros
O sistema operativo disponibiliza funções para: Abrir e fechar ficheiros open() / close() Ler e escrever dados read()/write()
Quando se abre um ficheiro, é retornado um handle (inteiro) que representa o ficheiro nesse processo
TC – DEI, 2005/2006
Acesso a ficheiros (2)
Associado a cada handle, que representa um ficheiro aberto, também existe um FILE POINTER (FP) O FP representa a posição corrente de leitura ou escrita no
ficheiro O FP é incrementado automaticamente sempre que há uma
leitura ou escrita
Associado a cada handle existe um buffer de dados Principio da localidade temporal e espacial Funciona como cache e pre-fetch
FP
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Ficheiro
TC – DEI, 2005/2006
Como é que o SO organiza os ficheiros?
Árvore de Directórios
TC – DEI, 2005/2006
Como é que o SO sabe onde estão os ficheiros?
TC – DEI, 2005/2006
Um exemplo prático FAT (DOS/Windows)
O disco encontra-se dividido em sectores (clusters), a unidade mínima de informação a que se consegue aceder num disco
No início do disco (disquete) existe: Boot sector File Allocation Table (FAT) Disk Root Directory
TC – DEI, 2005/2006
FAT
Cada entrada da FAT indica qual o próximo sector que um certo ficheiro ocupa
Cada entrada da Disk Root Directory indica o nome e atributos de um certo ficheiro, assim como o seu primeiro sector
207 203 EOF 204 205 EOF 202 208 209 215 FREEEOF 214 BAD EOF
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
Boot FAT Directory Table Data
Frequência.doc RH 2003.12.05-17:30 … 201
Disco
O ficheiro “Frequência.doc”ocupa os sectores 201, 203, 204 e 205
Exame.doc RH 2003.12.06-14:21 … 21010345
14121
TC – DEI, 2005/2006
Questões…
A Disk Root Table apenas contém as entradas do directório raiz do disco. Como é que são guardadas os sub-directórios?
FAT16 quer dizer que os ponteiros na FAT são de 16 bits. Qual é o número máximo de ficheiros que o disco
pode ter? Tendo um disco de 40Gbytes, qual seria o tamanho
de cada sector (cluster)? Vê algum problema nisso?(hoje, em Windows, quando não se utiliza NTFS utiliza-se FAT32)
TC – DEI, 2005/2006
Voltemos ao Sistema de Informação…
Suponhamos que armazenamos todas as pessoas do DEI num ficheiro sequencial…
“Pessoas.dat”
JOANA FRANCISCA 10896534 R. Fernão Lop
Qual é o problema se quisermos encontrar o alunocom o BI Nº 10896534?
Esquecendo as caches…Tempo médio de acesso ao disco = 10msEm média temos de percorrer ½ ficheiro = 500 entradas500 entradas X 10ms = 5000ms = 5s!!!
TC – DEI, 2005/2006
Utilização de Índices
Se se sabe que vão ser feitas pesquisas por BI, cria-se uma tabela especial que para cada BI indica qual a entrada no ficheiro que a contém. Esta tabela chama-se um índice sobre o BI A tabela é armazenada conjuntamente no ficheiro ou num
ficheiro à parte
10896534 12
11843234 43
17345342 234
(…) (…)
BI Entrada
“Pessoas.dat” 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 … …
TC – DEI, 2005/2006
Utilização de Índices
Os índices resultam porque… Tipicamente o tamanho do índice é muito mais pequeno do
que o tamanho dos dados Muitas vezes é mesmo possível manter todo o índice em
memória Os índices podem estar ordenados (pesquisa binária) ou pode
fazer-se hashing*
Um índice deste género também é conhecido como TABELA INVERTIDA (Inverted Table)
* Hashing Uma técnica muito inteligente e rápida que permite encontrar um elemento numa tabela usando tipicamente apenas uma comparação. Irá falar muito dela durante o próximo ano (PA3)
TC – DEI, 2005/2006
Tamanho do Índice
Atenção: em muitos sistemas, o tamanho dos índices pode tornar-se um problema
No nosso caso e admitindo que o Sistema de Informação comporta no máximo 10.000 alunos, qual é que teria de ser o tamanho do índice para BIs?
TC – DEI, 2005/2006
» If you don’t find it in the index, look very carefully through the entire catalogue «
Sears, Roebuck and Co. Consumer’s Guide, 1897
TC – DEI, 2005/2006
TC – DEI, 2005/2006
Bases-de-Dados
A aplicação estabelece uma ligação ao SGBD que é responsável por manter todos os dados da aplicaçãoO protocolo de comunicação utilizado é ODBDA linguagem utilizada para falar com a BD chama-se SQL (Structured Query Language)
A base-de-dados tem obrigação de: Mandar os dados de forma
persistente Facilitar a forma como a
gestão dos dados é realizada Responder a interrogações e
actualizações de forma rápida
Tolerar falhas (e.g. faltar a luz a meio de uma escrita)
AplicaçãoAplicação
Base de
Dados
SGBD (Sistema de
Gestão de BD)
ODBC
TC – DEI, 2005/2006
Modelo de Dados
A maioria das bases-de-dados actuais seguem o chamado MODELO RELACIONAL No Modelo Relacional, os dados são vistos em
termos de tabelas e relações entre tabelas
Tabela Alunos
NUM_ALUNO NOME MORADA ANO_NASC
501000885 José AntónioR. D. Carlos I, 126, 3000-204
Coimbra1980
501003426 Carlos AlbertoR. Alexandre Herculano, 12A,
3030-123 Coimbra1982
505404534 José MalaquiasR. Pinhal Marrocos, 43, 3030-290
Coimbra1981
... … ... ...
TC – DEI, 2005/2006
NUM_ALUNO NOME MORADA ANO_NASC
501000885 José AntónioR. D. Carlos I, 126, 3000-204
Coimbra1980
501003426 Carlos AlbertoR. Alexandre Herculano, 12A,
3030-123 Coimbra1982
505404534 José MalaquiasR. Pinhal Marrocos, 43, 3030-290
Coimbra1981
... … ... ...
Tabelas
Tuplo: Conjunto ordenado de dados relacionados
Chave Primária: Atributo especial que permite identificar univocamente um tuplo
Atributo: Algo que caracteriza a entidade
TC – DEI, 2005/2006
RelacionamentosNUM_ALUNO NOME MORADA ANO_NASC
501000885 José AntónioR. D. Carlos I, 126, 3000-204
Coimbra1980
501003426 Carlos AlbertoR. Alexandre Herculano, 12A,
3030-123 Coimbra1982
505404534 José MalaquiasR. Pinhal Marrocos, 43, 3030-290
Coimbra1981
... … ... ...
NUM_CADEIRA NOME_CADEIRA ANO SEMESTRE
1 Tecnologias dos Computadores 1 1
3 Programação e Algoritmos II 1 2
6 Sistemas Operativos 2 1
... … ... ...
Tabela Alunos
Tabela Cadeiras
Tabela InscriçõesNUM_CADEIRA ANO
1 1998
3 1998
1 1998
... ...
NUM_INSC
3243
4321
1232
...
NUM_ALUNO
501003426
...
NOTA
12
13
19
...
501000885
501000885
6 19993487 505404534 NULL
TC – DEI, 2005/2006
Relacionamentos
A tabela Inscrições está relacionada com a tabela Alunos e Cadeiras As chaves primárias dos relacionamentos aparecem
como atributos da chave do relacionamento
NUM_ALUNO NOME MORADA ANO_NASC
501000885 José AntónioR. D. Carlos I, 126, 3000-204
Coimbra1980
501003426 Carlos AlbertoR. Alexandre Herculano, 12A,
3030-123 Coimbra1982
505404534 José MalaquiasR. Pinhal Marrocos, 43, 3030-290
Coimbra1981
... … ... ...
NUM_CADEIRA NOME_CADEIRA ANO SEMESTRE
1 Tecnologias dos Computadores 1 1
3 Programação e Algoritmos II 1 2
6 Sistemas Operativos 2 1
... … ... ...
NUM_CADEIRA ANO
1 1998
3 1998
1 1998
... ...
NUM_INSC
3243
4321
1232
...
NUM_ALUNO
501003426
...
NOTA
12
13
19
...
501000885
501000885
6 19993487 505404534 NULL
TC – DEI, 2005/2006
Exemplo Prático – MS Access
TC – DEI, 2005/2006
Queries
Como as tabelas estão relacionadas, é possível fazer “interrogações” (queries) à base-de-dados Exemplo: “Quais os nomes e anos de nascimento dos alunos
que estiveram inscritos a Tecnologias dos Computadores em 1998”
NUM_ALUNO NOME MORADA ANO_NASC
501000885 José AntónioR. D. Carlos I, 126, 3000-204
Coimbra1980
501003426 Carlos AlbertoR. Alexandre Herculano, 12A,
3030-123 Coimbra1982
505404534 José MalaquiasR. Pinhal Marrocos, 43, 3030-290
Coimbra1981
... … ... ...
NUM_CADEIRA NOME_CADEIRA ANO SEMESTRE
1 Tecnologias dos Computadores 1 1
3 Programação e Algoritmos II 1 2
6 Sistemas Operativos 2 1
... … ... ...
NUM_CADEIRA ANO
1 1998
3 1998
1 1998
... ...
NUM_INSC
3243
4321
1232
...
NUM_ALUNO
501003426
...
NOTA
12
13
19
...
501000885
501000885
6 19993487 505404534 NULL
12
3 4
5
6
77
TC – DEI, 2005/2006
Queries - SQL
“Quais os nomes e os anos de nascimento dos alunos que estiveram inscritos a Tecnologias dos Computadores em 1998”
SELECT nome, ano_nasc FROM alunos A, cadeiras C, inscrições INS WHERE nome_cadeira=‘Tecnologias dos Computadores’ AND
INS.ano = 1998 AND
C.num_cadeira = INS.num_cadeira AND
INS.num_aluno = A.num_aluno
TC – DEI, 2005/2006
Queries - SQL
As queries em SQL também retornam tabelas SELECT nome, ano_nasc
FROM alunos A, cadeiras C, inscrições INS WHERE nome_cadeira=‘Tecnologias dos Computadores’ AND
INS.ano = 1998 ANDC.num_cadeira = INS.num_cadeira ANDINS.num_aluno = A.num_aluno
NOME ANO_NASC
José António 1980
Carlos Alberto 1982NUM_CADEIRA ANO
1 1998
3 1998
1 1998
... ...
NUM_INSC
3243
4321
1232
...
NUM_ALUNO
501003426
...
NOTA
12
13
19
...
501000885
501000885
6 19993487 505404534 NULL
3 45
NUM_ALUNO NOME MORADA ANO_NASC
501000885 José AntónioR. D. Carlos I, 126, 3000-204
Coimbra1980
501003426 Carlos AlbertoR. Alexandre Herculano, 12A,
3030-123 Coimbra1982
505404534 José MalaquiasR. Pinhal Marrocos, 43, 3030-290
Coimbra1981
... … ... ...67
7NUM_CADEIRA NOME_CADEIRA ANO SEMESTRE
1 Tecnologias dos Computadores 1 1
3 Programação e Algoritmos II 1 2
6 Sistemas Operativos 2 1
... … ... ...
12
TC – DEI, 2005/2006
Inserção de Dados - SQL
Também se podem inserir dados na base-de-dados…
INSERT INTO alunos(num_aluno, nome, morada,
ano_nasc) VALUES (5010034322,
‘Teresa Matos’, ‘R. Alforrecas, 12, 3000-203
Coimbra’, 1984)
TC – DEI, 2005/2006
Recordemos…
AplicaçãoAplicação
Base de
Dados
SGBD (Sistema de
Gestão de BD)
ODBC
SELECT nome FROM alunos
O que viaja na ligação são estas“ordens”, na linguagem SQL. A aplicação tem de enviar as suasordens nesta linguagem e processar os resultados retornados
TC – DEI, 2005/2006
Criação de Bases-de-Dados
Na prática, quando se quer fazer uma base-de-dados, não se começa por criar tabelas… Cria-se (modela-se) o problema:
Modelo CONCEPTURAL da Base-de-dados
Para criar o modelo conceptual da Base-de-dados, utilizam-se Diagramas ENTIDADE-RELACIONAMENTO (Diagramas ER)
Só após se ter o diagrama Entidade-Relacionamento é que se criam as tabelas: MODELO FÍSICO da Base-de-dados Muitas vezes, as ferramentas permitem passar
automaticamente do modelo conceptual para o modelo físico
TC – DEI, 2005/2006
Modelo Entidade-Relacionamento
Modela o problema em termos de ENTIDADES e RELAÇÕES entre entidadesAs relações podem ser de: 1 para 1 (1:1) 1 para N (1:N) N para N (N:N)
As relações podem ter participação obrigatória ou não
ALUNO CADEIRAInscritoN N
TESTE
Possui
1
N
TC – DEI, 2005/2006
Leitura do ER
Cada aluno pode estar inscrito em várias cadeiras; cada cadeira pode ter vários alunos inscritosCada aluno tem de estar obrigatoriamente inscrito a uma cadeira; pode haver cadeiras sem alunos (e.g. cadeiras que não funcionam num ano)Em cada cadeira pode haver vários testes; cada teste só pode pertencer a uma cadeiraPode haver cadeiras sem testes (e existem!); Cada teste tem de ter obrigatoriamente uma cadeira associada
TC – DEI, 2005/2006
Recordemos…
TC – DEI, 2005/2006
Informática é mais do que escrever código…
Mars Climate Orbiter, crashed into Mars on Sep 23, 1999Cost US$125 million dollars
“The Mars Climate Orbiter Spacecraft was lost because one NASA team used Imperial units while another used metric units for a key spacecraft operation” (BBC Online Report,1999/09/30)
TC – DEI, 2005/2006
Transacções em BDs – Motivação
Base de
Dados
REDE
“Transfere €1.000.000 da conta 43248932 para a conta 43298743”
1: boolean ok = conta1.retira(1000000);2: if (ok)3: {4: conta2.coloca(1000000);5: }
-- E se a aplicação “crasha” na linha 2??-- E se deixa de haver ligação de rede na linha 4??-- E se o servidor “crasha” entre a linha 1 e 2??
TC – DEI, 2005/2006
Transacções em BDs
Uma das razões muito importantes para se utilizar BDs, para além da performance, é o ter garantias de integridade de dados
Transacção: uma conjunto de operações que devem ser executadas de forma indivisível (i.e. atómica) Uma operação atómica é aquela em que ou executa
tudo ou não executa nada As base-de-dados têm suporte directo para
transacções
TC – DEI, 2005/2006
Transacções
Transacção Tem um início bem definido Ou existe um COMMIT ou
um ROLLBACK COMMIT As alterações
tornam-se permanentes ROLLBACK As alterações
são anuladas
Durante uma transacção, as alterações na BD apenas são visíveis para o utilizador que as está a fazer. Todos os outros utilizadores
vêem os dados como se nada estivesse a acontecer
(...)
trans.beginTransaction();
boolean ok = conta1.retira(1000000);
if (ok){ conta2.coloca(1000000); trans.commitTransaction();}else trans.rollbackTransaction();
TC – DEI, 2005/2006
Transacções – Ideia da Implementação
Sempre que um utilizador inicia uma transacção, todos os dados sobre os quais trabalha são privados (é feita uma cópia)
Quando é feito o COMMIT da transacção, a BD é então actualizada No caso de haver conflito no acesso a dados, pode
ser necessário suspender temporariamente outras transacções Dentro da transacção: é
criada uma cópia de todosos dados que estão a seractualizados
COMMIT: Actualiza-seROLLBACK: Deita-se fora
TC – DEI, 2005/2006
Para saber mais…
Computer Science – An Overview Capítulo 8 (8.1, 8.2, 8.3) Capítulo 9 (9.1, 9.2, 9.3)
Computer Science Illuminated Capítulo 11 (11.1, 11.2) Capítulo 12 (12.1, 12.3)