[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