2018/11/17

[c]LevelDB C (3)

11月になって寒くなってきたので、コタツ上のPCに移動。
こちらにはleveldbの環境が無いので、せっかくだからaptでinstallできるか試しておこう。

apt install libleveldb-dev
git clone https://github.com/hirokuma/leveldb-c-example.git
cd leveldb-c-example
gcc -Wall leveldb_example.c -lleveldb
./a.out

コンパイルも通って、実行もできた。


ライブラリやincludeのディレクトリも一緒にcommitしていたけど、それを削除してもビルドできたので大丈夫だろう。


さて、このサンプルだが、実行しても後に何も残らない。
DELETEしているところと、DESTROYしているところをコメントアウトすると、ディレクトリが残った。

「testdb」というフォルダ名で、これはleveldb_open()した名前と一致している。
実行はWindows10のWSLで行ったのだが、ディレクトリの中はこうなっていた。

image

Windowsの人としては、拡張子が付いている「000003.log」がテキスト形式であってほしかったが、テキスト形式らしきものは「CURRENT」と「LOG」だった。


CURRENT

01: MANIFEST-000002
02: 


LOG

01: 2018/11/17-22:09:16.387552 7f3d2e040740 Delete type=3 #1
02: 


000003.log

image


MANIFEST-000002

image


データらしきものは、拡張子がlogのファイルに残っているようだ。
LOGの、時間とコメントの間にある数字はデータのハッシュ値かと考えたが、"testdb"を削除して実行しても値が変わるし、変わるのは一部だけだから、何か時間の要素を使っているか、乱数を使っているだろうし、固定値の意味合いもあるのだろう。
いまだと「7f...」で始まるので時間かと思ったが、7fの次が変わるので単純な時間表現でもなさそうだ。


削除しないようにしてもう一度実行すると、LOGはLOG.oldにリネームして、新しく作り直すようだ。
つまり、1世代前のLOGまで残っている。

MANIFESTの番号も増えるし、拡張子がldbのファイルも増えたりしているので、作ったファイルの中身を知りたければ実装を読むか、解説記事を読んだ方がいいだろう。


私はそういうつもりがないので、今回はここまで。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。