!kiyoka.blog.2015_04 RSSPLAIN

Related pages: !kiyoka.blog.list
55555555555555555555555555555545
5

kiyoka日記。NendoSekkaの開発や、最近思うことなど

5

最新10件!kiyoka.blog   過去記事一覧!kiyoka.blog.list

5

kiyoka.blog_header 

5

このブログを書いている人: 西山 清香(kiyoka) - twitter: @kiyokaEXT

5

5

 

5

 

5

kiyoka.2015_04_29[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

 

4

comment (disabled)

5