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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
shimizu-masaya
November 15, 2018
Programming
2.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SHOWROOMのDB負荷に対するキャッシュ運用のカクカクシカジカ
2018/11/15
ライブストリーミングHack #3 with SHOWROOM
https://mirrativ.connpass.com/event/106330/
shimizu-masaya
November 15, 2018
More Decks by shimizu-masaya
See All by shimizu-masaya
SHOWROOMエンジニアの裏側
otto0913
0
620
SHOWROOMの"最近"の負荷対策
otto0913
1
11k
SHOWROOMの泥臭い負荷対策
otto0913
1
2.2k
Other Decks in Programming
See All in Programming
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
390
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
320
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
220
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.3k
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
270
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
220
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
320
New "Type" system on PicoRuby
pocke
1
840
JavaDoc 再入門
nagise
0
320
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
140
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
120
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
750
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
360
How to make the Groovebox
asonas
2
2.2k
Rails Girls Zürich Keynote
gr2m
96
14k
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
The Pragmatic Product Professional
lauravandoore
37
7.3k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
160
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Paper Plane
katiecoart
PRO
1
51k
4 Signs Your Business is Dying
shpigford
187
22k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
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.ʑ͍ͯ͠·͢ɻ ͦΜͳαʔϏεͱҰॹʹ͍ͨ͠ෛ͚ͣݏ͍ ͳΤϯδχΞΛืू͍ͯ͠·͢ʂ