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
68
Exposed 応用編 〜内部実装 と 魔拡張〜
chimerast
3
2.1k
Delegatesと拡張関数・拡張プロパティその合わせ技
chimerast
0
790
Kotlin Coroutines と Ktor HTTP Client で作るスケールするタスク実行
chimerast
1
2k
UZABASE創業期から10年いるエンジニアから見た「BtoB SaaSのUI/UXってなんだろう?」
chimerast
1
900
暗号通貨の鍵を安全に管理するアーキテクチャを作ってみようとしている話
chimerast
0
440
WhitestormJSを触ってみた
chimerast
0
530
この素晴らしい Vue.js に祝福を!
chimerast
16
11k
RxJava + Vert.x + jOOλ で Microservice的な何かを作ってみた
chimerast
0
2.8k
Other Decks in Programming
See All in Programming
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
180
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
400
CSC307 Lecture 05
javiergs
PRO
0
490
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.6k
gunshi
kazupon
1
140
Oxlintはいいぞ
yug1224
5
1.1k
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
110
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
5.9k
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2k
MUSUBIXとは
nahisaho
0
100
Graviton と Nitro と私
maroon1st
0
180
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
0
980
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1k
Chasing Engaging Ingredients in Design
codingconduct
0
100
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
52
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
130
Embracing the Ebb and Flow
colly
88
5k
My Coaching Mixtape
mlcsv
0
40
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
61
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
100
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
How GitHub (no longer) Works
holman
316
140k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
58
42k
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