On 03.08.2012 14:46, Amit kapila wrote:
Currently the change is done only for fixed length columns for simple tables 
and the tuple should not contain NULLS.

This is a Proof of concept, the design and implementation needs to be changed 
based on final design required for handling other scenario's

Update operation:
-----------------------------
1. Check for the simple table or not.(No toast, No before update triggers)
2. Works only for not null tuples.
3. Identify the modified columns from the target entry.
4. Based on the modified column list, check for any variable length columns are 
modified, if so this optimization is not applied.
5. Identify the offset and length for the modified columns and store it as an 
optimized WAL tuple in the following format.
    Note: Wal update header is modified to denote whether wal update 
optimization is done or not.
         WAL update header + Tuple header(no change from previous format) +
                 [offset(2bytes)] [length(2 bytes)] [changed data value]
                 [offset(2bytes)] [length(2 bytes)] [changed data value]
   ....
   ....

The performance will need to be re-verified after you fix these limitations. Those limitations need to be fixed before this can be applied.

It would be nice to use some well-known binary delta algorithm for this, rather than invent our own. OTOH, we have more knowledge of the attribute boundaries, so a custom algorithm might work better. In any case, I'd like to see the code to do the delta encoding/decoding to be put into separate functions, outside of heapam.c. It would be good for readability, and we might want to reuse this in other places too.

--
  Heikki Linnakangas
  EnterpriseDB   http://www.enterprisedb.com

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to