TokyoTyrantについて

    椛澤 嘉弘
今回のLT
•   TokyoTyrantの紹介
•   その素晴らしさ
•   今回で何に使っているのか
•   使っていて困ったことは何か
TokyoTyrantってなに?
• 不揮発性のKVSです。
• MySQLのようなトランザクション処理、他
  テーブルとの結合ができるRDBMSではな
  く、
  分散処理に向いた速度を追求したNoSQLで
  す。

どのくらい早いのかベンチマーク
http://gihyo.jp/dev/serial/01/various-
TokyoTyrantというかNoSQLの特
             徴
• ベンチマークから分かるように、かなり
  早い。
• 特にデータの読み込みはかなり早いので、
  ソーシャルゲームなどのフラグ管理に良
  くつかわれる。
• スケールアウトしやすい。(TTは無
  理っぽいらしいですが)
詳しくは
http://www.atmarkit.co.jp/flinux/rensai/noSQL/
  noSQL_01/01_1.html
今回はどんなことに使っているの
          か。
•   現在のスタミナ、スタミナの最大値
•   現在のマナ
•   今どこのダンジョンにいるのか
•   一番進んでいるダンジョンはどこか
•   ガチャが回せるかフラグ
•   ログイン処理
•   ダンジョンで消費するスタミナ
•   などなど
具体的な使い方1
• KVSなので、少しだけ面白い使い方を
  します。

(ex)スタミナの挿入・取得
tt->put(“stmaina_”.$user_id,$stamina);
tt->get(“stamina_”.$user_id);
具体的な使い方2
• MySQLのようなテーブル型のDBならば
  $user_idを入力するだけで全ての情報を取
  り出せるのですが、今回はテーブル型で
  はなく、
KVS型でやっているので$user_idの前に、
カラム名のように名前を付けることで適切
 なデータの挿入・取得を行っています。
詳しくは、tt_game.phpに関数をまとめてお
 いたので、暇な時に見てください。
今回使っていて困ったこと1
• TokyoTyrantをphpから触るために
  Net_TokyoTyrantというPEARの提供するラ
  イブラリを使いました。

• そのためTokyoTyrantの醍醐味ともいえる
  add()が使えない。(中身見ると実装され
  てなかったり)
その対策1
• add()を一番使いたかったのは、mana関係
• Staminaなどは毎回取得して判定を行わな
  ければならなかったにも関わらず、mana
  は中身を気にせずインクリメントしてい
  きたかった。

• Net_TokyoTyrantを変更する、PEARではな
  くPECLの提供するTTを使う。などあったの
  ですが、リクエストが1回増える程度な
  のでとりあえず放置しています。
今回使っていて困ったこと2
• phpは動的に変数の型を決めるのですが、
  Net_TokyoTyrantの中ではValueが強制的に
  String型に変更されているため、ガチャフ
  ラグに0と1を使おうとしていたのですが、
  phpあるある的にstirng型の0や”0”などは全
  てnullになっちゃうっていう怖さ。配列の
  0,0,0は入るんだけど、 stirng型の0は入ら
  ないんですね。
その対策2
• Dungeonの情報については、
どのダンジョンに
どのフロアに
どのルームにいるのかという情報があった
 ので、
配列をJSONエンコードして、データを入れ
 ております。
TokyoTyrantについて

    椛澤 嘉弘

文字ばっかりでさーせんした!

2 12椛澤「tokyo tyrant」