AWS DMSを利用した今風DBリファクタリング/jawsug_okayama_2019

AWS DMSを利用した今風DBリファクタリング/jawsug_okayama_2019

# 概要

2019年08月17日に開催される JAWS-UG Okayama 2019 の発表スライドです。

https://jaws-ug-okayama.doorkeeper.jp/events/91487

株式会社オミカレ ( https://party-calendar.net/ ) で取り組んでいる DB・Webリファクタリングの手法についてご紹介させて頂きました。

F891bc57aad1b6bdbf344358e7fec3cc?s=128

Takahashi Ikki

August 11, 2019
Tweet

Transcript

  1. 2.

    ͓͠ͳ͕͖ 1. ࣗݾ঺հ 2. DBϦϑΝΫλϦϯάΛ΍Δཧ༝ 3.    

      ͱ͸ 4. DMSΛ࢖ͬͨϦϑΝΫλϦϯάख๏ 5. ·ͱΊ 2
  2. 4.

    1. ࣗݾ঺հ • ߴڮ Ұٍ • Ԭࢁࡏॅ • גࣜձࣾΦϛΧϨ WebΤϯδχΞ

    • ೔ຊPostgreSQLϢʔβʔձ தࠃࢧ෦௕ • PostgreSQLྺ 1೥ 4
  3. 6.

    6

  4. 12.

    ΦϛΧϨʹ͍ͭͯ • αʔϏε։͔࢝Β໿̓೥͕ܦա͍ͯ͠Δɻ • ͜͜൒೥ఔͰ ։ൃਓһ͕ࣾһ1໊ + ֎஫ ͷମ੍͔Β ࣾһ6໊

    ͷମ੍ʹมֵɻ • ৭Μͳେਓͷࣄ৘͔ΒͦΕͳΓʹ͍ΘΏΔٕज़తෛ࠴ͱݺ͹ ΕΔ΋ͷ͕͋Δɻ 12
  5. 17.

    gender ΧϥϜ ૝ఆ ࣮ࡍ ܕ int ೖΔσʔλ 0, 1, 2

    σʔλͷҙຯ 0: ະఆٛ, 1: உੑ, 2: ঁੑ 17
  6. 18.

    gender ΧϥϜ ૝ఆ ࣮ࡍ ܕ int varchar ೖΔσʔλ 0, 1,

    2 0, 1, 2, உੑ, ঁੑ σʔλͷҙຯ 0: ະఆٛ, 1: உੑ, 2: ঁੑ 0: ະఆٛ, 1: உੑ, 2: ঁੑ 18
  7. 27.

    SQLͰτϦΨʔΛॻ͔ͳ͍ͱ͍͚ͳ͍ɻ • Java ͰΞϓϦέʔγϣϯΛॻ͍ͨࣄ͋Δਓ ʁ • Python ͰΞϓϦέʔγϣϯΛॻ͍ͨࣄ͋Δਓ ʁ •

    JavaScript ͰΞϓϦέʔγϣϯΛॻ͍ͨࣄ͋Δਓ ʁ • Perl ͰΞϓϦέʔγϣϯΛॻ͍ͨࣄ͋Δਓ ʁ 27
  8. 29.

    PostgreSQLͷखଓ͖ܕݴޠ τϦΨʔͷ࣮ߦؔ਺ΛҎԼͷ֤ݴޠͰఆ͕ٛग़དྷΔɻ ໊শ ݴޠ ഑෍ํ๏ PL/pgSQL SQL جຊ഑෍ PL/Perl Perl

    جຊ഑෍ PL/Python Python جຊ഑෍ PL/Java Java ֦ு PL/v8 JavaScript ֦ு ※ ͦͷଞ 29
  9. 30.

    (ࢀߟ) PL/v8 ͷ༗ޮԽํ๏ RDS for PostgreSQLʹ͸σϑΥϧτͰ plv8͕Πϯετʔϧ͞Ε͍ͯΔͷͰɺextensionΛ༗ޮԽͯ͠΍Ε͹ok.  .+!&*$'& 

    ('*+")!* *#'- ) *!.+!&*$'&* ('*+")!* )!+! !.+!&*$'& (%,    30
  10. 36.

          ωοτϫʔΫӽ͠ʹ σʔλҠߦΛߦ͏ࣄ͕ग़དྷΔαʔϏε ಄จࣈΛऔͬͯɺͱݺ͹ΕΔɻ ※

    ੍ݶ͕͋ͬͯɺίϐʔݩɾίϐʔઌͷ ͲͪΒ͔͕AWSͷΤϯυϙΠϯτͰແ ͍ͱɺϨϓϦέʔγϣϯΛ͢Δࣄ͕ग़དྷ ͳ͍ɻ 36
  11. 37.

          ͷ͝঺հ • AWS DMS

    Ͱ࢖ΘΕΔΩʔϫʔυ • ϨϓϦέʔγϣϯΠϯελϯεʹ͍ͭͯ • λεΫͷৼΔ෣͍ʹ͍ͭͯ • λεΫͷઃఆํ๏ʹ͍ͭͯ 37
  12. 38.

    AWS DMS Ͱ࢖ΘΕΔΩʔϫʔυ • ιʔεΤϯυϙΠϯτ • σʔλͷίϐʔݩɻ  , ,

     ,  ͳͲɻ • λʔήοτΤϯυϙΠϯτ • σʔλͷίϐʔઌɻ  , ,  , ,    ͳͲɻ • ϨϓϦέʔγϣϯΠϯελϯε • ίϐʔݩ͔Βίϐʔઌ΁σʔλͷϨϓϦέʔγϣϯΛߦ͏Πϯελϯεɻ • λεΫ • ͲͷςʔϒϧΛͲͷΑ͏ʹҠߦ͢Δ͔ΛఆΊͨϧʔϧɻ 38
  13. 39.

    ϨϓϦέʔγϣϯΠϯελϯεʹ͍ͭͯ • ΠϯελϯεΫϥε͸ T2, C4, R4ͷ̏छྨΛαϙʔτ. • T2: ։ൃɾݕূ༻ •

    C4: େྔͷԋࢉΛߦ͏৔߹ʹ໾ཱͭɻ (AWSతʹ͸ ҟछDBҠߦ͸͜ΕΛ͢͢Ί͍ͯΔ) • R4: ϝϞϦ૿ՃΠϯελϯεɻ (ҰճͷτϥϯβΫγϣϯ͕େ͖͍࣌͸͜Ε.) • ϚϧνAZʹରԠ͍ͯͯ͠ɺϑΣΠϧΦʔόʔΛαϙʔτ. • ࣮ࡍɺDMSͱ͓͕͔͔ͯۚ͠Δͷ͸Πϯελϯεར༻ྉͱετϨʔδ͚ͩɻ 39
  14. 41.

    λεΫͷઃఆํ๏ʹ͍ͭͯ • ϨϓϦέʔγϣϯΛߦ͏ςʔϒϧͷࢦఆํ๏͸̎छྨ • userɿ จࣈྻҰகͰ  ςʔϒϧͷΈΛର৅ͱ͢Δɻ • user_%ɿ

    ਖ਼نදݱͰ  ςʔϒϧʹ߹க͢Δશͯͷ ςʔϒϧΛର৅ͱ͢Δɻ • ਖ਼نදݱͳͲͰෳ਺ࢦఆͨ͠৔߹͸λεΫ಺ͰฒྻͰςʔϒϧ͕ ϩʔυ͞ΕΔɻ (σϑΥϧτͰ͸8ςʔϒϧ) 41
  15. 43.
  16. 49.

    DBͷϦϑΝΫλϦϯάํ๏ • ผͷΠϯελϯεΛ༻ҙ͠ɺ AWS Database Migration ServiceΛ ࢖༻ͯ͠ϨϓϦέʔγϣϯ͢Δɻ • ϨϓϦέʔγϣϯ͞ΕͨλΠϛϯάͰ

    DBͷτϦΨʔΛൃಈͤ͞Δɻ • τϦΨʔ಺ͰچσʔλΛՃ޻͠ ϦϑΝΫλϦϯάͨ͠ςʔϒϧͷ ܗࣜʹ߹͏Α͏ʹొ࿥͢Δɻ • ࠓޙ͸NEWεΩʔϚΛࢀর͢Δɻ 49
  17. 50.

    WebͷϦϑΝΫλϦϯάํ๏ APIαʔϏε Λ৽͘͠࡞Γɺ WebଆΛAPIܦ༝ʹॻ͖׵͍͑ͯ͘ɻ ͦͷࡍʹɺWebଆͷίʔυΛ ϦϑΝΫλϦϯά͍ͯ͘͠ɻ ྫ͑͹ • ձһొ࿥/ࢀরAPI •

    ࠗ׆ύʔςΟʔΛݕࡧ͢Δػೳ • ࠗ׆ύʔςΟʔʹ༧໿͢ΔAPI ·ͨɺ͜ͷAPI͸ ΞϓϦ։ൃͷ࣌ʹಉ͡෺Λ͔ͭ͏ɻ 50
  18. 52.

    52

  19. 53.

    ͜ͷϦϑΝΫλϦϯάํ๏ͷϝϦοτ • ߋ৽API͸MySQL΁ॻࠐΛ͢ΔͷͰগͮͭ͠APIܦ༝ʹͯ͠΋ طଘαʔϏεͷςʔϒϧͷࢀরՕॴʹӨڹ͕ແ͍ɻ • ҰՕॴAPIܦ༝ʹͯ͠ΈΔ → ໰୊͕͋Ε͹ௐ੔͢Δɻˠ ... ͳͲͷΑ͏ʹ

    ΧφϦΞϦϦʔε ܗࣜͰ গͮͭ͠վળΛਐΊ͍͚ͯΔɻ • σʔλͷಡࠐ͸PostgreSQL͔Βߦ͏ͷͰ ॻࠐAPIΛݺͿଆ͸ͲͪΒʹॻ͖ࠐΜͰ͍Δ͔Λ ؾʹ͠ͳͯ͘΋ྑ͍ɻ • WebͱΞϓϦͰಉ͡APIΛ࢖͏ͷͰWebଆͰ࡞ͬͨ΋ͷΛ ΞϓϦʹ૊ΈࠐΉࡍɺΞϓϦଆͷରԠ޻਺Λ཈͑Δࣄ͕Ͱ͖Δɻ ʢ։ൃͷखΛࢭΊͳ͍ɻʣ 53
  20. 54.

    ͜ͷϦϑΝΫλϦϯάํ๏ͷσϝϦοτ • ϩʔΧϧͷ։ൃ؀ڥΛ࡞੒͢Δࣄ͕ग़དྷͳ͍ɻ ※ ࠓɺׂͱҰ൪೰·͍͠ॴɻ • DMS͕ࢭ·ͬͨ࣌ʹࢀরAPI͕ίέΔɻ ※ τϦΨʔΤϥʔ౳ͰDMS͕ࢭ·ΔͱαʔϏε͕ࢭ·Δɻ •

    DMS͕஗Ԇͨ࣌͠ͷߟྀ͕೉͍͠ɻ ※ ࠓͷॴɺக໋ই͸ͳ͍ɻ(ই͕ແ͍ͱ͸ݴͬͯͳ͍) • ίϯϑϦΫτ͢Δࣄ͕ݒ೦͞ΕΔͷͰϦʔυϨϓϦΧʹτϦΨʔΛషͬͯͳ͍ͷͰ ϦʔυϨϓϦΧ͕Ϛελʔʹঢ֨͢ΔͱαʔϏε͕ࢭ·Δɻ 54
  21. 55.

    DMSΛ࢖ͬͨϦϑΝΫλϦϯάͷख๏ ·ͱΊ • AWS DMSͰ MySQL͔ΒPostgreSQLʹ ϨϓϦέʔγϣϯ͍ͯ͠Δɻ • DMS͕Ҡߦͨ͠λΠϛϯάͰઃఆͨ͠τϦΨʔ͕ൃಈͯ͠ ϦϑΝΫλϦϯά͞ΕͨςʔϒϧʹॻࠐΛ͢Δɻ

    • ߋ৽ɾࢀরΛAPIܦ༝ʹ͢ΔࣄͰطଘͷ։ൃΛਐΊͭͭ ϦϑΝΫλϦϯάͨ͠DBʹࢀরΛ੾Γସ͍͚͍͑ͯͯΔɻ • ϩʔΧϧͷ؀ڥߏங͕೉͍͠ͷͱɺDMS͕ࢭ·ͬͨ࣌ʹ ࢀরAPI͕ίέΔͷͰߟྀ͕೉͍͠ɻ 55