$30 off During Our Annual Pro Sale. View Details »

可能な限りRDB脳のままCloud_Firestoreを使ってみる.pdf

 可能な限りRDB脳のままCloud_Firestoreを使ってみる.pdf

https://gunmaweb.connpass.com/event/127593/

のLTスライドです!

TsukasaSekiguchi

June 01, 2019
Tweet

More Decks by TsukasaSekiguchi

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ
    Ұൠతͳ8FC"QQ 41"

    $MPVE'JSFTUPSFΛ࢖ͬͨ
    8FC"QQ 41"

    View Slide

  6. ϑϩϯτΤϯυ͔Βૢ࡞ग़དྷΔ
    Ұൠతͳ8FC"QQ 41"

    $MPVE'JSFTUPSFΛ࢖ͬͨ
    8FC"QQ 41"

    App Server͕ෆཁʂ

    View Slide

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

    View Slide

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

    View Slide

  9. αʔόʔ؅ཧ͕ෆཁ
    Ұൠతͳ8FC"QQ 41"

    $MPVE'JSFTUPSFΛ࢖ͬͨ
    8FC"QQ 41"

    View Slide

  10. αʔόʔ؅ཧ͕ෆཁ
    Ұൠతͳ8FC"QQ 41"

    $MPVE'JSFTUPSFΛ࢖ͬͨ
    8FC"QQ 41"

    DB Server͕ෆཁʂ

    View Slide

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

    View Slide

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

    View Slide

  13. ϦΞϧλΠϜಉظָ͕
    Ұൠతͳ8FC"QQ 41"

    $MPVE'JSFTUPSFΛ࢖ͬͨ
    8FC"QQ 41"

    View Slide

  14. ϦΞϧλΠϜಉظָ͕
    Ұൠతͳ8FC"QQ 41"

    $MPVE'JSFTUPSFΛ࢖ͬͨ
    8FC"QQ 41"

    ࢓૊ΈԽָ͕ʂ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. ͬ͘͟ΓRDB NoSQL
    3%# 'JSFTUPSF /P42-

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

    View Slide

  20. ͬ͘͟ΓRDB NoSQL
    3%# 'JSFTUPSF /P42-

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

    View Slide

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

    View Slide

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

    ͋͑ͯඇਖ਼نԽͯ͠
    ࣋ͨͤΔ

    View Slide

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

    View Slide

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

    ݩσʔλऔಘޙɺϦϨʔγϣϯઌͷσʔλΛऔಘ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  35. ϩΩιχϯͷ࢖͍࣌
    • SPA(※)

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  39. ϩΩιχϯͷ࢖͍࣌
    • SPA
    • DBαʔόʔΛ؅ཧͨ͘͠ͳ͍
    • ϦΞϧλΠϜσʔλಉظΛ࢖͍͍ͨ
    εέʔϧ͢Δ͔΋͠Εͳ͍͚Ͳɺ͠ͳ͍͔
    ΋͠Εͳ͍ɺͨͩϦιʔε͸ݶΒΕ͍ͯ
    ΔɺΈ͍ͨͳ࣌ʹ࠷ॳ͔ΒΦʔτεέʔϧ
    ͷ࢓૊Έ΍৑௕ԽͳΜͯ΍ͬͯΒΕͳ͍
    ௨஌όοξ΍νϟοτػೳ͚ͩαΫοͱϦΞϧλΠϜಉظ͍͚ͨ͠Ͳ
    WebSocketཧղ͖͠Εͯͳ͍࣌ؒ͠΋ͳ͍
    DBΛਖ਼نԽͨ͠··FirestoreΛ࢖͏೔͕͘Δ
    ͔΋͠Εͳ͍(͠ɺདྷͳ͍͔΋͠Εͳ͍)

    DBΞΫηεҎ֎
    ͸ϑϩϯτͷΈ
    Ͱ׬݁͢Δ
    (※)AlgoliaΛར༻͢Δ৔߹͸όοΫΤϯυ͕ඞཁ͕ͩɺCloudFunctions౳Λ࢖͏͜ͱͰAppServerෆཁʹͳΔ

    View Slide

  40. ͍͞͝ʹ

    View Slide

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

    View Slide