Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データベース再入門

 データベース再入門

第2回ゲームサーバ勉強会( http://peatix.com/event/42642 )で発表した資料

Naoki Sega

July 19, 2014
Tweet

More Decks by Naoki Sega

Other Decks in Programming

Transcript

  1. About Me • ੉լ ௚थ 
 twitter:@nsega • ॴଐɿGCREST,Inc 


    ΞϓϦέʔγϣϯΤϯδχΞ
 (αʔόαΠυAP/DBಘҙɺωΠςΟϒ΋࠷ۙ΍Δ)
 લ৬͸ɺSIer ͰΞϓϦΤϯδχΞ. • ίϛϡχςΟ • JavaEEษڧձ
  2. About Me • ۀ຿Ͱ͸ɾɾ
 ਺े୆DB(RDBMS/NoSQL) - PostgreSQL, MySQL
 αʔόར༻ͨ͠αʔϏεͷ։ൃ/ӡ༻ •

    ۀ຿֎Ͱ͸ɾɾ • ࣾ಺/ࣾ֎ษڧձͰNoSQLؔ࿈ͷൃදΛগʑ • ΦʔϜࣾग़൛̓ͭͷσʔλϕʔἐͭͷੈք:
 MongoDBͷνϟϓλʔ/ϨϏϡʔ
  3. RDBMSͷ σʔλΛѻ͏ʹ͸ʁ • SQLͷग़൪Ͱ͢ɻ
 
 
 
 
 
 


    http://ja.wikipedia.org/wiki/SQL “SQL͸ɺϦϨʔγϣφϧσʔλϕʔε؅ཧγεςϜ (RDBMS) ʹ͓͍ ͯɺσʔλͷૢ࡞΍ఆٛΛߦ͏ͨΊͷσʔλϕʔεݴޠʢ໰͍߹Θͤ ݴޠʣͰ͋Δɻ”
  4. RDBMSͷ σʔλΛѻ͏ʹ͸ʁ • SQLʹ͸ɺେ͖̏ͭ͘ͷ໾ׂͷݴޠ͕͋Δɻ • σʔλఆٛݴޠ(DDL)
 CREATE, DROP, ALTER •

    σʔλૢ࡞ݴޠ(DML)
 INSERT INTO, UPDATE ʙ SET ʙ
 DELTE FROM, SELECT ʙ FROM ʙ WHERE ʙ • σʔλ੍ޚݴޠ(DCL)
 GRANT, REVOKE, BEGIN, COMMIT, ROLLBACK, ..etc
  5. σʔλϕʔεͷ ͓͓͖͍͑ͯͨ͞ಛ௃2 • τϥϯβΫγϣϯʹΑ࣮ͬͯݱ͞ΕΔ͜ͱ • σʔλͷߋ৽ͷฒྻੑΛอͭɻ
 -> ෳ਺ਓͰͷߋ৽ͷέʔεʹɻ • σʔλͷ੔߹ੑΛอূ͢Δɻ


    -> ো֐ൃੜ࣌ʹσʔλ੔߹ΛอͬͨϦΧόϦΛՄೳ ʹɻ • ACIDಛੑΛ࣮ݱ͢Δɻ http://ja.wikipedia.org/wiki/ACID (ίϯϐϡʔλՊֶ)
  6. NoSQL http://ja.wikipedia.org/wiki/NoSQL “NoSQLʢҰൠʹ”Not only SQL”ͱղऍ͞ΕΔʣͱ͸ɺϦϨʔγϣφϧσʔλϕʔ ε؅ཧγεςϜ (RDBMS) Ҏ֎ͷσʔλϕʔε؅ཧγεςϜΛࢦ͓͓͢·͔ͳ෼ ྨޠͰ͋ΔɻϦϨʔγϣφϧσʔλϕʔεΛ΍Έ͘΋ʹ࢖༻͖ͯͨ͠௕͍ྺ࢙Λ ଧഁ͠ɺͦΕҎ֎ͷσʔλϕʔεͷར༻ɾൃలΛଅਐͤ͞Α͏ͱ͢Δӡಈͷඪޠ

    ͱͯ͠ͷҙຯ߹͍Λ࣋ͭɻ
 ؔ܎ϞσϧͰ͸ͳ͍σʔλετΞͷಛ௃ͱͯ͠ɺݻఆ͞ΕͨεΩʔϚʹറΒΕͳ ͍͜ͱɺؔ܎Ϟσϧͷ݁߹ૢ࡞Λར༻͠ͳ͍͜ͱʢ৔߹ʹΑͬͯ͸୯ʹͦͷΑ͏ ͳػೳ͕ܽམ͍ͯ͠Δ͚ͩʣɺਫฏεέʔϥϏϦςΟ͕֬อ͠΍͍͢ࣄ͕ଟ͍͜ ͱɺτϥϯβΫγϣϯΛར༻Ͱ͖ͳ͍΋ͷ͕ଟ͍͜ͱͳͲ͕ڍ͛ΒΕΔɻ”
  7. NoSQLϓϩμΫτ • memcahed (ΩʔόϦϡʔܕ) • Redis (ΩʔόϦϡʔܕ) • Riak (ΩʔόϦϡʔܕ)

    • MongoDB (υΩϡϝϯτϕʔεܕ) • HBase (ΧϥϜϑΝϛϦʔܕ ) • Cassandra (ΧϥϜϑΝϛϦʔܕ)
 
 …etc
  8. NoSQL/ۤखͳ͜ͱ ! • σʔλ෼ࢄͤͨ͞৔߹ɺCAPఆཧ͕ݴ͑Δ • CAPఆཧͷఆٛ
 ϊʔυؒͷσʔλෳ੡ʹ͓͍ͯɺಉ࣌ʹ࣍ͷ3ͭͷอূ Λఏڙ͢Δ͜ͱ͸Ͱ͖ͳ͍ɻ • Ұ؏ੑ(Consistenecy)

    ɺՄ༻ੑ(Availability)ɺ
 ෼அ଱ੑ(Partition-tolerance)
 ͷ̏ͭͷ͏ͪɺಉ࣌ʹຬͨͤΔͷ͸̎ͭ http://ja.wikipedia.org/wiki/CAPఆཧ
  9. RDBMSͱNoSQL • (RDBMSಘҙͳ͜ͱ) vs (NoSQLಘҙͳ͜ͱ)
 -> ղܾࡦͷ෯ΛڱΊΔ
 (͋·Γҙຯ͕ͳ͍) • (RDBMSಘҙͳ͜ͱ)

    + (NoSQLಘҙͳ͜ͱ)
 -> ཁ݅Λຬͨ͢ղܾࡦΛ૿΍͢ɻ
 ಘҙͳྖҬಉ࢜Λ૊Έ߹ΘͤΔɻ
  10. RDBMSͱNoSQL • Ϣʔεέʔε (NoSQL͕Χόʔ͢Δ෦෼) • ϩάΠϯͷηογϣϯ৘ใΛΩϟογϡ • λΠϜϥΠϯܗࣜͷwebΞϓϦ(TwitterϥΠΫ) • PvP,

    GvG ͳͲϦΞϧλΠϜͰͷϚονϯάॲཧ • ϥϯΩϯάॲཧΛϦΞϧλΠϜදࣔ
 (ϦΞϧλΠϜʹλΠϜϥΠϯΛදࣔͤ͞Δ৔߹ͳͲ) • ϖʔδຖʹΞΫηε਺Λදࣔ͢Δ
  11. σʔλϞσϦϯά ͷྲྀΕ • ྲྀΕΛ͓͞Β͍ 1. ֓೦ϞσϧΛ࡞Δɻ
 ཁ͔݅Βɺඞཁͳσʔλ߲໨Λચ͍ग़͢ 2. ࿦ཧϞσϧΛ࡞Δɻ
 σʔλ߲໨ͷҙຯ/ؔ࿈ΛؑΈͯɺσʔλΛਖ਼نԽ͍ͯ͘͠


    ERਤΛ͍ͭͬͯ͘͘ 3. ෺ཧϞσϧΛ࡞Δɻ
 ERਤΛ͍ͭͬͯ͘͘(࣮ࡍʹRDMBSʹςʔϒϧఆٛͰ͖ΔΑ͏ʹ)
 ※IPA/σʔλϕʔεεϖγϟϦετࢼݧͷ
 ςʔϒϧઃܭ໰୊͕͔ͳΓ܇࿅ʹͳΔɻ
  12. ϞσϦϯά͢Δͱ͖ͷ σʔλͷ෼ྨ • Ϛελܥσʔλ
 ̍౓ొ࿥͞ΕͨΒසൟʹ͸มߋ͞Εͳ͍σʔλ
 ྫ) ΞΠςϜ৘ใɺϞϯελʔ৘ใɺεΩϧ৘ใ
 ςʔϒϧ໋໊ྫɿM_XXXX γϦʔζ •

    τϥϯβΫγϣϯܥσʔλ
 සൟʹมߋɾ௥Ճ͞ΕΔσʔλ
 ྫ) ΞΠςϜऔಘঢ়گɺΫΤετਐߦঢ়گɺεΩϧशಘ৘ใ
 ςʔϒϧ໋໊ྫɿT_XXXX γϦʔζ
  13. ςʔϒϧઃܭTips • ERਤϕʔεͰςʔϒϧઃܭϨϏϡʔ͸ඞਢ • ςʔϒϧ໊ɺΧϥϜ໊͸ɺ໋໊ͷنଇ͕͓͔͘͠ͳ͍͔ɻҰ໨ͰΘ͔Γ΍͍͔͢ɻ • ΧϥϜͷܕͷਫ਼౓͸ߟྀ͞Ε͍ͯΔ͔ɻ(INT/BIGINT/SERIALʣ • τϥϯβΫγϣϯܥͷσʔλ͸ɺσʔλྔɺσʔλ݅਺͸૝ఆ͞Ε͍ͯΔ͔ɻ
 ଟ͍΋ͷ͸ɺ෼ׂ͢Δɻ

    • ςʔϒϧͷCRUD(σʔλͷ࡞੒(Create),ಡΈग़͠(Read),ߋ৽(Update),࡟আ(Delete))͸ɺ
 ࢓༷ʹ΋ͱ͍ͮͯઆ໌Ͱ͖Δ͔ɻ • ֤ςʔϒϧͷओΩʔ͕ద੾͔ɻ
 (࣮ࡍͲΜͳσʔλ͕ೖͬͯDMLΛ࣮ߦ͍ͯ͠Δ͔ΠϝʔδͰ͖͍ͯΔ͔) • ͋Δఔ౓൚༻తͳߏ੒ʹͳ͍ͬͯΔ͔ɻ
 (ଞͷςʔϒϧͰࣅͨΑ͏ͳςʔϒϧ͕ͳ͍͔)

  14. Master Slave1 Slave2 ྫ) Master:1୆ɺSlave:2୆ ͷϨϓϦέʔγϣϯ ᶄߋ৽৘ใΛ ఻೻ ᶄߋ৽৘ใΛ ఻೻

    ΞϓϦέʔγϣϯ ᶃߋ৽ॲཧ ࣮ߦ UPDATE,INSERT,DELETE ᶅࢀরॲཧ ࣮ߦ SELECT ࣮ߦλΠϛϯά ͕ ᶄ => ᶅͰ͸ͳ͘ɺ ࣮ߦλΠϛϯά ͕ ᶅ => ᶄ ͱͳΔ৔߹͕͋Γɺ
 ࢀরͨ͠ઌ(Slave1,2)ʹ͸ߋ৽ͨ͠৘ใ͕൓ө͞Εͳ͍
  15. Tips3 σʔλྔΛ෼ࢄͤ͞Δ(ςʔϒϧͷਫฏ෼ׂɺਨ௚෼ׂ͢Δ ) • ਫฏ෼ׂ
 => ςʔϒϧͷϨίʔυ୯ҐͰɺผͷςʔϒϧͰѻ͏ɻ 
 - ྫ)

    user_id (਺஋) Λ 100Ͱআࢉͯ͠ɺςʔϒϧࣗମΛ100෼ׂ͢Δ • ਨ௚෼ׂ
 => ςʔϒϧͷҰ෦ͷྻ͚ͩΛਨ௚ʹɺߋ৽ॲཧ͕͓͓͍߲໨ͱͲ͏͢Δͷ͔ʁ 
 ྫ) Ϣʔβ৘ใͷߋ৽ස౓͕௿͍߲໨(χοΫωʔϜɺ୺຤৘ใ)ͱɺߋ৽ස౓͕ ߴ͍(ϨϕϧɺମྗͳͲ)Λɺผςʔϒϧʹ෼ׂɻ ϝϦοτɿDBੑೳɺ؅ཧ͠΍͢͞ɺՄ༻ੑ͸Ξοϓ͢Δ σϝϦοτɿςʔϒϧΛ؆୯ʹJOINͰ͖ͳ͘ͳΔɺઃܭͰߟྀ͢΂͖ࣄ͕૿͑Δ
  16. ·ͱΊ • վΊͯσʔλϕʔεΛ࢖͏؍఺Λ;Γ͔͑ͬͯΈͨɻ • RDBMS + NoSQL Ͱͷҧ͍Λҙࣝͯ͠Έͨɻ • ΫϥΠΞϯτଆ͸ɺAPIΛհͯ͠αʔόʹӬଓԽ͞Ε͍ͯΔσʔ

    λߏ଄ΛͲ͏ૢ࡞͍ͯ͠Δͷ͔Πϝʔδͯ͠ΈΔɻ • αʔόαΠυଆ͸ɺAPIΛհͯ͠ɺDB͔Β͜ͷσʔλߏ଄͸Ϋϥ ΠΞϯτͰͲ͏ૢ࡞͞Ε͍ͯΔͷ͔ΛΠϝʔδͯ͠ΈΔɻ • ཪଆͰߦΘΕ͍ͯΔ͜ͱ͕ΠϝʔδͰ͖ΔͱɺΫϥ/αόΛݟ௨ ͤͨઃܭ/։ൃ͕ߦ͑Δɻ
  17. ࢀߟॻ੶ • σʔλϕʔεΤϯδχΞཆ੒ಡຊ
 http://www.amazon.co.jp/dp/4774158062 • WebΤϯδχΞͷͨΊͷσʔλϕʔεٕज़[࣮ફ]ೖ໳
 http://www.amazon.co.jp/dp/4774150207 • σʔλϕʔεపఈ߈ུ (WEB+DB

    PRESS plus) [େܕຊ]
 http://www.amazon.co.jp/dp/4774163651 • NoSQLσʔλϕʔεϑΝʔετΨΠυ [େܕຊ]
 http://www.amazon.co.jp/dp/4798029599 • SQL ॻ͖ํυϦϧ
 http://www.amazon.co.jp/dp/4774130850 • SQL Ξϯνύλʔϯ
 http://www.oreilly.co.jp/books/9784873115894/
  18. ࢀߟURL • σʔλϕʔε֓ཁ
 wikipedia : σʔλϕʔε
 http://ja.wikipedia.org/wiki/σʔλϕʔε
 http://en.wikipedia.org/wiki/Database • ΠϯσοΫε


    B-TreeΠϯσοΫεͷλϓϧऔಘݺͼग़͠
 http://www.postgresqlinternals.org/index.php/Τά θΩϡʔλ
 ΠϯσοΫεͷجૅ஌ࣝ
 http://www.hi-ho.ne.jp/tsumiki/doc_1.html
 
 ୈ7ճɹੑೳվળͷ伴ɼΠϯσοΫεͷಛੑΛ஌Δ ʙB-treeͱϋογϡ
 http://gihyo.jp/dev/serial/01/sql_academy2/000701
 
 ໰߹ͤ࠷దԽΠϯαΠυ
 http://www.slideshare.net/ItagakiTakahiro/ss- 4656848 • DBύϑΥʔϚϯενϡʔχϯάͷجૅɿΠϯσο Ϋεೖ໳
 http://www.slideshare.net/simosako/rdb • DBΞʔΩςΫνϟ
 PostgreSQLΞʔΩςΫνϟೖ໳ʢPostgreSQL Conference 2012ʣ
 http://www.slideshare.net/uptimejp/postgre- sqlpgcon12j • NoSQL+RDBMS
 NOSQL Databases
 http://nosql-database.org/
 ϙϦάϩοτύʔγεςϯε
 http://martinfowler.com/bliki/ PolyglotPersistence.html
 
 Nosqlͷجૅ஌ࣝʢ2013೥7݄ߨٛࢿྉʣ
 http://www.slideshare.net/geminimobile/nosql20137