Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SHOWROOMのDB負荷に対するキャッシュ運用のカクカクシカジカ
Search
shimizu-masaya
November 15, 2018
Programming
0
2.3k
SHOWROOMのDB負荷に対するキャッシュ運用のカクカクシカジカ
2018/11/15
ライブストリーミングHack #3 with SHOWROOM
https://mirrativ.connpass.com/event/106330/
shimizu-masaya
November 15, 2018
Tweet
Share
More Decks by shimizu-masaya
See All by shimizu-masaya
SHOWROOMエンジニアの裏側
otto0913
0
610
SHOWROOMの"最近"の負荷対策
otto0913
1
11k
SHOWROOMの泥臭い負荷対策
otto0913
1
2.1k
Other Decks in Programming
See All in Programming
Porting a visionOS App to Android XR
akkeylab
0
420
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
210
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
1
12k
Is Xcode slowly dying out in 2025?
uetyo
1
260
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
270
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
130
LINEヤフー データグループ紹介
lycorp_recruit_jp
1
2.4k
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
790
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
120
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.5k
効率的な開発手段として VRTを活用する
ishkawa
0
130
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
5
1.1k
Featured
See All Featured
Scaling GitHub
holman
459
140k
Docker and Python
trallard
44
3.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
950
RailsConf 2023
tenderlove
30
1.1k
Code Review Best Practice
trishagee
69
18k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
280
How to Ace a Technical Interview
jacobian
277
23k
Typedesign – Prime Four
hannesfritz
42
2.7k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Become a Pro
speakerdeck
PRO
28
5.4k
Transcript
4)08300.ͷ%#ෛՙʹର͢Δ Ωϟογϡӡ༻ͷΧΫΧΫγΧδΧ 4)08300.5FDI4UVEJP ࢤਫཧ࠸
ࣗݾհ ࢤਫཧ࠸ ͠Έͣ·͞ ུྺ ֶੜ࣌ιϑτΣΞֶΛઐ߈ %F/"ʹ৽ଔೖࣾɺιʔγϟϧήʔϜΩϡϨʔγϣϯϝσΟΞʹैࣄ 4)08300.ʹग़ ͖ͳݴ༿ ʮδμϯϥϧͷΑ͏ͳඒ͠͞ͳ͍͔Βɺ͕ͨͩΉ͠ΌΒʹؤுΔ͚ͩ͞ʯ
CZ1BWFM/FEWⒿE ʮటषͪ͘ΌͩΊͰ͔͢ʁʯCZ4BSJOB4PEB ʮແྉνΣΩձʯ
࠷ۙͷొஃͷհ 4USFBNJOH$POGFSFODF 4)08300.ͷz࠷ۙͷzෛՙରࡦ IUUQTTQFBLFSEFDLDPNPUUPTIPXSPPNGBMTF[VJKJOGBMTFGVIF EVJDF Φʔτεέʔϧͷؒʹ߹Θͳ͍ಥൃతͳෛՙʹରͯ͋͠Β͔͡ΊαʔόʔΛ૿ͯͪ͠ ߏ͑Δ Ԇ͕ͦ͜·ͰٻΊΒΕͳ͍৴Ͱੵۃతʹ$%/Λར༻
%#ෛՙʹର͢Δ Ωϟογϡӡ༻ͷΧΫΧΫγΧδΧ
ΧΫΧΫγΧδΧͱ ंϝʔΧʔͷ$.ΩϟϥΫλʔ ΞΠυϧͷָۂ Λলུͨ͠ࡍʹ۩ମతͳ༰ͷ༻ͱͯ͠༻͍ΒΕΔදݱ 4)08300.Ͱ%#ͷෛՙΛΧΫΧΫγΧδΧͳΩϟογϡͷ͍ํͰରࡦ ͍ͯ͠·͢ɻ ࠓ۩ମతͳ༰Λհ͠·͢
4)08300.Ͱར༻͍ͯ͠ΔΩϟογϡػߏ NFNDBDIFEαʔόʔ ϑΝΠϧΩϟογϡ ϓϩηεΩϟογϡ શͯͷαʔόʔɺશͯͷϓϩηεͰڞ௨ͷΛࢀরͰ͖Δɻ ωοτϫʔΫ*0͕͋Δɻ ಉ͡αʔόʔͷϓϩηεͰΛڞ༗Ͱ͖Δɻ ωοτϫʔΫ*0ͳ͍͕ɺϑΝΠϧ*0͕͋Δɻ ࠷ɻ ϓϩηε͝ͱʹΩϟογϡ͞ΕΔɻ
֎෦͔Βͷૢ࡞͕ࠔɻ 1 1 1 1 1 1 'JMF$BDIF .FNDBDIFE 1SPDFTT$BDIF
ͷߟ͑ΔΦεεϝͷΩϟογϡػߏ͍͚ ϙΠϯτ ߋ৽සɾλΠϛϯάΛߟྀ͢Δ w ϑΝΠϧΩϟογϡ ϓϩηεΩϟογϡ ͷଟஈΩϟογϡ w ͱʹ͔͘.Z42-αʔόʔʹϦΫΤετΛ ૹΒͤͳ͍
w ߋ৽ͷλΠϛϯάͰదͳέΞΛ w NFNDBDIFE w ϦΫΤετස͕͍ͷΩϟογϡ͠ ͳ͍ w దͳFYQJSF࣌ؒ w ߋ৽ͷλΠϛϯάͰDBDIFͷআPSߋ৽ Ϛελʔσʔλܥ Ϣʔβʔσʔλܥ ଟগͷԆɺζϨ͕ڐ༰͞ΕΔ߹ ԆζϨΛڐ༰ͨ͘͠ͳ͍߹
NFNDBDIFEͷӡ༻ςΫχοΫ
Ωϟογϡ͞ΕͯΕར༻ɺͳ͚Εऔಘͯ͠อଘ ϙΠϯτ ༻్͝ͱʹFYQJSFΛௐ͢Δ ελϯμʔυͳར༻ํ๏ɻ .Z42-ͳͲͷ%#ʹอଘ͞Ε͍ͯΔσʔλͱဃ Ԇ ͕ൃੜ͢Δ͜ͱ͕͋Δɻ Ԇ͕ʹͳΒͳ͍Α͏ʹFYQJSFΛௐ͢Δ my $memd
= Cache::Memcached::Fast->new(); my $value = $memd->get($cache_key); unless (defined($value)) { $value = _get_value(); $memd->set($cache_key, $value, 30); } print $value; ྫ ϥΠϒҰཡͷऔಘͳͲ ऴྃࡁΈͷϥΠϒ͕Ϧετʹؚ·ΕΔ߹͕͋ΔͷͰͦΕϑΟϧλͯ͠ϨεϙϯεΛฦ͢
σʔλ͕ߋ৽͞ΕͨΒΩϟογϡΛআ PSߋ৽ ͍ॴ ΩϟογϡʹΑΔԆΛճආ͍ͨ͠߹ Ϣʔβʔͷૢ࡞͕ଈ࣌ө͞Εͳ͍69ྑ͘ͳ͍ɻ NFNDBDIFE͚ͩͰͷอଘشൃϦεΫ͕͋Δ σʔλͷߋ৽࣌ʹΩϟογϡͷσʔλΛআ͢Δ͜ͱͰ࣍ճͷࢀর͕%#ʹ͘Α͏ʹ͢Δ $teng->update('update table_a set
hoge = 2 where id = 1'); $memd->delete($cache_key); # or $memd->set($cache_key, $new_obj, 30); ྫ ϧʔϜใͷऔಘͳͲ ϧʔϜ໊ͱ͔ߋ৽ͨ͠Βଈ࣌ʹө͞Εͯ΄ ͍͠
ಉ͡σʔλΛෳΩϟογϡͯ͠ෛՙࢄͰ͖ΔΑ͏ʹ͢Δ ͍ॴ ಛఆͷLFZͷΞΫηε͕ूதͯ͠ෛՙࢄͰ͖͍߹ NFNDBDIFEͷϊʔυΛෳ༻ҙͯ͠ಛఆͷLFZʹϦΫΤετ͕ूத͢Δͱҙਤ௨Γʹࢄ ͞Εͳ͍ͷͰ͕ඞཁ my $cache_key = join(':', ('room',
int(rand(3)))); my $value = $memd->get($cache_key); unless (defined($value)) { $value = _get_value(); $memd->set($cache_key, $value, 30); } $teng->update('update table_a set hoge = 2 where id = 1'); for my $i (0..2) { my $cache_key = join(':', ('room', $i)); $memd->delete($cache_key); } ਓؾԋऀʹ ϦΫΤετ͕ภΔ
ෳͷΩϟογϡػߏΛΈ߹Θͤͯར༻ ϙΠϯτ ෳࡶ͞ͱརศੑͷτϨʔυΦϑ 1 1 1 .FNDBDIFE 1SPDFTT$BDIF .Z42- 1
1 1 1 1 1 ϓϩηεΩϟογϡ͚ͩͷ ߹ɺϓϩηεͷ͚ͩ.Z42- ʹϦΫΤετ͕͘Δ NFNDBDIFEෛՙʹΑͬ ͯμϯ͢Δ͜ͱ͕͋Δ ଟஈΩϟογϡͷ֤ͰϦΫ ΤετΛϑΟϧλ͠ɺωοτ ϫʔΫ*0ͳͲܰݮ͢Δ Ωϟογϡ͕ෳͷʹ อଘ͞ΕΔͷͰɺҰ੪ߋ ৽ɺআۃΊͯࠔɻ ΩϟογϡΩʔΛมߋ͠ ࣮࣭ͯϦηοτ͕ݱ࣮త
·ͱΊ
·ͱΊ w 4)08300.Ͱར༻͍ͯ͠ΔΩϟογϡػߏΛ͝հ w NFNDBDIFE w ϑΝΠϧΩϟογϡ w ϓϩηεΩϟογϡ w
͍ํͷྫΛ4)08300.ͷࣄྫΛަ͑ͯհ w ߋ৽࣌ʹΩϟογϡআͰԆΛճආ w ಉ͡σʔλΛෳΩϟογϡͯ͠ෛՙࢄ w ଟஈΩϟογϡͷར༻ 4)08300.ɺϥΠϒετϦʔϛ ϯάʹݶΒͣ൚༻తʹ͑Δٕͩͱ ࢥ͏ͷͰɺ͝ࢀߟʹ͍͖ͯͨͩͭ͠ ͭɺͬͱ͍͍ํ๏͋Εڭ͑ͯ͘ ͍ͩ͞ʂҰॹʹษڧͤͯͩ͘͞͞ ͍ʂʂ
None
ϥΠϒετϦʔϛϯά 4)08300. ͳΒͰͷେม͞ w ͍͖ͳΓਓؾ৴͕͡·Δ w ͍͖ͳΓେ͖ͳऔΓΈ͕ܾ·Δ w ͍͖ͳΓ"1*ϦΫΤετ͕εύΠΫ͢Δ ίϯςϯπʹΑΔӨڹ͕େ͖͍
ߴෛՙͳίϯςϯπͷ߹ɺχϡʔεϝσΟΞ ʹऔΓ্͛ΒΕΔ͜ͱଟʑ͋ΓɺͦΜͳίϯ ςϯπͱ͖߹͑ΔͷΓ͕͍ϙΠϯτɻ ৴։࢝લʹʮαʔόʔམͪΔͷͰʁʯͱ͍ͬ ͨͭͿ͖Λݟ͚ͭΔͱzෛ͚ͣݏ͍zαʔόʔ Λzࢧ͑ͳ͖Όײz͕ൃಈͯ͠ΑΓΔؾͰΔɻ 8&#αʔόʔʹؔͯ͠৴αʔόʔಉ༷ʹ Φʔτεέʔϧ͕ؒʹ߹Θͳ͍ಥൃతͳߴෛՙ ͕ൃੜ͢ΔͷͰɺࣄલ४උɾ৺ߏ͕͑ඞཁ
ऴΘΓ ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 4)08300.ʑ͍ͯ͠·͢ɻ ͦΜͳαʔϏεͱҰॹʹ͍ͨ͠ෛ͚ͣݏ͍ ͳΤϯδχΞΛืू͍ͯ͠·͢ʂ