Ordenação Externa de
Arquivos – Um exemplo
AULA 16 – Parte II
Profa. Sandra de Amo
GBC053 – BCC
Arquivo Q de 108 páginas em disco
Descrever as operações para ordenar as tuplas do
arquivo Q, distribuídas em 108 páginas em disco.
Cada página tem duas tuplas, portanto o arquivo Q
contém 216 tuplas ao todo.
Dispõe-se de somente 4 páginas na memória principal
para realizar a ordenação de todas as tuplas. Logo,
não será possível carregar as 108 páginas de uma só
vez e aplicar um algoritmo de ordenação interna (tipo
quicksort, bubblesort, etc)
Buffer com 4 páginas
Etapa 0
Arquivo em disco
Ordena os registros das 4 páginas
em memória principal utilizando um
algoritmo de ordenação interna:
quicksort, bubblesort, por exemplo.
Buffer com 4
páginas
Tais algoritmos são do tipo “in place”:
fazem a ordenação utilizando o
próprio espaço ocupado pelos registros,
Sem necessidade de mais páginas
livres para fazer as operações.
Etapa 0
Buffer com 4
páginas
Etapa 0
Subarquivo 1 = 4 páginas ordenadas
Subarquivo 2 = 4 páginas ordenadas
Subarquivo 3 = 4 páginas ordenadas
Buffer com 4
páginas
Etapa 0
Subarquivo 1 = 4 páginas ordenadas
Subarquivo 2 = 4 páginas ordenadas
Subarquivo 3 = 4 páginas ordenadas
Buffer com 4
páginas
...
Subarquivo 27 = 4 páginas ordenadas
Custo da Etapa 0
• Ao final da etapa 0 temos 27 arquivos de
4 páginas cada um.
• Cada um dos subarquivos está ordenado.
• Custo = 2.108 = 216 I/Os
• Na etapa 0, carregamos blocos de 4
páginas cada no buffer.
• Total de blocos carregados = 108/4 = 27
Etapa 1
Agrupa-se os 27 subarquivos de 3 em 3
(3 = B – 1 = 4 - 1)
Cada bloco constituido de 3 subarquivos
tem 3*4 = 12 páginas
Nº de blocos de 12 páginas = 27/3 = 9
Etapa 1
São 9 iterações na etapa 1.
Em cada iteração, cada subarquivo de 12
páginas é carregado, ordenado na
memória principal e gravado de volta no
disco, totalmente ordenado.
A ordenação de cada subarquivo utiliza
um algoritmo de ordenação EXTERNA, de
forma iterativa.
Etapa 1
No final da Etapa 1 temos 9 subarquivos de
12 páginas cada um.
Cada um dos 9 subarquivos está ordenado
Custo da etapa 1 = 2*108 = 216 I/O
Etapa 2
Agrupa-se os 9 subarquivos de 3 em 3
(3 = B – 1 = 4 - 1)
Cada bloco constituído de 3 subarquivos
tem 3*12 = 36 páginas
Nº de blocos de 36 páginas = 9/3 = 3
Etapa 2
São 3 iterações na etapa 2.
Em cada iteração, cada subarquivo de 36
páginas é carregado, ordenado na
memória principal e gravado de volta no
disco, totalmente ordenado.
A ordenação de cada subarquivo utiliza
um algoritmo de ordenação EXTERNA, de
forma iterativa.
Etapa 2
No final da Etapa 2 temos 3 subarquivos de
36 páginas cada um.
Cada um dos 3 subarquivos está ordenado
Custo da etapa 2 = 2*108 = 216 I/O
Etapa 3
Agrupa-se os 3 subarquivos
(3 = B – 1 = 4 - 1)
Temos um único bloco constituído de 3
subarquivos com 3*36 = 108 páginas
Etapa 3
Em uma única iteração o arquivo de 108
páginas é carregado, ordenado na
memória principal e gravado de volta no
disco, totalmente ordenado.
A ordenação do arquivo utiliza um
algoritmo de ordenação EXTERNA, de
forma iterativa.
Etapa 3
No final da Etapa 3 temos 1 arquivo de 108
páginas completamente ordenado
Custo da etapa 3 = 2*108 = 216 I/O
Nº total de etapas = 1 + log3 ( 108/4) =
1 + log3 ( 27) = 1 + 3 = 4
Custo total da ordenação = 4*216 = 864 I/O
Algoritmo
Input: Arquivo A com P páginas (em disco), B = nº de páginas livres no buffer
Output: Arquivo A ordenado (em disco).
1.
M = [P/B]
2.
[A1,...,AM] = Separa_SubArq(A)
3.
For each i = 1, ..., M do
4.
- Lê Ai
5.
- AiOrd = Ordena_INT(Ai)
6.
- Grava AiOrd
7.
M = [M/B-1]
8.
While M ≥ 1 do
9.
- [A1,...,AM] = Separa_SubArq(A)
10.
- Para cada i = 1, ..., M
11.
* Lê Ai
12.
* AiOrd = Ordena_EXT(Ai)
13.
* Grava AiOrd
14.
- A = A1Ord U A2Ord U A3Ord . ... U AMOrd
15.
- M = [M/B-1]
Ordena_Ext
5
10
1
7
13
6
11
18
9
14
21
11
16
22
15
19
30
20
24
28
32
35
22
25
Ai
Uma das 9 iterações da Etapa 1
Download

Exemplo - Sandra de Amo