可変長配列の column の圧縮

可変長配列(VLA=Variable-Length Array)は直接 table に保存されるのではなくヒープ領域に保存されるため、VLA を含む BINTABLE タイルの圧縮には特別な考慮が必要である。 元の非圧縮 table の VLA column にはヒープ中での配列のサイズと位置を示す 2つの整数からなる記述子のみが含まれる。 解凍時には VLA をヒープ中の元と同じ場所に戻すためにこれらの記述子が必要となる。 そのためタイル中の VLA column の圧縮は次のような手順となる。


-1.0mm

  1. column 中の各 VLA に対して
    -1.0mm
  2. 圧縮 table の VLA 記述子の一時配列に非圧縮 table の VLA 記述子を追加する。
  3. 両記述子を含む配列を 'GZIP_1' で圧縮し、そのバイトストリームを出力 table の対応する VLA column に書き込む。これにより圧縮配列はヒープに追記される。


解凍時は、記述子の配列を Gzip で解凍後、圧縮配列の各記述子に対し、圧縮 table から圧縮 VLA を読込み、その VLA column に対する ZCTYPで指示されたアルゴリズムで解凍し、非圧縮 table の正しい位置に書き込む、という手順になる。



Osamu Kanamitsu
2019-02-15