Slide 1

Slide 1 text

ՄೳͳݶΓRDB೴ͷ·· Cloud FireStoreΛ ࢖ͬͯΈΔ 2019/06/01 Gunma.web #35 ؔޱ ࢘

Slide 2

Slide 2 text

໊લ: ؔޱ࢘ SNS: GitHub: TsukasaGR Twitter: TsukasaGr NewsPicks: ؔޱ࢘ ࠲ӈͷ໏ ࣗ෼ͷͨΊʹɺଞਓʹਚ͘͢ ࢓ࣄ: αϥϦʔϚϯ: SIerͰ৽نࣄۀ(toC޲͚ͷWebαʔϏε)։ൃ ϑϦʔϥϯε: ελʔτΞοϓͷWebΤϯδχΞ ࠷ۙ৮ͬͯΔ΋ͷ: PHP(Laravel)ɺJavascript/Typescript(Vue.js/Nuxt.js)ɺGraphQLɺDockerɺAWSɺFirebase ࣗݾ঺հ

Slide 3

Slide 3 text

What is Cloud Firestore? • Firebase͕ఏڙ͍ͯ͠ΔΫϥ΢υσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵ଎Ͱ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱ͸উख͕͍ͣͿΜҧ͏

Slide 4

Slide 4 text

• Firebase͕ఏڙ͍ͯ͠ΔΫϥ΢υσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵ଎Ͱ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱ͸উख͕͍ͣͿΜҧ͏

Slide 5

Slide 5 text

ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛ࢖ͬͨ 8FC"QQ 41"

Slide 6

Slide 6 text

ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛ࢖ͬͨ 8FC"QQ 41" App Server͕ෆཁʂ

Slide 7

Slide 7 text

αʔόʔ؅ཧ͕ෆཁ • AppServerΛ༻ҙ͠ͳͯ͘ྑ͍ • όοΫΤϯυͷॲཧΛҰ੾ॻ͔ͣʹϑϩϯτΤϯ υͷΈͰ׬݁ग़དྷΔ

Slide 8

Slide 8 text

• Firebase͕ఏڙ͍ͯ͠ΔΫϥ΢υσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵ଎Ͱ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱ͸উख͕͍ͣͿΜҧ͏

Slide 9

Slide 9 text

αʔόʔ؅ཧ͕ෆཁ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛ࢖ͬͨ 8FC"QQ 41"

Slide 10

Slide 10 text

αʔόʔ؅ཧ͕ෆཁ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛ࢖ͬͨ 8FC"QQ 41" DB Server͕ෆཁʂ

Slide 11

Slide 11 text

αʔόʔ؅ཧ͕ෆཁ • DBServerΛ༻ҙ͠ͳͯ͘ྑ͍ • Φʔτεέʔϧͯ͘͠ΕΔͷͰߴෛՙʹΑΔμ΢ ϯΛؾʹ͠ͳͯ͘ྑ͍

Slide 12

Slide 12 text

• Firebase͕ఏڙ͍ͯ͠ΔΫϥ΢υσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵ଎Ͱ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱ͸উख͕͍ͣͿΜҧ͏

Slide 13

Slide 13 text

ϦΞϧλΠϜಉظָ͕ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛ࢖ͬͨ 8FC"QQ 41"

Slide 14

Slide 14 text

ϦΞϧλΠϜಉظָ͕ Ұൠతͳ8FC"QQ 41" $MPVE'JSFTUPSFΛ࢖ͬͨ 8FC"QQ 41" ࢓૊ΈԽָ͕ʂ

Slide 15

Slide 15 text

ϦΞϧλΠϜಉظָ͕ • Web Socket ServerΛ༻ҙ͠ͳͯ͘ྑ͍ • ߏஙίετθϩ

Slide 16

Slide 16 text

• Firebase͕ఏڙ͍ͯ͠ΔΫϥ΢υσʔλϕʔε • ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ • Φʔτεέʔϧͯ͘͠ΕΔ • ϦΞϧλΠϜಉظ͕ඵ଎Ͱ࣮ݱग़དྷΔ • NoSQLͳͷͰRDBͱ͸উख͕͍ͣͿΜҧ͏

Slide 17

Slide 17 text

RDBͱ͸উख͕͍ͣͿΜҧ͏ Ұൠతͳ42- $MPVE'JSFTUPSFΛ࢖ͬͨ ΫΤϦ

Slide 18

Slide 18 text

RDBͱ͸উख͕͍ͣͿΜҧ͏ Ұൠతͳ42- $MPVE'JSFTUPSFΛ࢖ͬͨ ΫΤϦ ϦϨʔγϣϯઌͷ৚݅Ͱ΋ ͍͘ΒͰ΋ࢦఆग़དྷΔ ϦϨʔγϣϯઌͷ৚͕͔݅ͳΓݶఆతͰɺ ͦ΋ͦ΋ϦϨʔγϣϯ͢Δͷ΋ͪΐ͍໘౗

Slide 19

Slide 19 text

ͬ͘͟ΓRDB NoSQL 3%# 'JSFTUPSF /P42- • ݫີ͞ʹΑΔ҆৺ײ • ͔Ώ͍ͱ͜Ζʹख͕ಧ͘ • େن໛σʔλʹ଱͑͏Δͷ͕ͭΒ ͨΜ • ܰշ͞ɺॊೈ͞ʹΑΔߴ଎ύϑΥʔ Ϛϯε • γϯϓϧ͕ނʹ͔Ώ͍ͱ͜Ζ͸ࣗ෼ ͰؤுΔ

Slide 20

Slide 20 text

ͬ͘͟ΓRDB NoSQL 3%# 'JSFTUPSF /P42- • ݫີ͞ʹΑΔ҆৺ײ • ͔Ώ͍ͱ͜Ζʹख͕ಧ͘ • େن໛σʔλʹ଱͑͏Δͷ͕ͭΒ ͨΜ • ܰշ͞ɺॊೈ͞ʹΑΔߴ଎ύϑΥʔ Ϛϯε • γϯϓϧ͕ނʹ͔Ώ͍ͱ͜Ζ͸ࣗ෼ ͰؤுΔ ޻෉͕ඞཁ

Slide 21

Slide 21 text

޻෉1: σʔλͷ৑௕Խ 3%# 'JSFTUPSF /P42-

Slide 22

Slide 22 text

޻෉1: σʔλͷ৑௕Խ 3%# 'JSFTUPSF /P42- ͋͑ͯඇਖ਼نԽͯ͠ ࣋ͨͤΔ

Slide 23

Slide 23 text

޻෉2: Client Side Join 3%# 'JSFTUPSF /P42-

Slide 24

Slide 24 text

޻෉2: Client Side Join 3%# 'JSFTUPSF /P42- ݩσʔλऔಘޙɺϦϨʔγϣϯઌͷσʔλΛऔಘ

Slide 25

Slide 25 text

Client Side Join͢Ε͹RDB೴ͷ··Ͱ΋ͦΕͳΓʹ࢖͑Δ • σʔλΛ৑௕Խͤ͞Δͷ͸RDB೴͔Β͢Δͱ࠷ॳ͸ڋ ൱൓Ԡ͕ग़ͯ͠·͏ • Client Side JoinͳΒDBΛਖ਼نԽͨ͠··Ͱߦ͚Δ • (ݺͼग़͢ଆ͸N+1໰୊Λঝ஌ͷ͏͑ͰΰϦΰϦ΍Δඞཁ͸͋Δ͕)

Slide 26

Slide 26 text

ͦΕͰ΋΍ͬͺΓਏΈ͸͋Δ • ࢖͑Δൺֱԋࢉࢠ͸ <, <=, ==, >, >= ͷΈ • OR͕࢖͑ͳ͍ • In۟΋࢖͑ͳ͍ • Like΋࢖͑ͳ͍

Slide 27

Slide 27 text

ෳࡶͳݕࡧΛ͍ͨ͠৔߹ Ҿ༻ɿhttps://firebase.google.com/docs/firestore/solutions/search

Slide 28

Slide 28 text

ෳࡶͳݕࡧΛ͍ͨ͠৔߹ Ҿ༻ɿhttps://firebase.google.com/docs/firestore/solutions/search ෳࡶͳ৚݅ΛFirestoreͰ΍Γ͘Γ͢Δͷ͸ݱ࣮తͰ͸ͳ͍

Slide 29

Slide 29 text

ෳࡶͳݕࡧΛ͍ͨ͠৔߹ Ҿ༻ɿhttps://firebase.google.com/docs/firestore/solutions/search ෳࡶͳ৚݅ΛFirestoreͰ΍Γ͘Γ͢Δͷ͸ݱ࣮తͰ͸ͳ͍ શจݕࡧΛ࢖͏

Slide 30

Slide 30 text

શจݕࡧαʔϏεΛ࢖͏ Firestoreొ࿥࣌ʹAlgoliaʹ΋σʔλΛొ࿥͓͚ͯ͠͹ɺ

Slide 31

Slide 31 text

શจݕࡧαʔϏεΛ࢖͏ Firestoreొ࿥࣌ʹAlgoliaʹ΋σʔλΛొ࿥͓͚ͯ͠͹ɺ ॊೈɺ͔ͭߴ଎ʹσʔλऔಘग़དྷΔ

Slide 32

Slide 32 text

શจݕࡧαʔϏεΛ࢖͏ Firestoreొ࿥࣌ʹAlgoliaʹ΋σʔλΛొ࿥͓͚ͯ͠͹ɺ ॊೈɺ͔ͭߴ଎ʹσʔλऔಘग़དྷΔ શจݕࡧ × Client Side Join = DBΛਖ਼نԽͨ͠··FirestoreΛ࢖͑Δʂ

Slide 33

Slide 33 text

ͨͩ͠ɺ༻๏༻ྔΛकͬͯਖ਼͘͠࢖ͬͨ΄͏͕ྑ͍ • ͦ΋ͦ΋RDBͱNoSQLͰ͸໨త͕ҧ͏ͷͰ࢖͏৔໘ ͕ҟͳΔ • ͲͪΒ͔͚ͩͰͳ͘ɺ྆ํΛ৔ॴʹΑͬͯ࢖͍෼ ͚Δͷ͕εϚʔτ(ͱࢥΘΕΔ)

Slide 34

Slide 34 text

Ͱ͸ɺͳͥ͜ͷLTΛͨ͠ͷ͔ • ʮͱΓ͋͑ͣࠔͬͨΒϩΩιχϯʯతͳײ͡Ͱ༻๏༻ ྔΛଟগແࢹͯ͠Ͱ΋ָʹͳΓ͍͕ͨ࣌͋Δ͸ͣ

Slide 35

Slide 35 text

ϩΩιχϯͷ࢖͍࣌ • SPA(※) • DBαʔόʔΛ؅ཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ࢖͍͍ͨ (※)AlgoliaΛར༻͢Δ৔߹͸όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctions౳Λ࢖͏͜ͱͰAppServerෆཁʹͳΔ

Slide 36

Slide 36 text

ϩΩιχϯͷ࢖͍࣌ • SPA • DBαʔόʔΛ؅ཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ࢖͍͍ͨ DBΞΫηεҎ֎ ͸ϑϩϯτͷΈ Ͱ׬݁͢Δ (※)AlgoliaΛར༻͢Δ৔߹͸όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctions౳Λ࢖͏͜ͱͰAppServerෆཁʹͳΔ

Slide 37

Slide 37 text

ϩΩιχϯͷ࢖͍࣌ • SPA • DBαʔόʔΛ؅ཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ࢖͍͍ͨ εέʔϧ͢Δ͔΋͠Εͳ͍͚Ͳɺ͠ͳ͍͔ ΋͠Εͳ͍ɺͨͩϦιʔε͸ݶΒΕ͍ͯ ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ ͷ࢓૊Έ΍৑௕ԽͳΜͯ΍ͬͯΒΕͳ͍ DBΞΫηεҎ֎ ͸ϑϩϯτͷΈ Ͱ׬݁͢Δ (※)AlgoliaΛར༻͢Δ৔߹͸όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctions౳Λ࢖͏͜ͱͰAppServerෆཁʹͳΔ

Slide 38

Slide 38 text

ϩΩιχϯͷ࢖͍࣌ • SPA • DBαʔόʔΛ؅ཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ࢖͍͍ͨ εέʔϧ͢Δ͔΋͠Εͳ͍͚Ͳɺ͠ͳ͍͔ ΋͠Εͳ͍ɺͨͩϦιʔε͸ݶΒΕ͍ͯ ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ ͷ࢓૊Έ΍৑௕ԽͳΜͯ΍ͬͯΒΕͳ͍ ௨஌όοξ΍νϟοτػೳ͚ͩαΫοͱϦΞϧλΠϜಉظ͍͚ͨ͠Ͳ WebSocketཧղ͖͠Εͯͳ͍࣌ؒ͠΋ͳ͍ DBΞΫηεҎ֎ ͸ϑϩϯτͷΈ Ͱ׬݁͢Δ (※)AlgoliaΛར༻͢Δ৔߹͸όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctions౳Λ࢖͏͜ͱͰAppServerෆཁʹͳΔ

Slide 39

Slide 39 text

ϩΩιχϯͷ࢖͍࣌ • SPA • DBαʔόʔΛ؅ཧͨ͘͠ͳ͍ • ϦΞϧλΠϜσʔλಉظΛ࢖͍͍ͨ εέʔϧ͢Δ͔΋͠Εͳ͍͚Ͳɺ͠ͳ͍͔ ΋͠Εͳ͍ɺͨͩϦιʔε͸ݶΒΕ͍ͯ ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ ͷ࢓૊Έ΍৑௕ԽͳΜͯ΍ͬͯΒΕͳ͍ ௨஌όοξ΍νϟοτػೳ͚ͩαΫοͱϦΞϧλΠϜಉظ͍͚ͨ͠Ͳ WebSocketཧղ͖͠Εͯͳ͍࣌ؒ͠΋ͳ͍ DBΛਖ਼نԽͨ͠··FirestoreΛ࢖͏೔͕͘Δ ͔΋͠Εͳ͍(͠ɺདྷͳ͍͔΋͠Εͳ͍) DBΞΫηεҎ֎ ͸ϑϩϯτͷΈ Ͱ׬݁͢Δ (※)AlgoliaΛར༻͢Δ৔߹͸όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctions౳Λ࢖͏͜ͱͰAppServerෆཁʹͳΔ

Slide 40

Slide 40 text

͍͞͝ʹ

Slide 41

Slide 41 text

• ࠓ͍ͭͬͯ͘ΔϓϩμΫτͰࢼ͍ͯ͠Δ͕ɺ·ͩྑ ͠ѱ͠Λ൑அͰ͖͍ͯͳ͍ • RDB͕࿀͘͠ͳΔ࣌͸ਖ਼௚݁ߏ͋Δ • ͦΕͰ΋ݸਓతʹ࢖͏ཧ༝͸ҎԼ • DB Serverෆཁ >>> App Serverෆཁ >>> ϦΞ ϧλΠϜσʔλಉظ • ແྉ͔Β࢝ΊΒΕΔͷͰɺͥͻօ͞Μ΋৮ͬͯΈͯ ͸͍͔͕Ͱ͠ΐ͏͔ʂ