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
40億レコード以上のSPEEDA大規模データを超高速に表示するElasticsearch活用法
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hideyuki Takeuchi
March 25, 2016
Programming
1
4.1k
40億レコード以上のSPEEDA大規模データを超高速に表示するElasticsearch活用法
Hideyuki Takeuchi
March 25, 2016
Tweet
Share
More Decks by Hideyuki Takeuchi
See All by Hideyuki Takeuchi
Ktorで認証付きMCPサーバーを作ってみる
chimerast
0
130
Exposed 応用編 〜内部実装 と 魔拡張〜
chimerast
3
2.1k
Delegatesと拡張関数・拡張プロパティその合わせ技
chimerast
0
800
Kotlin Coroutines と Ktor HTTP Client で作るスケールするタスク実行
chimerast
1
2.1k
UZABASE創業期から10年いるエンジニアから見た「BtoB SaaSのUI/UXってなんだろう?」
chimerast
1
920
暗号通貨の鍵を安全に管理するアーキテクチャを作ってみようとしている話
chimerast
0
440
WhitestormJSを触ってみた
chimerast
0
540
この素晴らしい Vue.js に祝福を!
chimerast
16
11k
RxJava + Vert.x + jOOλ で Microservice的な何かを作ってみた
chimerast
0
2.8k
Other Decks in Programming
See All in Programming
CSC307 Lecture 14
javiergs
PRO
0
450
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
2
140
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
170
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
620
エラーログのマスキングの仕組みづくりに役立ったASTの話
kumoichi
0
110
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
170
AI時代のソフトウェア開発でも「人が仕様を書く」から始めよう-医療IT現場での実践とこれから
koukimiura
0
140
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.7k
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
4
400
浮動小数の比較について
kishikawakatsumi
0
390
「やめとこ」がなくなった — 1月にZennを始めて22本書いた AI共創開発のリアル
atani14
0
360
Docコメントで始める簡単ガードレール
keisukeikeda
1
100
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
66k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.8k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
450
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Amusing Abliteration
ianozsvald
0
120
Everyday Curiosity
cassininazir
0
150
Why Our Code Smells
bkeepers
PRO
340
58k
The Invisible Side of Design
smashingmag
302
51k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
88
Transcript
40ԯϨίʔυҎ্ͷ SPEEDAେنσʔλΛ ߴʹදࣔ͢Δ Elasticsearch׆༻๏ גࣜձࣾϢʔβϕʔε ͚ͨ͏ͪɹͻͰΏ͖
None
ࣗݾհ ͚ͨ͏ͪͻͰΏ͖ @chimerast גࣜձࣾϢʔβϕʔε νʔϑςΫϊϩδετ / Πϊϕʔγϣϯ୲ࣥߦһ
ձࣾհ
ܦࡁใͰɺੈքதͷҙࢥܾఆΛࢧ͑Δ
ࣄۀྖҬ: ϏδωεͷҙࢥܾఆΛࢧ͑ΔใΠϯϑϥͷఏڙ ઃཱ݄: 20084݄1 ౦ژɺγϯΨϙʔϧɺ߳ߓɺ্ւɺεϦϥϯΧ ैۀһ: 200໊(ΞϧόΠτɺΠϯλʔϯؚΉ)
B2BαʔϏε SPEEDAاۀɾۀքͷϑΝϯμϝϯλϧ ੳʹඞཁͱͳΔ͋ΒΏΔใ͕ཏతɾ ମܥతʹཧ͞ΕͨΦϯϥΠϯใαʔϏ εʢSaaSܕσʔλϕʔεʣͰ͢ɻ B2CαʔϏε NewsPicksܦࡁใʹಛԽͨ͠χϡʔε ڞ༗αʔϏεͰ͢ɻ༑ਓؾʹͳΔۀքͷ ઐՈΛϑΥϩʔͯ͠ɺ͋ͳ͚ͨͩͷܦࡁ ࢽΛ࡞Δࣄ͕Ͱ͖·͢ɻ·ͨɺࣗͷҙݟ
Λڞ༗͢ΔݴϓϥοτϑΥʔϜͰ͋Γ ·͢ɻ ఏڙ͢Δ̎ͭͷαʔϏε
ΑΓ͍ൣғͷ Ϗδωεύʔιϯ ۚ༥ɾܦࡁͷ εϖγϟϦετ
None
اۀɾۀքੳͷใϓϥοτϑΥʔϜ શੈք330ສࣾ / 550ۀքͷσʔλ ੈք࠷େڃͷM&Aσʔλ 20096݄ϩʔϯν 600ࣾʹಋೖࡁΈ(ࠃ֎ؚΉ)
DEMO
None
ΤϯδχΞ ΞφϦετ ίϯαϧ αϙʔτ
ຊ
SPEEDAͰͷElasticsearch׆༻ࣄྫ
SPEEDA͕อ༗͢Δσʔλ (ൈਮ) • اۀσʔλ • جຊใ • ۀքॴଐใ • ࡒσʔλ
• גՁσʔλ • ηάϝϯτใ • גओใ • ؔձࣾใ • ༗Ձূ݊ใࠂॻ • IRσʔλ • ۀքσʔλ • ۀքϨϙʔτ • ڝ߹ϓϨΠϠʔใ • ౷ܭɾIRσʔλ • χϡʔε • M&Aσʔλ • ࡒσʔλ • σΟʔϧσʔλ
SPEEDAͷ·͍͠ͱ͜Ζ • ୭͕͍ͭͲͷσʔλʹΞΫηε͢Δ͔͔Βͳ͍ • ڊେͳσʔλϕʔεʹ͔͔ΘΒͣ Ωϟογϡ͕Ͱ͖ͳ͍ • ͨͩ͠Ϣʔβগͳ͍ • ͍͔ʹσʔλͷ۱ʑ·Ͱߴʹ
ΞΫηεग़དྷΔΑ͏ʹ͢Δ͔͕՝
اۀΛ୳͢
ࠓճͷ͓͠Ͱѻ͏σʔλͷൣғ • اۀσʔλ • جຊใ • ۀքॴଐใ • ࡒσʔλ •
גՁσʔλ • ηάϝϯτใ • גओใ • ؔձࣾใ • ༗Ձূ݊ใࠂॻ • IRσʔλ • ۀքσʔλ • ۀքϨϙʔτ • ڝ߹ϓϨΠϠʔใ • ౷ܭɾIRσʔλ • χϡʔε • M&Aσʔλ • ࡒσʔλ • σΟʔϧσʔλ
࣮ݱ͠ͳ͚ΕͳΒͳ͔ͬͨੈք • اۀΛ༷ʑͳ݅ͰߜΓࠐΜͰ୳͍ͨ͠ • ྫ͑ΞδΞͷاۀͷத͔Β ຊϕʔεͰ 1000ԯԁҎ্ͷ࣌Ձ૯ֹ͔ͭ 1000ԯԁҎ্ͷച্ߴͰ اۀಛ৭ʹmotorͱ͍͏จࣈྻ͕ೖ͍ͬͯΔاۀΛ ୳͍ͨ͠
ڊେͳࡒσʔλ in MySQL • اۀID × צఆՊID × ظؒID →
ࡒσʔλ • 330ສاۀ × 2ສՊ × 60 (௨ظɺظɺ࢛ظ) • 6ԯϨίʔυ • ݱ௨՟ϕʔεͰ • ओཁ6௨՟ʹมͯ࣋͠ͱ͏ͱ͢Δͱ40ԯϨίʔυ
ੈքͷࠔ͞ in MySQL • ΠϯσοΫεʁҰମ͍ͭ͘Ͳ͏షΕ͍͍ͷʁ • LIKEݕࡧʁ͍ʂ • ௨՟มʁͳʹͦΕʁݩσʔλݱ௨՟
ੈքͷ่յ • ͦΕͰ10ສࣾ × 100Պ͙Β͍·Ͱ͍ͳ͕Β MySQL+ΞϓϦଆͷॲཧͰؤு͍ͬͯͨ • ऩاۀ͕10ສࣾΛ͑ͨลΓ͔Β ݕࡧ&μϯϩʔυ͕5Λ͑ͯ Ͳ͏͠Α͏ͳ͍ײ͡ʹ
ੈքΛ࣮ݱ͢Δࢼߦࡨޡͷதͷޫ໌ • σʔλΣΞϋεɺKVSΫϥελͳͲ৭ʑࢼ͍ͯͨ͠
ੈքΛ࣮ݱ͢Δࢼߦࡨޡͷதͷޫ໌ • σʔλΣΞϋεɺKVSΫϥελͳͲ৭ʑࢼ͍ͯͨ͠ • ͦΜͳதɺؾ·͙ΕʹElasticsearchษڧձʹग़ͯΈͨ
ੈքΛ࣮ݱ͢Δࢼߦࡨޡͷதͷޫ໌ • σʔλΣΞϋεɺKVSΫϥελͳͲ৭ʑࢼ͍ͯͨ͠ • ͦΜͳதɺؾ·͙ΕʹElasticsearchษڧձʹग़ͯΈͨ • ෆಈ࢈ݕࡧαΠτ͕ElasticsearchͬͯΔΑʂ
ੈքΛ࣮ݱ͢Δࢼߦࡨޡͷதͷޫ໌ • σʔλΣΞϋεɺKVSΫϥελͳͲ৭ʑࢼ͍ͯͨ͠ • ͦΜͳதɺؾ·͙ΕʹElasticsearchษڧձʹग़ͯΈͨ • ෆಈ࢈ݕࡧαΠτ͕ElasticsearchͬͯΔΑʂ • اۀΛ୳͢ػೳͬͯෆಈ࢈Λ୳͢ͷͱಉ͡ͳͷͰʂʁ •
ͩ͜ΘΓ݅ࢦఆͱ͔ฏถࢦఆͱ͔
Elasticsearch
ElasticsearchͬͯԿʁ • શจݕࡧΤϯδϯ • ͱ͍͍ͭͭूܭಘҙͰϩάղੳͰΑ͘ΘΕΔ • ϕʔεʹLuceneΛ༻ • ΫϥελߏΛͱͯ؆୯ʹΉ͜ͱ͕Ͱ͖Δ •
ϊʔυͷՃআ͕ΦϯϥΠϯͰ؆୯ʹ
ElasticsearchΛͲ͏ͱΒ͑Δ͔ʁ • SPEEDAͰɺ • ߴͰڊେͳBitSetԋࢉஔͱͯ͠ͱΒ͍͑ͯΔ • ݴ͍͑ΔͱBitmap Indexͷѻ͍͕ಘҙͳγεςϜ
Bitmap Index (Scan) • จࣈྻσʔλͷ߹ Term୯ҐͰBitSetΛ ͋Β͔͡Ίܭࢉ • σʔλͷ߹ ݅ͷBitSet͕ੜ
݅ A ݅ B ݅ C ݅ D ݁ Ռ Doc1 0 1 1 1 0 Doc2 1 1 1 1 1 Doc3 0 1 0 0 0 Doc4 0 0 0 0 0 Doc5 1 0 0 0 0 Doc6 1 1 1 1 1 Doc7 0 0 0 1 0 Doc8 0 1 1 0 0 Doc9 0 0 0 0 0 Doc10 0 0 1 1 0 : : : : : : Doc2ͱ Doc6͕ ώοτ
σʔλͷ࣋ͪํ in Elasticsearch • 1اۀ=1υΩϡϝϯτͱͯ࣋ͭ͠ (=330ສυΩϡϝϯτ) • 1υΩϡϝϯτͷதʹશͯͷඞཁͳاۀใΛ࣋ͭ • ࡒσʔλશͯల։͢Δ
• ࡒσʔλΛԣ࣋ͪ • ҝସओཁ௨՟Λมͨ͠ͷΛ࣋ͭ (ܭ40ԯ)
σʔλΛ࣋ͬͯΈͨ݁Ռ • 1υΩϡϝϯτ࠷େͰ40MB͑ (JSONϕʔε) • 11ສϑΟʔϧυ (=ΧϥϜ) • ͦΕͰͳ͘ಈ͘ʂʂ •
צఆՊ × ओཁ௨՟ + ͦͷଞͷاۀใ
Ϛοϐϯάͷҋ • ԆʑͱצఆՊͷ ϑΟʔϧυ͕ଓ͘
࠷৽ͷຊ൪Πϯϑϥߏ • 10ͷཧαʔόͷ20ͷԾϚγϯͰ ΫϥελΛߏ • ཧϚγϯ1͋ͨΓCPU16ίΞɺ ϝϞϦ128GBɺSSD RAID • 30γϟʔυ
• 2ϨϓϦΧ
ग़དྷΔΑ͏ʹͳͬͨ͜ͱ • ݩʑ࡞Γ͔ͨͬͨੈքΛ࡞Εͨ • اۀΛ༷ʑͳ݅Λݩʹݕࡧ͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹ
DEMO
None
͞Βʹग़དྷΔΑ͏ʹͳͬͨ͜ͱ • λʔήοτϦετ • ͋Β͔͡ΊϓϦηοτ͞Εͨ݅Λݩʹ ͓٬༷ʹձࣾͷϦετΛಧ͚Δ • ͞Βʹ͔ͦ͜ΒߜΓࠐΊΔ • ϢʔβࣗͰෳࡶͳ݅Λࢦఆͯ͘͠Α͍
DEMO
None
ࠓճಘͨݟ(·ͱΊ) • Elasticsearchσʔλʹରͯ͠ͷݕࡧे͍ • ϑΟʔϧυ͍͘Β૿͑ͯͨͿΜେৎ • ιϑτΣΞ্ͷϦϛοτແ͍Β͍͠ • ࣝͷ෯Λ͛ΔͨΊʹ͍ΖΜͳษڧձʹͰͯΈΔ
ΤϯδχΞืू
None