rubyhiroba

 rubyhiroba

Cd07d1d30d4edcc5d5c5fbdd21eb45af?s=128

Ryoichi SEKIGUCHI

September 21, 2014
Tweet

Transcript

  1. Rails ʹ͓͚Δ ֎෦γεςϜͱͷεϜʔζͳ ౷߹։ൃ ؔޱ྄Ұ ! ryopeko " ryopeko 3VCZ)JSPCBੜ׆ൃදձ

  2. ؔޱ ྄Ұ # ryopeko " ryopeko • ύʔϑΣΫτRuby ڞஶऀ •

    σϒαϛ2014εϐʔΧʔ • ϕετεϐʔΧʔ৆ 2Ґड৆ • ࠷ۙਓ͔ؒͨͪΒ͸ෳ਺DBͱݺ ͹Ε͍ͯΔ
  3. IUUQBENJOTCBS

  4. ֎෦γεςϜΛ࢖ͬͨ ৽ΞϓϦέʔγϣϯ։ൃ

  5. IUUQEJBSZTIVDSFBNOFUCMPHSVCZLBJHJMJHIUOJOHUBMLTIUNM lΈΜͳ΋ͬͱಠࣗݚڀͷ੒ՌΛൃද͢Δͱ͍͍ͱࢥ͏

  6. ֎෦γεςϜͱͷܨ͗͜Έ $ API % RPC  DB ௚઀ࢀর

  7. ࠓճ͸DBΛڞ༗͢Δ৔߹ͷ ख๏ʹ͍ͭͯͷ͓࿩

  8.  ' "QQ

  9.  ' "QQ  ' "QQ

  10.  ' "QQ  ' "QQ  ' "QQ

  11.  ' "QQ  ' "QQ  ' "QQ

  12. DBڞ༗ͨ͠৔߹ʹ ໰୊ʹͳͬͯ͘Δ͜ͱ

  13. ෳ਺ਓͰ։ൃ͍ͯ͠Δ৔߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT

  14. ෳ਺ਓͰ։ൃ͍ͯ͠Δ৔߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT TFMFDU

  15. ෳ਺ਓͰ։ൃ͍ͯ͠Δ৔߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT TFMFDU TFMFDU

  16. ෳ਺ਓͰ։ൃ͍ͯ͠Δ৔߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT TFMFDU EFMFUF TFMFDU

  17. ෳ਺ਓͰ։ൃ͍ͯ͠Δ৔߹ BQQMF DIFSSZ QFBDI HSBQF PSBOHF GSVJUT TFMFDU EFMFUF TFMFDU

  18. Unit Test Ͱ΋ಉ༷

  19. Unit Test ࣌ͷڞ༗DBͷࠔΓࣄ • ςετ༻ͷDB͕ڞ༗͞ΕͯΔͱ݁ՌʹӨڹ • ςετ༻ͷDB͕ଘࡏ͠ͳ͍৔߹DB΁ͷϦΫ ΤετΛϞοΫ͢Δඞཁ • ςετσʔλΛ༻ҙ͢Δͷ͕೉͘͠ͳΔ

  20. ڞ༗DBͷεΩʔϚมߋʹ ௥ै͢Δͷ͕େม

  21. ͜͜·ͰͰ σϝϦοτΛ·ͱΊΔͱ…

  22. DBڞ༗ͨ͠৔߹ͷσϝϦοτ • ෳ਺ਓͰͷ։ൃ࣌ʹσʔλෆ੔߹ͱͳΔ • Unit Test ࣌ʹڞ༗DBͷऔΓѻ͍͕൥ࡶʹͳΔ • ڞ༗DBͷεΩʔϚมߋʹ௥ै͢Δͷ͕େม

  23. ΍͸ΓखݩʹDB͕͋ͬͯ΄͍͠… (Rails ͬͯखݩʹDB࡞Γ·͢͠…)

  24. Ͱ͸खݩʹ ࣋ͬͯΈ·͠ΐ͏

  25. DBڞ༗ͨ͠৔߹ͷσϝϦοτ • ෳ਺ਓͰͷ։ൃ࣌ʹσʔλෆ੔߹ͱͳΔ • Unit Test ࣌ʹڞ༗DBͷऔΓѻ͍͕൥ࡶʹͳΔ • ڞ༗DBͷεΩʔϚมߋʹ௥ै͢Δͷ͕େม ্ͭ͸ղܾͦ͠͏ʜ

  26. खݩʹ࣋ͭ৔߹ͷ σϝϦοτʹ͍ͭͯߟ͑ͯΈΔ

  27. खݩʹDBΛ࣋ͬͨ৔߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ର৅ʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ৔߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯ

    ࢮ͵ • ݩͷDBεΩʔϚΛ஌Δज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
  28. σʔλͷ४උ͕େม

  29. σʔλͷ४උ͕େม • db:seed తͳ࢓૊ΈͰҰׅͰ༻ҙ͢Δ • ֎෦͔Βࢀর͢ΔͷΈͷDBͷ৔߹ɺσʔλύ λʔϯΛ໢ཏͰ͖Δͱ͍͏ϝϦοτ΋ • େมͳͷ͸ύλʔϯͷϝϯς •

    (Ͳ͏ͤςετͰ΋ඞཁͩ͠)
  30. खݩʹDBΛ࣋ͬͨ৔߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ର৅ʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ৔߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯࢮ

    ͵ • ݩͷDBεΩʔϚΛ஌Δज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
  31. Slave ʹߋ৽ܥΫΤϦ

  32. Slave ʹߋ৽ܥΫΤϦ • # eagletmt/switch_point Λ࢖͏͜ͱͰղܾ • Slave ʹߋ৽ܥΫΤϦΛଧͱ͏ͱ͢Δͱྫ֎ •

    ෳ਺DBΛऔΓѻ͏͜ͱʹͳΔͷͰ switch_point ͸ͱͯ΋༗ޮ • ࣗͣͱ M/S Λҙࣝ͢ΔΑ͏ͳએݴతهड़ʹͳΔ
  33. IUUQTHJUIVCDPNFBHMFUNUTXJUDI@QPJOUCMPCNBTUFSTQFDNPEFMTSC TXJUDI@QPJOUͷઃఆྫ Ұ෦ൈਮ

  34. IUUQTHJUIVCDPNFBHMFUNUTXJUDI@QPJOUCMPCNBTUFSTQFDNPEFMTSC TXJUDI@QPJOUͷઃఆྫ Ұ෦ൈਮ

  35. खݩʹDBΛ࣋ͬͨ৔߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ର৅ʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ৔߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯࢮ

    ͵ • ݩͷDBεΩʔϚΛ஌Δज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
  36. ݩͷDBͷεΩʔϚΛ஌Δज़

  37. ݩͷDBͷεΩʔϚΛ஌Δज़ • ۀ຿Ͱ࢖͍ͬͯΔεΩʔϚ͸શͯ git Ͱ؅ཧ͞Ε͍ͯΔ • ͜͜ΛݟΕ͹ৗʹ࠷৽͕͋Δͱ͍͏ঢ়ଶ • ͜ͷϦϙδτϦͷεΩʔϚ৘ใΛ࢖༻͢ΔΑ͏ʹσϓ ϩΠϓϩηεʹ૊Έࠐ·Ε͍ͯΔ

    • ฐࣾͷࣄྫʹؔΘΒͣɺmigration ֎ͷεΩʔϚ͸Ͳ͜ ͔͠ΒʹҰݩ؅ཧ͞Ε͍ͯΔ΂͖
  38. खݩʹDBΛ࣋ͬͨ৔߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ର৅ʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ৔߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯࢮ

    ͵ • ݩͷDBεΩʔϚΛ஌Δज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
  39. ݩͷDBͷεΩʔϚΛ खݩͰ؆୯ʹ࠶ݱ͢Δज़

  40. ݩͷDBͷεΩʔϚΛ؆୯ʹ࠶ݱ͢Δज़ • Ұݩ؅ཧ͞Ε͍ͯΔεΩʔϚΛ௚઀DBʹద༻ ͢Δͷ͸໘౗ • ໘౗ͳঢ়ଶͩͱεΩʔϚ͕ߋ৽͞Εͳ͘ͳΔ • Rails ʹ͸ db:migrate

    ͱ͍͏࢓૊Έ͕͋Δͷ Ͱɺͦͷఔ౓ʹ͸ద༻ίετΛԼ͍͛ͨ
  41. લఏ:εΩʔϚ͕ϦϙδτϦ ؅ཧ͞Ε͍ͯΔ

  42. ͜ͷ໰୊Λ ղܾ͢Δ࢓૊ΈΛ࡞ͬͯΈͨ

  43.  ' # (JU)VC"1*$BMM 42- &YFDVUF ( 42-

  44. db_supplier # SZPQFLPEC@TVQQMJFS

  45. db_supplier (settings) DPOpHEBUBCBTFZNM

  46. db_supplier (settings) DPOpHFOWJSPONFOUTEFWFMPQNFOUSC

  47. DEMO

  48. None
  49. None
  50. db_supplier Ͱ࣮ݱ͞Εͨ͜ͱ • ؆୯ʹҰݩ؅ཧ͞ΕͨεΩʔϚΛద༻͢Δ͜ ͱ͕Ͱ͖ͨ • ςετ࣌ʹ migration, fixture ͕࢖͑ΔΑ͏ʹ

    ͳͬͨ • ֎෦ͷDB΁ͷײ৺ࣄΛݮΒͤͨ
  51. db_supplier Ͱ࣮ݱ͍ͤͨ͜͞ͱ • εΩʔϚʹߋ৽ʹඋ͑ͯͲͷ࣌఺ͷ΋ͷ͕ద ༻͞Ε͍ͯΔ͔Θ͔ΔΑ͏ʹ͢Δ • db:seed ૬౰ͷ΋ͷ΋૊ΈࠐΊΔΑ͏ʹ • etc…

  52. खݩʹDBΛ࣋ͬͨ৔߹ͷσϝϦοτ • σʔλͷ४උ͕େม • ର৅ʹ Slave ؚ͕·Ε͍ͯͯߋ৽ܥ SQL ଧͭΑ͏ͳ ίʔυΛॻ͍͍ͯΔ৔߹ɺຊ൪ͰϨϓϦ͕ࢭ·ͬͯࢮ

    ͵ • ݩͷDBεΩʔϚΛ஌Δज़͕ඞཁ • ݩͷDBεΩʔϚΛखݩʹ؆୯ʹ࠶ݱ͢Δज़͕ඞཁ
  53. ·ͱΊ

  54. ·ͱΊ • ֎෦ͷDBΛͦͷ··ར༻͢Δͱ։ൃ࣌ʹڝ߹ ͯ͠͠·͏ • खݩʹDBΛ࣋ͭʹͯ͠΋ద༻͕໘౗ • εΩʔϚͷ؅ཧͱద༻͕ඞཁ • gem

    ࡞ͬͯղܾͨ͠
  55. ࠷ޙʹ…

  56. ͱ͸͍͑… • DBڞ༗͸ີ݁߹ʹͳΔ • ϞσϧͷϩδοΫ͕ॏෳͯ͠ଘࡏ͢ΔՄೳੑ • ҙਤ͍ͯ͠ͳ͍ͱ͜ΖͰDBΛ৮ΒΕ͍ͯΔՄ ೳੑ • API

    ͕༻ҙͰ͖ΔͳΒ API Λબ୒͢΂͖