kiyoka.2011_09_10 RSSPLAIN

Related pages: !kiyoka.blog.list Sekka.ReleaseNote kiyoka.2011_09_17 Sekka.FAQ !kiyoka.blog.2011_09
4555555555555555555555555555555555555555555555
4

[Sekka] RedisEXTは仮想メモリ機能を使ってメモリを節約してくれる

5
 redis_logo
5

Redisはメモリが溢れた時に仮想メモリを使用するようだ。

5

単純なIn Memoryデータベースだと思っていたので、用途が限られると思っていた。

5

データが全てメモリに載りきらない応用にも使えるんじゃないかなぁ。

5

 

5

以下は、redis-serverを少ないメモリ容量のサーバで動かした時の様子。

5
PID   USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
5
  739 kiyoka    18   0  146m  98m 3672 S    0  2.4   0:34.84 sekka-server
5
  497 kiyoka    15   0  814m  46m  624 R    0  1.1   3:18.34 redis-server
5

 

5
 memcachedと“正反対”、Redisが仮想メモリをサポートEXT
5
  RedisはCで各種データ構造を実装したものをデーモンとしたようなソフトウェ
5
  アで、リード・ライトともに非常に高速なのが特徴。ただ、実メモリに乗り
5
  切らないデータセットは扱えないことから利用局面が限定的だった。バージョ
5
  ン2.0では、新たに独自に仮想メモリ機構を実装。実メモリに乗り切らないデー
5
  タをディスクへ書き出す仕組みを取り入れた。
5

 

5
  これはOSのスワップの仕組みそのものだが、Redisでは、あえて独自で実装し
5
  たという(実装にはLinuxカーネルを参考にしたという)。理由の1つは、デー
5
  タ構造が分かっている分、シリアライゼーションによる圧縮効果が高く(最
5
  大で10倍程度)、OSに依存するよりもはるかに効率がよくなること。もう1つ
5
  の理由は、キー・バリューのうち、キーだけはすべてメモリ上に保持すると
5
  いう設計が可能なため。キーがすべてメモリに乗っていることから、Redisの
5
  高速性は保たれるというわけだ。また実際のバリューのほうがいくら大きく
5
  なっても、メモリ消費量はキーの数にだけ依存することになり、100万キー当
5
  たり160MBのメモリ消費で済むという。
5

 

5

なるほど、キーだけメモリ上に置くというのは工夫だなぁ。独自で実装する意味あり。

5

 

5

こちらは詳細に仕様が書かれている。やはり効率良く仮想メモリを管理できるように独自に実装された仕様のようだ。

5
 仮想メモリ技術仕様 — redis v2.0.3 documentationEXT
5
 もうひとつの重要な仮想メモリの属性として、 vm_max_memory があります。
5
 このパラメータはスワップのトリガーを設定するために重要となります。
5
 Redisは、このメモリの設定値を超えた
5
 メモリを使用した場合にのみ、スワップを行おうとします。この値に到達しな
5
 い場合は、スワップの必要はないものとして動作します。
5

 

5

同じ実メモリ容量を使った状態でも体感速度は、Tokyo CabinetよりもRedisのほうが軽く感じる。(Tokyo Cabinetが64MByteでRedisが上記の46MByteを消費した状態の場合)

5

Sekkaは最後に確定した変換候補を記憶するために辞書ストレージに頻繁に書き込みにいくが、Tokyo Cabinetのほうは即座にDiskにsyncしようするのに対して、Redisのほうは遅延させているのだろうと推測している。

5

Sekkaの場合、最悪学習データがDiskに書き込まれずにサーバが落ちても致命的な問題にならない程度の重要度なのでRedisはSekka向きだ。

5

 

5

実際に使ってみればいろいろ工夫が見えて勉強になる。何事も実践あるのみだね。

5

 

5

 

5

...comment disabled...