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
630
SHOWROOMの"最近"の負荷対策
otto0913
1
11k
SHOWROOMの泥臭い負荷対策
otto0913
1
2.2k
Other Decks in Programming
See All in Programming
仕様駆動開発の消費期限
watany
20
8.8k
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
670
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
140
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
130
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
130
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
730
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
340
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
210
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.9k
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
540
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
1.1k
Google Apps Script で Ruby を動かす
kawahara
0
280
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.4k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
470
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
490
The Pragmatic Product Professional
lauravandoore
37
7.4k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
440
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
WCS-LA-2024
lcolladotor
0
800
Music & Morning Musume
bryan
47
7.3k
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.ʑ͍ͯ͠·͢ɻ ͦΜͳαʔϏεͱҰॹʹ͍ͨ͠ෛ͚ͣݏ͍ ͳΤϯδχΞΛืू͍ͯ͠·͢ʂ