kiyoka.2015_04_29 RSSPLAIN

Related pages: !kiyoka.blog !kiyoka.blog.list !kiyoka.blog.2015_04
555555555555555555555555
5

[Sekka] Daybreakというpure rubyのkey-value-storeを試してみた

5

 

5

目的

5

Sekkaの辞書データベースとして、プラットフォームに依存しない形式は無いものかと探している。

5

Sekkaの辞書データは結構大きいので、Sekkaインストール時にInternetから取得する方式にしているのだけど、プラットフォーム依存だとどうしても導入時に変換が入ってしまう。

5

その変換時間がバカにならない。

5

できれば、ダウンロードして即動かしたい。

5

現在Sekka辞書 1.6.1でサポートしているフォーマットはgdbm/TokyoCabinet/Redisで、どれもtsvからの読み込みが発生してしまう。

5

 

5

結論:Daybreakはメモリ消費量が多すぎてボツ

5

これが、試しに実装してみたブランチ。リリースはしない。

5
 https://github.com/kiyoka/sekka/tree/daybreak_db
5

 

5

in memoryデータベースなのでしょうがないとはいえ、Sekka辞書ver1.6.1では3GByteのメモリを消費してしまう。

5

同じin memoryデータベースのRedisだと1.2GByte程度で収まる。

5

Daybreak 0.3.0のドキュメントを読む限り、内部はRubyのHashをそのまま保持しているようだ。

5

それに対してRedisはデータ圧縮などの工夫や、その他の工夫をしているようで、メモリフットプリントが少ない。

5

 

5

感想

5

一般論として、pure rubyのまともなkvsは実現が困難だと思う。

5

データ量が小さいのであれば、pure rubyのHashクラスをそのまま使うのはありだろうが、ある程度データ量が増えると、どこかでDISKに退避したりメモリフットプリントを減らす工夫が必要だと思う。

5

結局RedisやTokyo CabinetなどC言語などできめ細かく実装するしかないと思う。

5

 

5

...comment disabled...