Re: Alternative variable length structure - Mailing list pgsql-hackers

From Manfred Koizar
Subject Re: Alternative variable length structure
Date
Msg-id d4r2i11e99hikuupl2e345dm7o18v1tn8d@email.aon.at
Whole thread Raw
In response to Alternative variable length structure  (ITAGAKI Takahiro <itagaki.takahiro@lab.ntt.co.jp>)
Responses Re: Alternative variable length structure
List pgsql-hackers
On Thu, 08 Sep 2005 18:02:44 +0900, ITAGAKI Takahiro
<itagaki.takahiro@lab.ntt.co.jp> wrote:
+  * The length of varlena2 is encoded as follows:
+  *
+  * | First    | Trailing | Total | Max     |
+  * | byte     | bytes    | bits  | length  |
+  * +----------+----------+-------+---------+
+  * | 0******* |        0 |     7 | 127     |
+  * | 10****** |        1 |    14 | 16K  -1 |
+  * | 110***** |        2 |    21 | 2M   -1 |
+  * | 1110**** |        3 |    28 | 256M -1 |
+  * | 1111---- |        4 |    32 | 4G   -1 |

With external and compression flags this would look like  * | ec0***** |        0 |     5 | 31      |  * | ec10**** |
    1 |    12 | 4K   -1 |  * | ec110*** |        2 |    19 | 512K -1 |  * | ec1110** |        3 |    26 | 64M  -1 |  *
|ec1111-- |        4 |    32 | 4G   -1 |
 

Only a matter of taste, but I'd just waste one byte for sizes between 4K
and 512K and thus get a shorter table:  * | ec0***** |        0 |     5 | 31      |  * | ec10**** |        1 |    12 |
4K  -1 |  * | ec110*** |        3 |    27 | 128M -1 |  * | ec111--- |        4 |    32 | 4G   -1 |
 

And you get back that one byte for sizes between 64M and 128M :-)

Another possible tweak:  * | 0******* |        0 |     5 | 127     |  * | 1ec0**** |        1 |    12 | 4K   -1 |  * |
1ec10***|        3 |    27 | 128M -1 |  * | 1ec11--- |        4 |    32 | 4G   -1 |
 

I.e. drop the flags for very short strings.  If these flags are needed
for a string of size 32 to 127, then use a two byte header.

ServusManfred


pgsql-hackers by date:

Previous
From: Martijn van Oosterhout
Date:
Subject: Re: Case insensitive indexing in posgtres?
Next
From: Simon Riggs
Date:
Subject: statement_timeout logging