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
Hideyuki Takeuchi
March 25, 2016
Programming
4.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
40億レコード以上のSPEEDA大規模データを超高速に表示するElasticsearch活用法
Hideyuki Takeuchi
March 25, 2016
More Decks by Hideyuki Takeuchi
See All by Hideyuki Takeuchi
Ktorで認証付きMCPサーバーを作ってみる
chimerast
0
190
Exposed 応用編 〜内部実装 と 魔拡張〜
chimerast
3
2.2k
Delegatesと拡張関数・拡張プロパティその合わせ技
chimerast
0
810
Kotlin Coroutines と Ktor HTTP Client で作るスケールするタスク実行
chimerast
1
2.1k
UZABASE創業期から10年いるエンジニアから見た「BtoB SaaSのUI/UXってなんだろう?」
chimerast
1
950
暗号通貨の鍵を安全に管理するアーキテクチャを作ってみようとしている話
chimerast
0
460
WhitestormJSを触ってみた
chimerast
0
550
この素晴らしい Vue.js に祝福を!
chimerast
16
11k
RxJava + Vert.x + jOOλ で Microservice的な何かを作ってみた
chimerast
0
2.9k
Other Decks in Programming
See All in Programming
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
150
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
200
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
460
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
140
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.3k
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
140
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
340
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
350
自作OSでスライド発表する
uyuki234
1
3.8k
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
act1-costs.pdf
sumedhbala
0
210
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
310
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.6k
Done Done
chrislema
186
16k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
The Spectacular Lies of Maps
axbom
PRO
1
850
Writing Fast Ruby
sferik
630
63k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Leo the Paperboy
mayatellez
8
1.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
340
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
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