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
可能な限りRDB脳のままCloud_Firestoreを使ってみる.pdf
Search
TsukasaSekiguchi
June 01, 2019
Technology
0
650
可能な限りRDB脳のままCloud_Firestoreを使ってみる.pdf
https://gunmaweb.connpass.com/event/127593/
のLTスライドです!
TsukasaSekiguchi
June 01, 2019
Tweet
Share
More Decks by TsukasaSekiguchi
See All by TsukasaSekiguchi
v0とCursorで爆速開発🚀
tsukasagr
0
160
Prismaを1年くらい使ってみたのでちょっと語る
tsukasagr
0
170
playwrightのVSCode拡張が便利すぎて、もはやE2E書けないとか言い訳できないレベルだった
tsukasagr
0
180
AWS_Copilotではじめる簡単コンテナ運用.pdf
tsukasagr
0
360
SupabaseにBaaS拡大の未来を感じた
tsukasagr
0
240
超ざっくりFirebase vs Amplify
tsukasagr
0
300
NestJSがいい感じだった
tsukasagr
0
300
Slack Apps × BoltでToDoアプリ作ってみたって話のはずだったけど、周辺技術で良さそうなやつがあったのでそのへんも共有する話
tsukasagr
0
440
俺のMac
tsukasagr
0
310
Other Decks in Technology
See All in Technology
リクルートのエンジニア組織を下支えする 新卒の育成の仕組み
recruitengineers
PRO
2
210
AI-Driven-Development-20250310
yuhattor
3
320
きのこカンファレンス_ランチスポンサーセッション
kabaya
1
300
開発者のための FinOps/FinOps for Engineers
oracle4engineer
PRO
2
290
AI自体のOps 〜LLMアプリの運用、AWSサービスとOSSの使い分け〜
minorun365
PRO
10
1.3k
開発組織を進化させる!AWSで実践するチームトポロジー
iwamot
2
620
DevinでAI AWSエンジニア製造計画 序章 〜CDKを添えて〜/devin-load-to-aws-engineer
tomoki10
0
260
入門 PEAK Threat Hunting @SECCON
odorusatoshi
0
190
AWSアカウントのセキュリティ自動化、どこまで進める? 最適な設計と実践ポイント
yuobayashi
7
2k
OCI IAM Identity Domains Entra IDとの認証連携設定手順 / Identity Domain Federation settings with Entra ID
oracle4engineer
PRO
1
1.3k
Linuxのブートプロセス
sat
PRO
6
100
結果的にこうなった。から見える メカニズムのようなもの。
recruitengineers
PRO
1
130
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Typedesign – Prime Four
hannesfritz
41
2.5k
Six Lessons from altMBA
skipperchong
27
3.6k
Code Review Best Practice
trishagee
67
18k
KATA
mclloyd
29
14k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Transcript
ՄೳͳݶΓRDBͷ·· Cloud FireStoreΛ ͬͯΈΔ 2019/06/01 Gunma.web #35 ؔޱ ࢘
໊લ: ؔޱ࢘ SNS: GitHub: TsukasaGR Twitter: TsukasaGr NewsPicks: ؔޱ࢘ ࠲ӈͷ
ࣗͷͨΊʹɺଞਓʹਚ͘͢ ࣄ: αϥϦʔϚϯ: SIerͰ৽نࣄۀ(toC͚ͷWebαʔϏε)։ൃ ϑϦʔϥϯε: ελʔτΞοϓͷWebΤϯδχΞ ࠷ۙ৮ͬͯΔͷ: PHP(Laravel)ɺJavascript/Typescript(Vue.js/Nuxt.js)ɺGraphQLɺDockerɺAWSɺFirebase ࣗݾհ
What is Cloud Firestore? • Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ
• ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
• Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41"
ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41" App Server͕ෆཁʂ
αʔόʔཧ͕ෆཁ • AppServerΛ༻ҙ͠ͳͯ͘ྑ͍ • όοΫΤϯυͷॲཧΛҰॻ͔ͣʹϑϩϯτΤϯ υͷΈͰ݁ग़དྷΔ
• Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
αʔόʔཧ͕ෆཁ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41"
αʔόʔཧ͕ෆཁ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41" DB Server͕ෆཁʂ
αʔόʔཧ͕ෆཁ • DBServerΛ༻ҙ͠ͳͯ͘ྑ͍ • Φʔτεέʔϧͯ͘͠ΕΔͷͰߴෛՙʹΑΔμ ϯΛؾʹ͠ͳͯ͘ྑ͍
• Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
ϦΞϧλΠϜಉظָ͕ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41"
ϦΞϧλΠϜಉظָ͕ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛͬͨ 8FC"QQ 41" ΈԽָ͕ʂ
ϦΞϧλΠϜಉظָ͕ • Web Socket ServerΛ༻ҙ͠ͳͯ͘ྑ͍ • ߏஙίετθϩ
• Firebase͕ఏڙ͍ͯ͠ΔΫϥυσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵͰ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱউख͕͍ͣͿΜҧ͏
RDBͱউख͕͍ͣͿΜҧ͏ Ұൠతͳ42- $MPVE'JSFTUPSFΛͬͨ ΫΤϦ
RDBͱউख͕͍ͣͿΜҧ͏ Ұൠతͳ42- $MPVE'JSFTUPSFΛͬͨ ΫΤϦ ϦϨʔγϣϯઌͷ݅Ͱ ͍͘ΒͰࢦఆग़དྷΔ ϦϨʔγϣϯઌͷ͕͔݅ͳΓݶఆతͰɺ ͦͦϦϨʔγϣϯ͢Δͷͪΐ͍໘
ͬ͘͟ΓRDB NoSQL 3%# 'JSFTUPSF /P42- • ݫີ͞ʹΑΔ҆৺ײ • ͔Ώ͍ͱ͜Ζʹख͕ಧ͘ •
େنσʔλʹ͑͏Δͷ͕ͭΒ ͨΜ • ܰշ͞ɺॊೈ͞ʹΑΔߴύϑΥʔ Ϛϯε • γϯϓϧ͕ނʹ͔Ώ͍ͱ͜Ζࣗ ͰؤுΔ
ͬ͘͟ΓRDB NoSQL 3%# 'JSFTUPSF /P42- • ݫີ͞ʹΑΔ҆৺ײ • ͔Ώ͍ͱ͜Ζʹख͕ಧ͘ •
େنσʔλʹ͑͏Δͷ͕ͭΒ ͨΜ • ܰշ͞ɺॊೈ͞ʹΑΔߴύϑΥʔ Ϛϯε • γϯϓϧ͕ނʹ͔Ώ͍ͱ͜Ζࣗ ͰؤுΔ ͕ඞཁ
1: σʔλͷԽ 3%# 'JSFTUPSF /P42-
1: σʔλͷԽ 3%# 'JSFTUPSF /P42- ͋͑ͯඇਖ਼نԽͯ͠ ࣋ͨͤΔ
2: Client Side Join 3%# 'JSFTUPSF /P42-
2: Client Side Join 3%# 'JSFTUPSF /P42- ݩσʔλऔಘޙɺϦϨʔγϣϯઌͷσʔλΛऔಘ
Client Side Join͢ΕRDBͷ··ͰͦΕͳΓʹ͑Δ • σʔλΛԽͤ͞ΔͷRDB͔Β͢Δͱ࠷ॳڋ ൱Ԡ͕ग़ͯ͠·͏ • Client Side JoinͳΒDBΛਖ਼نԽͨ͠··Ͱߦ͚Δ
• (ݺͼग़͢ଆN+1Λঝͷ͏͑ͰΰϦΰϦΔඞཁ͋Δ͕)
ͦΕͰͬͺΓਏΈ͋Δ • ͑Δൺֱԋࢉࢠ <, <=, ==, >, >= ͷΈ •
OR͕͑ͳ͍ • In۟͑ͳ͍ • Like͑ͳ͍
ෳࡶͳݕࡧΛ͍ͨ͠߹ Ҿ༻ɿhttps://firebase.google.com/docs/firestore/solutions/search
ෳࡶͳݕࡧΛ͍ͨ͠߹ Ҿ༻ɿhttps://firebase.google.com/docs/firestore/solutions/search ෳࡶͳ݅ΛFirestoreͰΓ͘Γ͢Δͷݱ࣮తͰͳ͍
ෳࡶͳݕࡧΛ͍ͨ͠߹ Ҿ༻ɿhttps://firebase.google.com/docs/firestore/solutions/search ෳࡶͳ݅ΛFirestoreͰΓ͘Γ͢Δͷݱ࣮తͰͳ͍ શจݕࡧΛ͏
શจݕࡧαʔϏεΛ͏ Firestoreొ࣌ʹAlgoliaʹσʔλΛొ͓͚ͯ͠ɺ
શจݕࡧαʔϏεΛ͏ Firestoreొ࣌ʹAlgoliaʹσʔλΛొ͓͚ͯ͠ɺ ॊೈɺ͔ͭߴʹσʔλऔಘग़དྷΔ
શจݕࡧαʔϏεΛ͏ Firestoreొ࣌ʹAlgoliaʹσʔλΛొ͓͚ͯ͠ɺ ॊೈɺ͔ͭߴʹσʔλऔಘग़དྷΔ શจݕࡧ × Client Side Join = DBΛਖ਼نԽͨ͠··FirestoreΛ͑Δʂ
ͨͩ͠ɺ༻๏༻ྔΛकͬͯਖ਼ͬͨ͘͠΄͏͕ྑ͍ • ͦͦRDBͱNoSQLͰత͕ҧ͏ͷͰ͏໘ ͕ҟͳΔ • ͲͪΒ͔͚ͩͰͳ͘ɺ྆ํΛॴʹΑ͍ͬͯ ͚Δͷ͕εϚʔτ(ͱࢥΘΕΔ)
Ͱɺͳͥ͜ͷLTΛͨ͠ͷ͔ • ʮͱΓ͋͑ͣࠔͬͨΒϩΩιχϯʯతͳײ͡Ͱ༻๏༻ ྔΛଟগແࢹͯ͠ͰָʹͳΓ͍͕ͨ࣌͋Δͣ
ϩΩιχϯͷ͍࣌ • SPA(※) • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ (※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
ϩΩιχϯͷ͍࣌ • SPA • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ DBΞΫηεҎ֎ ϑϩϯτͷΈ Ͱ݁͢Δ
(※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
ϩΩιχϯͷ͍࣌ • SPA • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ εέʔϧ͢Δ͔͠Εͳ͍͚Ͳɺ͠ͳ͍͔ ͠Εͳ͍ɺͨͩϦιʔεݶΒΕ͍ͯ ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ
ͷΈԽͳΜͯͬͯΒΕͳ͍ DBΞΫηεҎ֎ ϑϩϯτͷΈ Ͱ݁͢Δ (※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
ϩΩιχϯͷ͍࣌ • SPA • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ εέʔϧ͢Δ͔͠Εͳ͍͚Ͳɺ͠ͳ͍͔ ͠Εͳ͍ɺͨͩϦιʔεݶΒΕ͍ͯ ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ
ͷΈԽͳΜͯͬͯΒΕͳ͍ ௨όοξνϟοτػೳ͚ͩαΫοͱϦΞϧλΠϜಉظ͍͚ͨ͠Ͳ WebSocketཧղ͖͠Εͯͳ͍࣌ؒ͠ͳ͍ DBΞΫηεҎ֎ ϑϩϯτͷΈ Ͱ݁͢Δ (※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
ϩΩιχϯͷ͍࣌ • SPA • DBαʔόʔΛཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ͍͍ͨ εέʔϧ͢Δ͔͠Εͳ͍͚Ͳɺ͠ͳ͍͔ ͠Εͳ͍ɺͨͩϦιʔεݶΒΕ͍ͯ ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ
ͷΈԽͳΜͯͬͯΒΕͳ͍ ௨όοξνϟοτػೳ͚ͩαΫοͱϦΞϧλΠϜಉظ͍͚ͨ͠Ͳ WebSocketཧղ͖͠Εͯͳ͍࣌ؒ͠ͳ͍ DBΛਖ਼نԽͨ͠··FirestoreΛ͏͕͘Δ ͔͠Εͳ͍(͠ɺདྷͳ͍͔͠Εͳ͍) DBΞΫηεҎ֎ ϑϩϯτͷΈ Ͱ݁͢Δ (※)AlgoliaΛར༻͢Δ߹όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctionsΛ͏͜ͱͰAppServerෆཁʹͳΔ
͍͞͝ʹ
• ࠓ͍ͭͬͯ͘ΔϓϩμΫτͰࢼ͍ͯ͠Δ͕ɺ·ͩྑ ͠ѱ͠ΛஅͰ͖͍ͯͳ͍ • RDB͕࿀͘͠ͳΔ࣌ਖ਼݁ߏ͋Δ • ͦΕͰݸਓతʹ͏ཧ༝ҎԼ • DB Serverෆཁ
>>> App Serverෆཁ >>> ϦΞ ϧλΠϜσʔλಉظ • ແྉ͔Β࢝ΊΒΕΔͷͰɺͥͻօ͞Μ৮ͬͯΈͯ ͍͔͕Ͱ͠ΐ͏͔ʂ