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
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
22
11k
さようなら Date。 ようこそTemporal! 3年間先行利用して得られた知見の共有
8beeeaaat
3
1.4k
為你自己學 Python - 冷知識篇
eddie
1
350
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
440
1から理解するWeb Push
dora1998
7
1.8k
Vue・React マルチプロダクト開発を支える Vite
andpad
0
110
アセットのコンパイルについて
ojun9
0
120
RDoc meets YARD
okuramasafumi
4
170
Kiroの仕様駆動開発から見えてきたAIコーディングとの正しい付き合い方
clshinji
1
210
Design Foundational Data Engineering Observability
sucitw
3
190
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
120
testingを眺める
matumoto
1
140
Featured
See All Featured
Being A Developer After 40
akosma
90
590k
Done Done
chrislema
185
16k
Code Review Best Practice
trishagee
70
19k
4 Signs Your Business is Dying
shpigford
184
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Faster Mobile Websites
deanohume
309
31k
Side Projects
sachag
455
43k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
GitHub's CSS Performance
jonrohan
1032
460k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
Embracing the Ebb and Flow
colly
87
4.8k
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.ʑ͍ͯ͠·͢ɻ ͦΜͳαʔϏεͱҰॹʹ͍ͨ͠ෛ͚ͣݏ͍ ͳΤϯδχΞΛืू͍ͯ͠·͢ʂ