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
4k
40億レコード以上のSPEEDA大規模データを超高速に表示するElasticsearch活用法
Hideyuki Takeuchi
March 25, 2016
Tweet
Share
More Decks by Hideyuki Takeuchi
See All by Hideyuki Takeuchi
Exposed 応用編 〜内部実装 と 魔拡張〜
chimerast
3
1.9k
Delegatesと拡張関数・拡張プロパティその合わせ技
chimerast
0
740
Kotlin Coroutines と Ktor HTTP Client で作るスケールするタスク実行
chimerast
1
1.9k
UZABASE創業期から10年いるエンジニアから見た「BtoB SaaSのUI/UXってなんだろう?」
chimerast
1
840
暗号通貨の鍵を安全に管理するアーキテクチャを作ってみようとしている話
chimerast
0
410
WhitestormJSを触ってみた
chimerast
0
520
この素晴らしい Vue.js に祝福を!
chimerast
16
11k
RxJava + Vert.x + jOOλ で Microservice的な何かを作ってみた
chimerast
0
2.7k
もっとデータ可視化をカジュアルに!OSSプロジェクト「E2D3」
chimerast
1
2.8k
Other Decks in Programming
See All in Programming
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
4
910
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
850
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
330
WindowInsetsだってテストしたい
ryunen344
1
190
Go1.25からのGOMAXPROCS
kuro_kurorrr
1
800
生成AIで日々のエラー調査を進めたい
yuyaabo
0
640
VS Code Update for GitHub Copilot
74th
1
300
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.3k
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
1.2k
Cline指示通りに動かない? AI小説エージェントで学ぶ指示書の書き方と自動アップデートの仕組み
kamomeashizawa
1
570
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
290
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
130
Featured
See All Featured
Building an army of robots
kneath
306
45k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Optimizing for Happiness
mojombo
379
70k
VelocityConf: Rendering Performance Case Studies
addyosmani
330
24k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Statistics for Hackers
jakevdp
799
220k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
790
How to Ace a Technical Interview
jacobian
277
23k
Raft: Consensus for Rubyists
vanstee
140
7k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
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