[Pr�via] [Pr�xima] [Pr�via por assunto] [Pr�xima por assunto]
[�ndice cronol�gico]
[�ndice de assunto]
RE: HeapFile e Outros!
- Subject: RE: HeapFile e Outros!
- From: Francisco Reverbel <reverbel at ime.usp.br>
- Date: Fri, 21 May 1999 16:30:34 -0300
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