RE: 2WRS

From: Manolo _ <mac_man2005(at)hotmail(dot)it>
To: Jaime Casanova <systemguards(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: 2WRS
Date: 2008-02-04 12:29:39
Message-ID: BAY112-W2A80FD3A8A10539C646EFE6330@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


He creado el "patch" con

diff -c ./postgresql-8.2.5/src/backend/utils/sort/tuplesort.c ./postgresql-8.2.5-REFINED/src/backend/utils/sort/tuplesort.c> tuplesort.patch

Se lo adjunto.
Ahora como marcar ese patch como WIP?

Contesto a tus preguntas:
> Por ejemplo, como defines el otro heap? como interactuan ambos? Lo
> haces asi desde el inicio (es decir, aun cuando ordena en memoria) o
> solo cuando pasa a external storage?

INTRO
La memoria [el array 'memtuples'] se ordena [qsort] y luego se parte en dos. Eso implica que tenemos dos heaps que llamamos UP and DOWN. Cada uno produce su proprio run fisico de manera que esa pareja se puede considerar como una unica entidad que llamanos "run logico". Durante la fase de merge se funden runs logicos.

DETALLES
De los dos heaps uno será un maxheap [elemento mas grande en la raiz] y el otro un minheap [elemento menor en la raiz]. Cada tupla de input va exclusivamente en uno u otro heap. El DOWN heap es un heap normal y corriente. El UP es un heap "al reves". Para que tengan una idea, los dos juntos se pueden imaginar en posicion de "clepsidra" [el reloj de arena] con el UP heap cabeza abajo y el DOWN heap cabeza arriba.

Los dos heaps no comunican entre si. Cuando uno termina se siguen metiendo tuplas en el otro hasta que tb el otro termine: entonces se empieza un nuevo run logico.

ESTADO DE OBRA
Para probar la técnica, en la espera de una idea mas eficiente, necesito re-acomodar los runs físicos para que formen el run logico. Concretamente el run logico se contruye escribiendo el runUP [run producido por el heap UP] al revés y juntandole tal cual el runDOWN [producido por heap DOWN].

Para que les quede claro imagínense un array memtuples de 10 elementos ordenados, partan la memoria por ejemplo por la mitad e imagínense la clepsidra. La tupla de input la acomodan en uno u otro heap y saquen una tupla del heap correspondiente. Tal tupla se acomodará en el run correspondiente. Finalmente se encuentraran 2 runs fisico que pertenecen ambos al mismo run logico.

Espero algún comentario.
Se que puede que haya alguna dificultad por la escasez de detalles. Pero prefiero contestar a preguntas concretas poquito a poco que escribir un mail kilométrico.
Les pido por favor no duden en pedir por cualquier tipo de aclaración.

Gracias por su atención.
Un saludo.

----------------------------------------
> Date: Sun, 3 Feb 2008 11:41:02 -0500
> From: systemguards(at)gmail(dot)com
> To: mac_man2005(at)hotmail(dot)it
> Subject: Re: [pgsql-es-ayuda] 2WRS
> CC: pgsql-es-ayuda(at)postgresql(dot)org
>
> 2008/2/3 :
>> Hola de nuevo a todos.
>> Hola Jaime.
>>
>> Gracias por tu resumen de los posts hechos por mi en postgres-hackers.
>> Hay un historial parecido por pqsql-es-ayuda tambien?
>>
>
> Si, en http://archives.postgresql.org/pgsql-es-ayuda
>
>> En fin estoy de acuerdo que se necesite un "patch". Ya buscaré en Google
>> "como crearse un patch" o algo por el estilo.
>>
>
> si descargaste los fuentes del CVS lo que debes hacer es: "cvs diff -c"
> sino, debes crear una copia de los archivos que modificaste (si es uno
> solo asi es mas facil) o de la carpeta pgsql (si son varios archivos);
> luego usando el comando diff:
>
> Si es un solo archivo:
> diff -c archivo.c.orig archivo.c> archivo.patch
>
> Si son varios:
> diff -c -r directorio.orig directorio> archivo.patch
>
>> De todas formas creo que lo ideal seria mandar un patch con una version
>> 'completa' del codigo que implemente la tecnica y supongo que no la tendrè
>> hasta que no sepa como solucionar lo que puse en mi post "Posicion de los
>> Runs en los Tapes".
>>
>
> No, lo ideal seria saber que has logrado hasta ahora y para eso sirven
> los parches marcados como WIP (work in progress).
>
> Por ejemplo, como defines el otro heap? como interactuan ambos? Lo
> haces asi desde el inicio (es decir, aun cuando ordena en memoria) o
> solo cuando pasa a external storage?
> Solo le he dado una leida rapida a tuplesort.c pero es obvio que no es
> tarea facil
>
> --
> Atentamente,
> Jaime Casanova
>
> "Programming today is a race between software engineers striving to
> build bigger and better idiot-proof programs and the universe trying
> to produce bigger and better idiots.
> So far, the universe is winning."
> Richard Cook

_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/

Attachment Content-Type Size
tuplesort.patch text/x-patch 24.3 KB

Responses

  • Re: 2WRS at 2008-02-04 14:41:24 from Alvaro Herrera
  • Re: 2WRS at 2008-02-04 15:03:25 from Jaime Casanova

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Rodriguez Fernando 2008-02-04 12:40:13 Re: dudas con schemas
Previous Message Silvio Quadri 2008-02-04 09:20:59 Re: conexion desde internet!