> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:pgsql-hackers-
> [EMAIL PROTECTED] On Behalf Of Brian Hurt
> Sent: Thursday, December 20, 2007 6:42 AM
> To: pgsql-hackers@postgresql.org
> Subject: Re: [HACKERS] Sorting Improvements for 8.4
> 
> While we're blue skying things, I've had an idea for a sorting
algorithm
> kicking around for a couple of years that might be interesting.  It's
a
> variation on heapsort to make it significantly more block-friendly.  I
> have no idea if the idea would work, or how well it'd work, but it
might
> be worthwhile kicking around.
> 
> Now, the core idea of heapsort is that the array is put into heap
order-
> basically, that a[i] >= a[2i+1] and a[i] >= a[2i+2] (doing the 0-based
> array version here).  The problem is that, assuming that the length of
a
> is larger than memory, then a[2i+1] is likely going to be on a
different
> page or block than a[i].  That means every time you have to bubble
down
> a new element, you end up reading O(log N) blocks- this is *per
element*.
> 
> The variation is to instead work with blocks, so you have a block of
> entries b[i], and you change the definition of heap order, so that
> min(b[i]) >= max(b[2i+1]) and min(b[i]) >= max(b[2i+2]).  Also, during
> bubble down, you need to be carefull to only change the minimum value
of
> one of the two child blocks b[2i+1] and b[2i+2].  Other than that, the
> algorithm works as normal.  The advantage of doing it this way is that
> while each bubble down still takes O(log N) blocks being touched, you
> get a entire block worth of results for your effort.  Make your blocks
> large enough (say, 1/4 the size of workmem) and you greatly reduce N,
> the number of blocks you have to deal with, and get much better I/O
> (when you're reading, you're reading megabytes at a shot).
> 
> Now, there are boatloads of complexities I'm glossing over here.  This
> is more of a sketch of the idea.  But it's something to consider.

It's an interesting idea to work with a "heap of heaps" where you try to
keep each heap page-sized.  It reminds me of the B+ tree, where you
collect a whole bunch of nodes into a single page.

I don't know if you have examined weak-heaps, but there are some
interesting results for weak-heap approaches.  As you know, heapsort
variants do not degenerate to O(N^2).

On this link:
http://www.jea.acm.org/2002/EdelkampHeapsort/

I highly recommend all the goodies he has embedded (papers, source,
etc.)


---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

Reply via email to