[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

RE: HeapFile e Outros!



Marcos Yamamoto writes:
 > 
 >    O que seria um pageType da classe HFPage?
 >    Esses tipos seriam: um para diretorio de Paginas, um para diretorio de 
 > Arquivos e um outro que guarda os DBObjects?

Sim. Poderia tambem haver um tipo para "página livre". 

Mas veja bem: você não é obrigado a usar o pageType. Me parece que ele
está nas HFPages para facilitar a recuperação de (partes de) um Database
corrompido por problemas físicos no disco. Por exemplo: se uma lista
ligada de blocos foi cortada porque uma parte do disco se estragou, uma
programa de recuperação pode tentar recompor a lista ligada. É claro
que dados nos blocos ruins estão perdidos, mas os dados que apareciam
depois dos blocos ruins na lista ligada podem ser recuperados. Para esse
programa é muito bom que cada bloco contenha um pageType. Antes que você
se assuste mais: a implementação de um programa que recupere Databases
corrompidos não faz parte do nosso projeto!

 >    Criaremos um Heapfile para cada chamada de
 > createRecordSet(... , ...), certo?

Sim, cada chamada createRecordSet(...) deve criar um Heapfile.

 > Desse modo colocariamos cada Heapfile 
 > numa page do tipo dir page? Mas se for isso nao podemos inserir o objeto 
 > Heapfile na page pq ela nao é um DBObject.

Quando criar um novo Heapfile voce precisará, no mínimo:

  1) Alocar a primeira página do diretório de páginas do heapfile. Caso
     o heapfile cresça bastante, esse diretório de páginas crescerá e
     ocupará outras páginas. (O diretório de páginas é uma lista ligada
     de páginas.)

  2) Alocar uma entrada no diretório de arquivos. Essa entrada deve
     conter pelo menos as seguintes informações:
      - o nome do heapfile,
      - o pageId da primeira página do diretório de páginas, e
      - o tipo (Class) dos objetos que vão ser guardados no heapfile.
     A seu critério, essa entrada pode também conter o pageId da
     primeira página de dados (cujos registros correspondem a DBObjects
     armazenados pelas aplicações) do heapfile.

Além disso você pode também alocar a primeira página de dados do
heapfile (que estará vazia, pois o heapfile foi recém criado) e colocar
no diretório de páginas uma entrada (a primeira) correspondente a essa
página. Ou pode deixar para fazer isso mais tarde, quando o primeiro
DBObject for adicionado ao heapfile.

 > Estou muito confuso!!! Qual seria a funcao de um Heapfile e como eu devo 
 > implementa-la????

Como não entendi bem o que está confundindo você, vou dizer algo que é
meio genérico, sobre uma confusão que quase todo mundo faz.

A confusão usual é entre as coisas que existem no disco e as coisas
que existem na memória. Todas as estruturas mencionadas acima (diretório
de arquivos de um Database, diretório de páginas de um Heapfile, páginas
de dados) moram no disco. O que existe na memória são objetos Database,
objetos Heapfile, etc... Os campos desses objetos é que ficam na
memória.

Para sair da confusão, sugiro que você pense sobre esses objetos e
defina que campos eles devem ter. Os campos devem conter as informações
que você vai precisar para lidar com as estruturas em disco. No caso de
um Heapfile, imagino algo como:

class Heapfile implements RecordSet {

    private Class recordType;
    private long firstDirPage;  // id da primeira página de uma lista ligada
    private long firstDataPage; // id da primeira página de uma lista ligada
    ...

}

Reverbel