WEB時代の
大富豪的プログラミング
   のススメ
    @chimerast
   たけうちひでゆき
自己紹介


• たけうちひでゆき

• 肩書き: 永遠のNEET

• Twitter: @chimerast
富豪的プログラミング

• メモリや実行効率を気にしないでお気楽にプロ
 グラムを作る

• 条件が変わる度にすべての計算や表示を行なう

               by 増井俊之 (富豪化理論研究家)
                                  1996/10/14
            http://www.pitecan.com/fugo.html
memcachedの功罪

• 猫も   子もmemcached

• キャッシュが欲しい?
 じゃあmemcachedで。



• そんな装備で大丈夫か?
じゃあ、何使えばいいの?
In-Process Cache
In-Process Cache

• Map<String, T> cache
   = new HashMap<String, T>();


• var cache = {};


• %cache = ();
In-Process Cacheの利点

• ネットワークコストがかからない!

• Serializationコストがかからない!


•   注: ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破
    棄を実装したモジュールを使うこと

•   あとThread-safeかどうかも重要
データ数による速度の違い
        Nop       LocalMemcached   RemoteMemcached     InProcessCache



800ms


600ms


400ms


200ms


 0ms
              1            10        100        1000        10000

                          get() size=64kb, loop=1000, thread=1
同時アクセス数による速度の違い
         Nop       LocalMemcached       RemoteMemcached   InProcessCache



7000ms


5250ms


3500ms


1750ms


  0ms
               1              10          20         50         100

                      get()        size=64kb, count=10000, loop=1000
同時アクセス数による速度の違い

      単位: ms             1        10       20        50       100

Nop                      0.518     2.243    0.397     0.406     2.884

LocalMemcachd       454.321      907.012 1582.445 3896.407 6626.150

RemoteMemcachd      664.972      737.439 1168.138 2866.942 5642.771

InProcessCache           5.846    63.923   99.005   168.975   180.256



                 get()       size=64kb, count=10000, loop=1000
実験環境
• Java: In-Memory CacheはGuavaのCacheBuilderを
   使用

• MacBook Pro
  Retina, Mid 2012
• 2.3 GHz Intel Core i7
• 8 GB 1600 MHz DDR3


• https://github.com/chimerast/cachebench
In-Process Cacheで
       できないこと



• 本当に大規模なキャッシュ(数TBとか)

• セッションオブジェクトの共有

• forkするようなcgiとかphpとか
まとめ

• それほんとにmemcachedがマッチして
 るの?



• メモリなんて最近安いんだから、
 APサーバにメモリを64GBでも積んで
 In-Process Cacheを使えばいいじゃない

Web時代の大富豪的プログラミングのススメ