ᗡocuments

LevelDBでの数値データの永続化

LevelDBではメタデータとなる数値データを永続化する際に、圧縮を行わない場合と、圧縮を行う場合があります。ここでは、それぞれ場合について説明します。
またLevelDBでは32bitと64bit幅の数値データを扱います(ここではunsignedのデータのみを考慮します)。

圧縮なしの場合

圧縮を行わない場合には32bitまたは64bitをそのまま書込みますが、ポータビリティを考慮して、リトルエンディアンデンでの書込みを行います。

圧縮ありの場合

数値データを格納する際に、小さい数値である場合が多いことを考慮して圧縮を行ってデータを格納する場合があります。
以下に32bitの数値データの圧縮方法を示します。

uint32_tデータの圧縮

圧縮は32bitデータを7bitずつに分けて、7bitごとに1bitの制御フラグを設定する事で行います。数値の値によって必要な領域のみを用いることで圧縮を行います。制御フラグが0の場合はデータの終端を、1の場合は後続の8bitもデータ領域であることを示しています。
64bitの場合も同じ要領で圧縮を行うことができます。
この圧縮をキー長などの比較的大きくならないであろうメタデータに対して行うことで、利用領域の縮小を図っています。