Re: Runs y Logical Tapes

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Manolo _ <mac_man2005(at)hotmail(dot)it>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Runs y Logical Tapes
Date: 2008-02-12 21:24:45
Message-ID: 20080212212445.GR14683@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Manolo _ escribió:
>

> Yendo un poquito mas alla con la implementación de esas mismas
> estructuras pues tengo dudas sobre si puedo volver a leer el run que
> acabo de contruir.
> Queda claro que eso se puede facilmente obtener en cuando haya
> terminado dicho run: tengo su ultima tupla a la mano y como postgres
> me permite el "backward reading" (leer la tupla que precede a una
> cirta tupla) pues puedo llegar al principio del run leyendo al revez
> tupla tras otra. Obvio no es una manera muy eficiente para llegar al
> principio del run.

El problema es que una LogicalTapeSet se puede usar para mas de una
LogicalTape -- esto es crucial porque las LogicalTape, una vez que las
has leido, "liberan" el espacio de la LogicalTapeSet, de manera que una
LogicalTape distinta puede usar ese mismo bloque.

A eso me refiero con que "no se puede volver atras". En alguna parte de
logtape.c se menciona que las lecturas son "destructivas".

> La alternativa seria: en cuando comienze a construir un cierto run
> (accomodandolo en su tape correspondiente) pues quiero memorizar la
> direccion [en disco? en tape?] de la primera tupla de ese mismo run,
> de manera tal que una vez ultimado ese run esa cosa me permita acceder
> directamente al principio del run y leerlo justamente a partir de su
> primera tupla. Eso si se puede hacer?

No estoy seguro.

> Por otro lado comentas que no es posible "rebobinar". Me gustaria
> profundizar ese tema. No creo que te refieras a la imposibilidad de
> leer la tupla anterior de una cirta tupla: eso es posible gracias a la
> flag 'randomAcces'. Contrariamente a lo que pueda indicar ese nombre,
> tal flag nada mas permite un "backward reading" ademas del "forward
> reading" usado mas frequentemente por postgres.

Aqui estas confundiendo TupleStore con LogTape ...

> No se cuanto me pueda ayudar la estructura BufFile para poder
> memorizar temporalmente esa direccion y volver a retomarla cuando
> termine de escribir ese run.

... y aqui estas mezclando niveles de abstraccion diferentes. Una
LogicalTape se implementa usando LogicalTapeSet. Una LogicalTapeSet se
implementa usando BufFile. Sugiero mantener las capas logicamente
independientes.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manolo _ 2008-02-12 21:54:47 RE: Runs y Logical Tapes
Previous Message Nicolás Domínguez Florit 2008-02-12 21:24:33 Re: psql 8.3.0, error con usuario