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

9
Tokyo Cabinet & Tokyo Tokyo Cabinet & Tokyo Tyrant Tyrant ををををををををををををををををををををを

Upload: ngi-group

Post on 25-May-2015

2.210 views

Category:

Documents


1 download

TRANSCRIPT

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

Tokyo Cabinet & Tokyo Tokyo Cabinet & Tokyo TyrantTyrantを使ってみた。を使ってみた。

そして比較してみた

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

mixi の開発者の人が作った KVS です。 KVS なので高速に動作します。 memcached と高い互換性があります。 ファイル形式です。( on memory も選択可能)

Tokyo Cabinet : ライブラリ群Tokyo Tyrant : サーバ

Tokyo Cabinet, Tokyo TyrantTokyo Cabinet, Tokyo Tyrant って何?って何?

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

じゃあ、じゃあ、 KVSKVS って何?って何? Key-Value Store の略で、文字通り Key に対応した Value を 1 対 1 で持つデー

タ構造です。 Perl などの多くの言語が持つ連想配列 ( ハッシュ ) と同じです。

じゃあ、じゃあ、 KVSKVS だとなぜ速いの?だとなぜ速いの? Key の値をハッシュ関数に渡して、得られた値(ハッシュ値)が、

格納場所を示す値になるため、一回の探索で済む。→ハッシュ探索

ハッシュ探索 線形探索 二分探索

計算量 O (1)一回で見つかる

O (n)n の数に比例する

O (log n)一回の探索で残りの探索が n/2 になる

例 開発言語標準の連想配列Berkeley DBMemcachedTokyo Cabinet

順次ファイル(追記型ログ)配列(非ソート)

配列(ソート済)

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

ファイル形式だと何が嬉しいの?ファイル形式だと何が嬉しいの?

memcached はメモリキャッシュなので、落ちたらそれまで。全て消えます。バックアップも難しいです。

Tokyo Cabinet はファイル形式なので、 RAID の恩恵が得られますし、バックアップもファイルなので容易です。

注)メモリ形式も可能です。

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

#!/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 が持つほとんど命令を使えます。

memcahchedmemcahched との高い互換性との高い互換性

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

実際にベンチしてみた実際にベンチしてみた内容 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 秒

尚、 100 万件で試した場合、 memcached, TC ともにほぼ 10 倍でした。( MySQL は怖かったのでやってません)

100 万件入れた時のファイルのサイズは、 32MB でした。( Key, Value ともに、 10 文字以下程度)

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

TokyoTyrantとやりとりしてみる

[user@kvs1 ~]$ telnet localhost 1978

Trying 127.0.0.1...Connected to localhost

(127.0.0.1).Escape character is '^]'.statsSTAT pid 29241STAT uptime 86683STAT time 1254898343STAT version 1.1.34STAT rusage_user 10.360424STAT rusage_system 13.041017STAT curr_items 69453STAT bytes 8222544END

[user@kvs1 ~]$ telnet localhost 11211

Trying 127.0.0.1...Connected to localhost

(127.0.0.1).Escape character is '^]'.statsSTAT pid 19961STAT uptime 306231STAT time 1254891294STAT version 1.2.6STAT pointer_size 32STAT rusage_user 5.395179STAT rusage_system 11.608235STAT curr_items 29483STAT total_items 53887STAT bytes 8181340STAT curr_connections 5STAT total_connections 53907STAT connection_structures 9STAT cmd_get 29383STAT cmd_set 53887STAT get_hits 24405STAT get_misses 4978STAT evictions 0STAT bytes_read 15168129STAT bytes_written 7480029STAT limit_maxbytes 67108864STAT threads 4END

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 512345STOREDget key-001VALUE key-001 0 512345END

保存と参照

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

#!/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 variablesprog="ttserver"cmd="/usr/local/bin/ttserver"

TokyoTyrant TokyoTyrant を を ServiceService で起動するで起動する# vi /usr/local/sbin/ttservctl

# ln –s /usr/local/sbin/ttservctl /etc/init.d/ttserver# chkconfig --list ttserverttserver 0:off 1:off 2:off 3:on 4:on 5:on 6:off# service ttserver startStarting the server of Tokyo TyrantExecuting: /usr/local/bin/ttserver -port 1978 -dmn -pid /var/ttserver/pidDone

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

まとめまとめ

memcached の 70% ほどのパフォーマンスなので、十分高速。 ファイル形式である運用上のメリットを考えるとアリだと思います。 インストールは ./configure と make install だけ。 トラブルもとくに無かったです。

memcached TC&TT速度 - memcached 比 7

0 %

形式 オンメモリー ファイルオンメモリー

実績 枯れていて実績多数 Mixi など