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
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
120
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
910
暗号通貨の鍵を安全に管理するアーキテクチャを作ってみようとしている話
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
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
3
280
生成AIを活用したソフトウェア開発ライフサイクル変革の現在値
hiroyukimori
PRO
0
140
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
360
Gemini for developers
meteatamel
0
120
NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを OSC駆動の7日間で作った話 / OSC2026Osaka
tsutsui
1
120
朝日新聞のデジタル版を支えるGoバックエンド ー価値ある情報をいち早く確実にお届けするために
junkiishida
1
250
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1.1k
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
2
170
今更考える「単一責任原則」 / Thinking about the Single Responsibility Principle
tooppoo
2
930
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
180
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
190
Ruby x Terminal
a_matsuda
3
190
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
350
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
240
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
81
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
460
Mind Mapping
helmedeiros
PRO
1
100
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
370
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
210
Raft: Consensus for Rubyists
vanstee
141
7.3k
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