エンジニア知識共有会発表資料_20091008_TokyoCabinet
Upcoming SlideShare
Loading in...5
×
 

エンジニア知識共有会発表資料_20091008_TokyoCabinet

on

  • 3,009 views

 

Statistics

Views

Total Views
3,009
Views on SlideShare
2,801
Embed Views
208

Actions

Likes
1
Downloads
11
Comments
0

5 Embeds 208

http://techknowledge.ngigroup.com 101
http://techknowledge.fractalist.jp 96
http://www.slideshare.net 7
http://webcache.googleusercontent.com 3
http://web.archive.org 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

エンジニア知識共有会発表資料_20091008_TokyoCabinet エンジニア知識共有会発表資料_20091008_TokyoCabinet Presentation Transcript

  • Tokyo Cabinet & Tokyo Tyrant を使ってみた。 そして比較してみた
    • mixi の開発者の人が作った KVS です。
    • KVS なので高速に動作します。
    • memcached と高い互換性があります。
    • ファイル形式です。 ( on memory も選択可能)
    Tokyo Cabinet : ライブラリ群 Tokyo Tyrant : サーバ Tokyo Cabinet, Tokyo Tyrant って何?
  • じゃあ、 KVS って何?
    • Key-Value Store の略で、文字通り Key に対応した Value を 1 対 1 で持つデータ構造です。
    • Perl などの多くの言語が持つ連想配列 ( ハッシュ ) と同じです。
    じゃあ、 KVS だとなぜ速いの?
    • Key の値をハッシュ関数に渡して、得られた値(ハッシュ値)が、
    • 格納場所を示す値になるため、一回の探索で済む。->ハッシュ探索
    ハッシュ探索 線形探索 二分探索 計算量 O (1) 一回で見つかる O (n) n の数に比例する O (log n) 一回の探索で残りの探索が n/2 になる 例 開発言語標準の連想配列 Berkeley DB Memcached Tokyo Cabinet 順次ファイル(追記型ログ) 配列(非ソート) 配列(ソート済)
  • ファイル形式だと何が嬉しいの?
    • memcached はメモリキャッシュなので、落ちたらそれまで。全て消えます。バックアップも難しいです。
    • Tokyo Cabinet はファイル形式なので、 RAID の恩恵が得られますし、バックアップもファイルなので容易です。
    注)メモリ形式も可能です。
    • #!/usr/bin/perl
    • use strict;
    • use Cache::Memcached::Fast;
    • my $srvport = "localhost:1978";
    • #my $srvport = "localhost:11211";
    • my $cache = Cache::Memcached::Fast->new({servers=>[$srvport]});
    • $cache->set('KEY', 'VALUE');
    • my $val = $cache->get('KEY');
    • $cache->set('KEY2', '0');
    • $cache->incr(‘KEY2');
    Cache::Memcached::Fast などがそのまま使えます。 memcached が持つほとんど命令を使えます。 memcahched との高い互換性
  • 実際にベンチしてみた 尚、 100 万件で試した場合、 memcached, TC ともにほぼ 10 倍でした。 ( MySQL は怖かったのでやってません) 100 万件入れた時のファイルのサイズは、 32MB でした。 ( Key, Value ともに、 10 文字以下程度) 内容 Memcached TC&TT MySQL 10 万件の保存と取得 15.5 秒 21.7 秒 2 分 45 秒 10 万件の取得 7.5 秒 11.7 秒 1 分 11 秒 10 万件の取得 2 回目 - - 32 秒 10 万件の挿入 8.6 秒 10.2 秒 InnoDB 1 分 34 秒 MyISAM 57 秒
    • [user@kvs1 ~]$ telnet localhost 1978
    • Trying 127.0.0.1...
    • Connected to localhost (127.0.0.1).
    • Escape character is '^]'.
    • stats
    • STAT pid 29241
    • STAT uptime 86683
    • STAT time 1254898343
    • STAT version 1.1.34
    • STAT rusage_user 10.360424
    • STAT rusage_system 13.041017
    • STAT curr_items 69453
    • STAT bytes 8222544
    • END
    TokyoTyrant とやりとりしてみる [user@kvs1 ~]$ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. stats STAT pid 19961 STAT uptime 306231 STAT time 1254891294 STAT version 1.2.6 STAT pointer_size 32 STAT rusage_user 5.395179 STAT rusage_system 11.608235 STAT curr_items 29483 STAT total_items 53887 STAT bytes 8181340 STAT curr_connections 5 STAT total_connections 53907 STAT connection_structures 9 STAT cmd_get 29383 STAT cmd_set 53887 STAT get_hits 24405 STAT get_misses 4978 STAT evictions 0 STAT bytes_read 15168129 STAT bytes_written 7480029 STAT limit_maxbytes 67108864 STAT threads 4 END TokyoTyrant memcached [user@kvs1 ~]$ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. set key-001 0 0 5 12345 STORED get key-001 VALUE key-001 0 5 12345 END 保存と参照
    • #!/bin/sh
    • #----------------------------------------------------------------
    • # Startup script for the server of Tokyo Tyrant
    • #----------------------------------------------------------------
    • # chkconfig: 345 85 15
    • # description: Startup script for the server of Tokyo Tyrant
    • # processname: tokyotyrant
    • # configuration variables
    • prog=" ttserver "
    • cmd=" /usr/local/bin/ttserver "
    TokyoTyrant を Service で起動する # vi /usr/local/sbin/ttservctl # ln –s /usr/local/sbin/ttservctl /etc/init.d/ttserver # chkconfig --list ttserver ttserver 0:off 1:off 2:off 3:on 4:on 5:on 6:off # service ttserver start Starting the server of Tokyo Tyrant Executing: /usr/local/bin/ttserver -port 1978 -dmn -pid /var/ttserver/pid Done
  • まとめ
    • memcached の 70% ほどのパフォーマンスなので、十分高速。
    • ファイル形式である運用上のメリットを考えるとアリだと思います。
    • インストールは ./configure と make install だけ。
    • トラブルもとくに無かったです。
    memcached TC&TT 速度 - memcached 比 70 % 形式 オンメモリー ファイル オンメモリー 実績 枯れていて実績多数 Mixi など