Upload
hideyuki-takeuchi
View
4.708
Download
1
Embed Size (px)
DESCRIPTION
社内勉強会のLTで当たり前なことを大まじめに話してみました。
Citation preview
WEB時代の大富豪的プログラミング
のススメchimerast
たけうちひでゆき
自己紹介
bull たけうちひでゆき
bull 肩書き 永遠のNEET
bull Twitter chimerast
富豪的プログラミング
bull メモリや実行効率を気にしないでお気楽にプログラムを作る
bull 条件が変わる度にすべての計算や表示を行なう
by 増井俊之 (富豪化理論研究家)
19961014httpwwwpitecancomfugohtml
memcachedの功罪
bull 猫も194780子もmemcached
bull キャッシュが欲しい
じゃあmemcachedで
bull そんな装備で大丈夫か
じゃあ何使えばいいの
In-Process Cache
In-Process Cache
bull MapltString Tgt cache = new HashMapltString Tgt()
bull var cache =
bull cache = ()
In-Process Cacheの利点
bull ネットワークコストがかからない
bull Serializationコストがかからない
bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと
bull あとThread-safeかどうかも重要
データ数による速度の違い
0ms
200ms
400ms
600ms
800ms
1 10 100 1000 10000
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb loop=1000 thread=1
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
自己紹介
bull たけうちひでゆき
bull 肩書き 永遠のNEET
bull Twitter chimerast
富豪的プログラミング
bull メモリや実行効率を気にしないでお気楽にプログラムを作る
bull 条件が変わる度にすべての計算や表示を行なう
by 増井俊之 (富豪化理論研究家)
19961014httpwwwpitecancomfugohtml
memcachedの功罪
bull 猫も194780子もmemcached
bull キャッシュが欲しい
じゃあmemcachedで
bull そんな装備で大丈夫か
じゃあ何使えばいいの
In-Process Cache
In-Process Cache
bull MapltString Tgt cache = new HashMapltString Tgt()
bull var cache =
bull cache = ()
In-Process Cacheの利点
bull ネットワークコストがかからない
bull Serializationコストがかからない
bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと
bull あとThread-safeかどうかも重要
データ数による速度の違い
0ms
200ms
400ms
600ms
800ms
1 10 100 1000 10000
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb loop=1000 thread=1
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
富豪的プログラミング
bull メモリや実行効率を気にしないでお気楽にプログラムを作る
bull 条件が変わる度にすべての計算や表示を行なう
by 増井俊之 (富豪化理論研究家)
19961014httpwwwpitecancomfugohtml
memcachedの功罪
bull 猫も194780子もmemcached
bull キャッシュが欲しい
じゃあmemcachedで
bull そんな装備で大丈夫か
じゃあ何使えばいいの
In-Process Cache
In-Process Cache
bull MapltString Tgt cache = new HashMapltString Tgt()
bull var cache =
bull cache = ()
In-Process Cacheの利点
bull ネットワークコストがかからない
bull Serializationコストがかからない
bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと
bull あとThread-safeかどうかも重要
データ数による速度の違い
0ms
200ms
400ms
600ms
800ms
1 10 100 1000 10000
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb loop=1000 thread=1
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
memcachedの功罪
bull 猫も194780子もmemcached
bull キャッシュが欲しい
じゃあmemcachedで
bull そんな装備で大丈夫か
じゃあ何使えばいいの
In-Process Cache
In-Process Cache
bull MapltString Tgt cache = new HashMapltString Tgt()
bull var cache =
bull cache = ()
In-Process Cacheの利点
bull ネットワークコストがかからない
bull Serializationコストがかからない
bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと
bull あとThread-safeかどうかも重要
データ数による速度の違い
0ms
200ms
400ms
600ms
800ms
1 10 100 1000 10000
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb loop=1000 thread=1
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
じゃあ何使えばいいの
In-Process Cache
In-Process Cache
bull MapltString Tgt cache = new HashMapltString Tgt()
bull var cache =
bull cache = ()
In-Process Cacheの利点
bull ネットワークコストがかからない
bull Serializationコストがかからない
bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと
bull あとThread-safeかどうかも重要
データ数による速度の違い
0ms
200ms
400ms
600ms
800ms
1 10 100 1000 10000
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb loop=1000 thread=1
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
In-Process Cache
In-Process Cache
bull MapltString Tgt cache = new HashMapltString Tgt()
bull var cache =
bull cache = ()
In-Process Cacheの利点
bull ネットワークコストがかからない
bull Serializationコストがかからない
bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと
bull あとThread-safeかどうかも重要
データ数による速度の違い
0ms
200ms
400ms
600ms
800ms
1 10 100 1000 10000
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb loop=1000 thread=1
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
In-Process Cache
bull MapltString Tgt cache = new HashMapltString Tgt()
bull var cache =
bull cache = ()
In-Process Cacheの利点
bull ネットワークコストがかからない
bull Serializationコストがかからない
bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと
bull あとThread-safeかどうかも重要
データ数による速度の違い
0ms
200ms
400ms
600ms
800ms
1 10 100 1000 10000
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb loop=1000 thread=1
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
In-Process Cacheの利点
bull ネットワークコストがかからない
bull Serializationコストがかからない
bull 注 ちゃんとキャッシュ用途で使うならLRUアルゴリズム等による破棄を実装したモジュールを使うこと
bull あとThread-safeかどうかも重要
データ数による速度の違い
0ms
200ms
400ms
600ms
800ms
1 10 100 1000 10000
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb loop=1000 thread=1
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
データ数による速度の違い
0ms
200ms
400ms
600ms
800ms
1 10 100 1000 10000
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb loop=1000 thread=1
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
同時アクセス数による速度の違い
0ms
1750ms
3500ms
5250ms
7000ms
1 10 20 50 100
Nop LocalMemcached RemoteMemcached InProcessCache
get() size=64kb count=10000 loop=1000
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
同時アクセス数による速度の違い
単位 ms 1 10 20 50 100
Nop
LocalMemcachd
RemoteMemcachd
InProcessCache
0518 2243 0397 0406 2884
454321 907012 1582445 3896407 6626150
664972 737439 1168138 2866942 5642771
5846 63923 99005 168975 180256
get() size=64kb count=10000 loop=1000
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
実験環境
bull Java In-Memory CacheはGuavaのCacheBuilderを使用
bull MacBook ProRetina Mid 2012
bull 23 GHz Intel Core i7
bull 8 GB 1600 MHz DDR3
bull httpsgithubcomchimerastcachebench
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
In-Process Cacheでできないこと
bull 本当に大規模なキャッシュ(数TBとか)
bull セッションオブジェクトの共有
bull forkするようなcgiとかphpとか
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない
まとめ
bull それほんとにmemcachedがマッチしてるの
bull メモリなんて最近安いんだからAPサーバにメモリを64GBでも積んでIn-Process Cacheを使えばいいじゃない