Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
データベース再入門
Search
Naoki Sega
July 19, 2014
Programming
6
11k
データベース再入門
第2回ゲームサーバ勉強会(
http://peatix.com/event/42642
)で発表した資料
Naoki Sega
July 19, 2014
Tweet
Share
More Decks by Naoki Sega
See All by Naoki Sega
GC24 Recap: "Building a High-Performance Concurrent Map in Go" and "The Go Contributor Summit"
nsega
0
11
The introduction of my way to learn Go together with Go community
nsega
0
48
The introduction of my way to learn Go for beginners
nsega
1
460
Introduction to singleflight
nsega
0
4.2k
Google Cloud Next '19 Recap
nsega
1
570
Introduction my way to learn Go for beginners
nsega
0
80
Other Decks in Programming
See All in Programming
선언형 UI에서의 상태관리
l2hyunwoo
0
160
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
720
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.7k
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
120
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
220
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
6
970
命名をリントする
chiroruxx
1
410
SymfonyCon Vienna 2025: Twig, still relevant in 2025?
fabpot
3
1.2k
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
390
テストケースの名前はどうつけるべきか?
orgachem
PRO
0
130
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
190
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Building Adaptive Systems
keathley
38
2.3k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Six Lessons from altMBA
skipperchong
27
3.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Gamification - CAS2011
davidbonilla
80
5.1k
Being A Developer After 40
akosma
87
590k
We Have a Design System, Now What?
morganepeng
51
7.3k
Agile that works and the tools we love
rasmusluckow
328
21k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Transcript
σʔλϕʔεͷ࠶ೖ 2014/7/19 (Sat) ୈ2ճήʔϜαʔόษڧձ
About Me • լ थ twitter:@nsega • ॴଐɿGCREST,Inc
ΞϓϦέʔγϣϯΤϯδχΞ (αʔόαΠυAP/DBಘҙɺωΠςΟϒ࠷ۙΔ) લ৬ɺSIer ͰΞϓϦΤϯδχΞ. • ίϛϡχςΟ • JavaEEษڧձ
About Me • ۀͰɾɾ ेDB(RDBMS/NoSQL) - PostgreSQL, MySQL αʔόར༻ͨ͠αʔϏεͷ։ൃ/ӡ༻ •
ۀ֎Ͱɾɾ • ࣾ/ࣾ֎ษڧձͰNoSQLؔ࿈ͷൃදΛগʑ • ΦʔϜࣾग़൛̓ͭͷσʔλϕʔἐͭͷੈք: MongoDBͷνϟϓλʔ/ϨϏϡʔ
͡Ίʹ • σʔλϕʔεΛͬͨΞϓϦ։ൃͰɺαʔόαΠ υͱͯ͠ܞΘͬͨࢲݸਓͷܦݧͰհͤͯ͞Β ͍·͢ɻ • αʔόαΠυ/DB ͷ͜ͱΛ͋·ΓΒͳ͍ॳ৺ ऀɾதڃऀํ͚ͷ ༰ʹͳ͍ͬͯ·͢ɻ
• ؒҧ͍ɺෆ໌ͳͲ͕͋Εɺ ͝ԕྀͳ͘ποίΜͰ͍ͩ͘͞ɺܴ͠·͢
Agenda
Agenda • σʔλϕʔε ʹ͍ͭͯ • RDBMSͱNoSQL ʹ͍ͭͯ • DB/ςʔϒϧઃܭ ʹ͍ͭͯ
• ࣮ࡍʹݱͰΑ͘ΔTipsհ • ·ͱΊ
σʔλϕʔεʹ͍ͭͯ
ͦͦσʔλϕʔεͱ ͳΜͰ͠ΐ͏͔ʁ
σʔλϕʔεͱʁ • ࠔͬͨͱ͖ͷ wikipedia
http://ja.wikipedia.org/wiki/σʔλϕʔε
σʔλϕʔεʹ σʔλΛอଘͬͯʁ • σʔλϕʔεʹอଘ͢Δʹɺσʔλ͕Ͳ͏͍͏ ܗ͔͕ఆٛ͞ΕΔඞཁ͕͋Δɻ • σʔλϕʔεʹ֨ೲ͢ΔσʔλΛͲͷΑ͏ʹஔ ͢Δ͔Λཧతɾཧతͳଆ໘͔Βنఆ͢Δ ͷ(σʔλϞσϧ)͕ඞཁɻ
σʔλϞσϧͬͯʁ ! • σʔλϞσϧʹɺओʹ࣍ͷछྨ͕ڍ͛ΒΕΔɻ • ֊ܕσʔλϞσϧ • ωοτϫʔΫܕσʔλϞσϧ • ϦϨʔγϣφϧσʔλϞσϧ
(ؔϞσϧ) ↑Α͘ࢲୡ͕͔ͭ͏Ϟσϧ͕͜Ε http://ja.wikipedia.org/wiki/σʔλϕʔε
ϦϨʔγϣφϧσʔλϕʔεʁ • ϦϨʔγϣφϧσʔλϕʔε(RDB)ͱ ϦϨʔγϣφϧσʔλϞσϧʹͱ͍ͮͯ ઃܭɾ։ൃ͞ΕΔσʔλϕʔεɻ • ීஈɺࢲୡ͕σʔλϕʔεͱಡΜͰ͍Δͷ => ϦϨʔγϣφϧσʔλϕʔε(RDB)Λࢦ͢͜ ͱ͕ଟ͍ɻ
RDBMSͷ σʔλΛѻ͏ʹʁ • SQLͷग़൪Ͱ͢ɻ
http://ja.wikipedia.org/wiki/SQL “SQLɺϦϨʔγϣφϧσʔλϕʔεཧγεςϜ (RDBMS) ʹ͓͍ ͯɺσʔλͷૢ࡞ఆٛΛߦ͏ͨΊͷσʔλϕʔεݴޠʢ͍߹Θͤ ݴޠʣͰ͋Δɻ”
RDBMSͷ σʔλΛѻ͏ʹʁ • SQLʹɺେ͖̏ͭ͘ͷׂͷݴޠ͕͋Δɻ • σʔλఆٛݴޠ(DDL) CREATE, DROP, ALTER •
σʔλૢ࡞ݴޠ(DML) INSERT INTO, UPDATE ʙ SET ʙ DELTE FROM, SELECT ʙ FROM ʙ WHERE ʙ • σʔλ੍ޚݴޠ(DCL) GRANT, REVOKE, BEGIN, COMMIT, ROLLBACK, ..etc
RDBMS SQL ΞϓϦέʔγϣϯ • σʔλఆٛ(DDL) • σʔλૢ࡞(DML • σʔλ੍ޚ(DCL) σʔλϕʔε
SQLͰͷର ςʔϒϧ
σʔλϕʔε ͏ඞཁ͋Δͷʁ
Yes ※࣍ͷ݅Λຬͨ͢ͷ
ෳਓͰɺ յΕͨΒେมͳ͜ͱʹ ͳΔσʔλΛؚΉɺ େྔͷσʔλΛѻ͏
σʔλϕʔεͷ͍Ͳ͜Ζ • େྔσʔλͷͷ͔ΒରͷσʔλΛߴʹ୳͍ͨ͠ • େྔσʔλΛϝϞϦͰѻ͍͍ͨ • ো͕ى͖ͨͱ͖ʹɺਝʹϦΧόϦ͍ͨ͠ • σʔλͷߋ৽ΛฒྻੑΛอͪͳ͕Β੍ޚ͍ͨ͠ •
σʔλͷ߹ੑΛอূ͍ͨ͠ http://www.amazon.co.jp/dp/4774150207 (1ষࢀর)
σʔλϕʔεͷ ͓͓͖͍͑ͯͨ͞ಛ1 • ΠϯσοΫε • αʔνʢ୳ࡧ)Λߴʹ͢ΔͨΊͷσʔλߏ • දతͳΠϯσοΫεྫ • B+ΠϯσοΫε
• ϋογϡΠϯσοΫε http://ja.wikipedia.org/wiki/ࡧҾ_(σʔλϕʔε)
B+ΠϯσοΫε ϋογϡΠϯσοΫε 1͔Β7ͷΩʔͱσʔλ d1-d7 ͕ϦϯΫ͞Ε͍ͯΔɻ Ͱࣔ͞Εͨ࿈݁ϦετʹΑͬͯ ॱং௨Γͷૉૣ͍͕ࠪՄೳ http://ja.wikipedia.org/wiki/B+ ݕࡧ͢ΔΩʔͷΛϋογϡ ؔʹ༩͑ͯϨίʔυ͕֨ೲ
͞ΕͨϖʔδΛಛఆ͢Δ http://itpro.nikkeibp.co.jp/article/COLUMN/20060113/227241/
σʔλϕʔεͷ ͓͓͖͍͑ͯͨ͞ಛ2 ! • τϥϯβΫγϣϯॲཧ • σʔλʹର͢ΔҰͭͷཧతૢ࡞ͷࣄΛ τϥϯβΫγϣϯͱݺͿ • σʔλͷ߹ੑΛอͭͨΊʹඞཁͳཁૉ
http://ja.wikipedia.org/wiki/τϥϯβΫγϣϯॲཧ
σʔλϕʔεͷ ͓͓͖͍͑ͯͨ͞ಛ2 • τϥϯβΫγϣϯʹΑ࣮ͬͯݱ͞ΕΔ͜ͱ • σʔλͷߋ৽ͷฒྻੑΛอͭɻ -> ෳਓͰͷߋ৽ͷέʔεʹɻ • σʔλͷ߹ੑΛอূ͢Δɻ
-> োൃੜ࣌ʹσʔλ߹ΛอͬͨϦΧόϦΛՄೳ ʹɻ • ACIDಛੑΛ࣮ݱ͢Δɻ http://ja.wikipedia.org/wiki/ACID (ίϯϐϡʔλՊֶ)
τϥϯβΫγϣϯͷྫ http://www.geocities.jp/sugachan1973/doc/funto60.html (ྫ) ී௨༬͔ۚΒఆظ༬ۚ10ສԁΛҠ͢ॲཧ ਖ਼ৗऴྃ࣌(COMMIT) ҟৗऴྃ࣌(ROLLBACK)
σʔλϕʔεͷ ͓͓͖͍͑ͯͨ͞ಛ3 • ϨϓϦέʔγϣϯ http://ja.wikipedia.org/wiki/ϨϓϦέʔγϣϯ “ଟ͘ͷσʔλϕʔεཧγεςϜ͕࠾༻͍ͯ͠Δ֓೦Ͱɺσʔλϕʔ εͷΦϦδφϧͱίϐʔͷϚελʔεϨʔϒؔΛҙຯ͢ΔɻϚελʔ ଆߋ৽Λه͠ɺͦΕ͕εϨʔϒ܈ʹ௨͞ΕΔɻεϨʔϒଆߋ ৽Λਖ਼͘͠ड͚औͬͨͱ͍͏ϝοηʔδΛૹΓɺ࣍ͷߋ৽Λड͚͚ ΒΕΔঢ়ଶͰ͋Δ͜ͱΛ௨͢Δɻ”
RDBMS Master Slave1 Slave2 Slave3 ϨϓϦέʔγϣϯ(ྫ) ྫ) Master:1ɺSlave:3 ߋ৽ใΛ
ߋ৽ใ Λ ߋ৽ใΛ ߋ৽ใΛอ࣋
RDBMSͱNoSQL ʹ͍ͭͯ
RDBMS http://ja.wikipedia.org/wiki/ؔσʔλϕʔεཧγεςϜ “ΤυΨʔɾFɾίου͕ఏএͨؔ͠ϞσϧʢϦϨʔγϣφϧϞσϧʣʹج͍ͮ ͨɺίϯϐϡʔλͷσʔλϕʔεཧγεςϜ (DBMS) Ͱ͋ΔɻRDBMS ʹΑͬ ͯߏங͢ΔσʔλϕʔεΛɺؔσʔλϕʔεͱ͍͏ɻؔϞσϧʹ͓͚Δʮؔ (ϦϨʔγϣϯ)ʯɺҰൠʹʮද
(ςʔϒϧ)ʯ ͱݺΕΔ͜ͱ͕ଟ͍ɻ 2007ݱࡏɺ͘ΒΕ͍ͯͯ·ͨ͘ΘΕ͍ͯΔσʔλϕʔεͷ΄ͱΜͲ ɺؔϞσϧʹج͍͍ͮͯΔɻ”
RDBMSϓϩμΫτ • MySQL • PostgreSQL • Oracle • SQL Server
• MariaDB …etc
RDBMS/ಘҙͳ͜ͱ • σʔλͷҰ؏ੑΛอͪͳ͕Βͷߋ৽͕ߦ͑Δ (τϥϯβΫγϣϯ) • ݕࡧ(SELECT)ʹJOINΛར༻ͨ͠ෳࡶͳ݅Λࢦ ఆͯ͠औಘͰ͖Δ • ಋೖ࣮ϊϋ͕๛ (ރΕ͍ͯΔٕज़ͷͨΊ)
RDBMS/ۤखͳ͜ͱ • େྔσʔλͷॻ͖ࠐΈΛߦ͏(DISK I/O ෦) • ߋ৽ͷൃੜ͢ΔςʔϒϧͷΠϯσοΫε࡞ςʔϒϧߏ ͷมߋ (͔͔࣌ؒΔɺ͔ͭɺςʔϒϧࣗମϩοΫͯ͠͠·͏ͨΊߋ৽ ͕ߦ͑ͳ͍ʣ
• ΧϥϜΛݻఆͣ͠Β͍༻్Ͱͷར༻ • ݁ՌΛଈ࣌Ͱૣ݁͘ՌΛฦ͢ (τϥϯβΫγϣϯ͕͋Δ)
NoSQL http://ja.wikipedia.org/wiki/NoSQL “NoSQLʢҰൠʹ”Not only SQL”ͱղऍ͞ΕΔʣͱɺϦϨʔγϣφϧσʔλϕʔ εཧγεςϜ (RDBMS) Ҏ֎ͷσʔλϕʔεཧγεςϜΛࢦ͓͓͢·͔ͳ ྨޠͰ͋ΔɻϦϨʔγϣφϧσʔλϕʔεΛΈ͘ʹ༻͖͍ͯͨ͠ྺ࢙Λ ଧഁ͠ɺͦΕҎ֎ͷσʔλϕʔεͷར༻ɾൃలΛଅਐͤ͞Α͏ͱ͢Δӡಈͷඪޠ
ͱͯ͠ͷҙຯ߹͍Λ࣋ͭɻ ؔϞσϧͰͳ͍σʔλετΞͷಛͱͯ͠ɺݻఆ͞ΕͨεΩʔϚʹറΒΕͳ ͍͜ͱɺؔϞσϧͷ݁߹ૢ࡞Λར༻͠ͳ͍͜ͱʢ߹ʹΑͬͯ୯ʹͦͷΑ͏ ͳػೳ͕ܽམ͍ͯ͠Δ͚ͩʣɺਫฏεέʔϥϏϦςΟ͕֬อ͍͢͠ࣄ͕ଟ͍͜ ͱɺτϥϯβΫγϣϯΛར༻Ͱ͖ͳ͍ͷ͕ଟ͍͜ͱͳͲ͕ڍ͛ΒΕΔɻ”
NoSQLϓϩμΫτ • memcahed (ΩʔόϦϡʔܕ) • Redis (ΩʔόϦϡʔܕ) • Riak (ΩʔόϦϡʔܕ)
• MongoDB (υΩϡϝϯτϕʔεܕ) • HBase (ΧϥϜϑΝϛϦʔܕ ) • Cassandra (ΧϥϜϑΝϛϦʔܕ) …etc
NoSQL • NoSQLͱ͍ͬͯɺଟ͘ͷ͕͋Δɻ ͞Βʹɺѻ͏σʔλϞσϧɺෳछྨ͋Δɻ (RDBMSɺѻ͏ϞσϧؔϞσϧ͚ͩͰͨ͠ΑͶʁ) • ΩʔόϦϡʔܕ • υΩϡϝϯτϕʔεܕ •
ΧϥϜϑΝϛϦʔܕ …etc http://ja.wikipedia.org/wiki/NoSQL
NoSQL/ಘҙͳ͜ͱ • σʔλΛࢄ͍ͤ͢͞ େྔσʔλͷॻ͖ࠐΈΛॲཧ͍ͤ͢͞ (ࢄͤ͞ΕΔͷͰDISK IOࢄͰ͖Δ) • εέʔϧΞτ͍ͤ͢͞
NoSQL/ۤखͳ͜ͱ ! • σʔλࢄͤͨ͞߹ɺCAPఆཧ͕ݴ͑Δ • CAPఆཧͷఆٛ ϊʔυؒͷσʔλෳʹ͓͍ͯɺಉ࣌ʹ࣍ͷ3ͭͷอূ Λఏڙ͢Δ͜ͱͰ͖ͳ͍ɻ • Ұ؏ੑ(Consistenecy)
ɺՄ༻ੑ(Availability)ɺ அੑ(Partition-tolerance) ͷ̏ͭͷ͏ͪɺಉ࣌ʹຬͨͤΔͷ̎ͭ http://ja.wikipedia.org/wiki/CAPఆཧ
RDBMSͱNoSQL • (RDBMSಘҙͳ͜ͱ) vs (NoSQLಘҙͳ͜ͱ) -> ղܾࡦͷ෯ΛڱΊΔ (͋·Γҙຯ͕ͳ͍) • (RDBMSಘҙͳ͜ͱ)
+ (NoSQLಘҙͳ͜ͱ) -> ཁ݅Λຬͨ͢ղܾࡦΛ૿͢ɻ ಘҙͳྖҬಉ࢜ΛΈ߹ΘͤΔɻ
RDBMSͱNoSQL • Ϣʔεέʔε (NoSQL͕Χόʔ͢Δ෦) • ϩάΠϯͷηογϣϯใΛΩϟογϡ • λΠϜϥΠϯܗࣜͷwebΞϓϦ(TwitterϥΠΫ) • PvP,
GvG ͳͲϦΞϧλΠϜͰͷϚονϯάॲཧ • ϥϯΩϯάॲཧΛϦΞϧλΠϜදࣔ (ϦΞϧλΠϜʹλΠϜϥΠϯΛදࣔͤ͞Δ߹ͳͲ) • ϖʔδຖʹΞΫηεΛදࣔ͢Δ
ςʔϒϧઃܭ ʹ͍ͭͯ
ςʔϒϧઃܭ • σʔλϞσϦϯάͷྲྀΕ • σʔλͷྨ • ςʔϒϧઃܭTips
σʔλϞσϦϯά ͷྲྀΕ • ྫ: ΞΠςϜ/ΧςΰϦ ͷΈ ERਤ(Entity-relationship Diagram)ͰϞσϦϯά http://ja.wikipedia.org/wiki/࣮ମؔ࿈Ϟσϧ ΞΠςϜ
ΧςΰϦ ᶃ֓೦Ϟσϧ => ᶄཧϞσϧ => ᶅཧϞσϧ
σʔλϞσϦϯά ͷྲྀΕ • ྲྀΕΛ͓͞Β͍ 1. ֓೦ϞσϧΛ࡞Δɻ ཁ͔݅Βɺඞཁͳσʔλ߲Λચ͍ग़͢ 2. ཧϞσϧΛ࡞Δɻ σʔλ߲ͷҙຯ/ؔ࿈ΛؑΈͯɺσʔλΛਖ਼نԽ͍ͯ͘͠
ERਤΛ͍ͭͬͯ͘͘ 3. ཧϞσϧΛ࡞Δɻ ERਤΛ͍ͭͬͯ͘͘(࣮ࡍʹRDMBSʹςʔϒϧఆٛͰ͖ΔΑ͏ʹ) ※IPA/σʔλϕʔεεϖγϟϦετࢼݧͷ ςʔϒϧઃܭ͕͔ͳΓ܇࿅ʹͳΔɻ
ϞσϦϯά͢Δͱ͖ͷ σʔλͷྨ • Ϛελܥσʔλ ̍ొ͞ΕͨΒසൟʹมߋ͞Εͳ͍σʔλ ྫ) ΞΠςϜใɺϞϯελʔใɺεΩϧใ ςʔϒϧ໋໊ྫɿM_XXXX γϦʔζ •
τϥϯβΫγϣϯܥσʔλ සൟʹมߋɾՃ͞ΕΔσʔλ ྫ) ΞΠςϜऔಘঢ়گɺΫΤετਐߦঢ়گɺεΩϧशಘใ ςʔϒϧ໋໊ྫɿT_XXXX γϦʔζ
ςʔϒϧઃܭTips • ERਤ༻ͷπʔϧΛར༻͢Δ͜ͱΛΦεεϝ (ݱͰɺERMasterΛͬͯΔ) • ERਤ͔ΒDDLࣗಈੜՄೳʹ http://ermaster.sourceforge.net/index_ja.html (DDL) CREATE
TABLE จ
ςʔϒϧઃܭTips • ERਤϕʔεͰςʔϒϧઃܭϨϏϡʔඞਢ • ςʔϒϧ໊ɺΧϥϜ໊ɺ໋໊ͷنଇ͕͓͔͘͠ͳ͍͔ɻҰͰΘ͔Γ͍͔͢ɻ • ΧϥϜͷܕͷਫ਼ߟྀ͞Ε͍ͯΔ͔ɻ(INT/BIGINT/SERIALʣ • τϥϯβΫγϣϯܥͷσʔλɺσʔλྔɺσʔλ݅ఆ͞Ε͍ͯΔ͔ɻ ଟ͍ͷɺׂ͢Δɻ
• ςʔϒϧͷCRUD(σʔλͷ࡞(Create),ಡΈग़͠(Read),ߋ৽(Update),আ(Delete))ɺ ༷ʹͱ͍ͮͯઆ໌Ͱ͖Δ͔ɻ • ֤ςʔϒϧͷओΩʔ͕ద͔ɻ (࣮ࡍͲΜͳσʔλ͕ೖͬͯDMLΛ࣮ߦ͍ͯ͠Δ͔ΠϝʔδͰ͖͍ͯΔ͔) • ͋Δఔ൚༻తͳߏʹͳ͍ͬͯΔ͔ɻ (ଞͷςʔϒϧͰࣅͨΑ͏ͳςʔϒϧ͕ͳ͍͔)
࣮ࡍʹݱͷઃܭ/։ൃ ͰΑ͘ΔTips
Tips1 ERਤͷϨϏϡʔɺιʔεͷϨϏϡʔɺSQL(ΫΤϦ)ͷϨϏϡʔ • ϨϏϡʔ࣌ͷpoint • explainΛ࣮ߦͯ͠SQLͷ࣮ߦܭըΛ֬ೝ(࣮ߦίετ͕ҟৗʹߴ͍ɺͳͲҙ) • ιʔεͰSQLΛඞཁճҎ্ʹൃߦͯ͠ͳ͍͔ɻ(ORMͱ͔Α͋͘Δ) ϝϦοτɿ ෛՙରࡦͷࣄલ༧ʹͳΔɻखΓࢭɻ
σϝϦοτɿ DBઃܭ/ΫΤϦνϡʔχϯάʹ͍ͭͯϦʔυͰ͖ΔΤϯδχΞͷΞαΠϯ͕ඞਢ
Tips2 ϨϓϦέʔγϣϯ(ྫ:Master:1/Slave:2)Λར༻ׂ͠Λ͚DBෛՙΛࢄ • ࢀরܥ(SELECT)ɺSlave • ߋ৽ܥ(INSERT,UPDATE,DELETE)ɺMaster ϝϦοτɿ DBෛՙ(Disk IOɺMemoryɺCPU༻)ΛࢄͰ͖Δ σϝϦοτɿ
ϨϓϦέʔγϣϯԆ(Master->Slave)Λߟྀͨ͠ઃܭ/࣮ʹ͢Δඞཁ͕͋Δ ࣌ʹSELECTΛMasterʹڧ੍తʹ͚Δඞཁ͕͋Δɻ
Master Slave1 Slave2 ྫ) Master:1ɺSlave:2 ͷϨϓϦέʔγϣϯ ᶄߋ৽ใΛ ᶄߋ৽ใΛ
ΞϓϦέʔγϣϯ ᶃߋ৽ॲཧ ࣮ߦ UPDATE,INSERT,DELETE ᶅࢀরॲཧ ࣮ߦ SELECT ࣮ߦλΠϛϯά ͕ ᶄ => ᶅͰͳ͘ɺ ࣮ߦλΠϛϯά ͕ ᶅ => ᶄ ͱͳΔ߹͕͋Γɺ ࢀরͨ͠ઌ(Slave1,2)ʹߋ৽ͨ͠ใ͕ө͞Εͳ͍
Tips3 σʔλྔΛࢄͤ͞Δ(ςʔϒϧͷਫฏׂɺਨׂ͢Δ ) • ਫฏׂ => ςʔϒϧͷϨίʔυ୯ҐͰɺผͷςʔϒϧͰѻ͏ɻ - ྫ)
user_id () Λ 100Ͱআࢉͯ͠ɺςʔϒϧࣗମΛ100ׂ͢Δ • ਨׂ => ςʔϒϧͷҰ෦ͷྻ͚ͩΛਨʹɺߋ৽ॲཧ͕͓͓͍߲ͱͲ͏͢Δͷ͔ʁ ྫ) Ϣʔβใͷߋ৽ස͕͍߲(χοΫωʔϜɺใ)ͱɺߋ৽ස͕ ߴ͍(ϨϕϧɺମྗͳͲ)Λɺผςʔϒϧʹׂɻ ϝϦοτɿDBੑೳɺཧ͢͠͞ɺՄ༻ੑΞοϓ͢Δ σϝϦοτɿςʔϒϧΛ؆୯ʹJOINͰ͖ͳ͘ͳΔɺઃܭͰߟྀ͖͢ࣄ͕૿͑Δ
Tips4 ୲ΛΫϥΠΞϯτ/αʔόͰ໌֬ʹΘ͚ͣɺ 1ػೳ୯ҐͰΘ͚(ΫϥΠΞϯτ/αʔό)྆ํΔɻ ϝϦοτɿ ։ൃεϐʔυτʔλϧͰݟΔͱૣ͍ɻ αʔό/ΫϥΠΞϯτ ؒɺ௨ͨ͠ઃܭ͕୲ऀͰ݁͢Δ σϝϦοτɿ ։ൃن͕େ͖͘ͳΔͱνʔϜϦιʔεʹґଘɻ
·ͱΊ
·ͱΊ • վΊͯσʔλϕʔεΛ͏؍Λ;Γ͔͑ͬͯΈͨɻ • RDBMS + NoSQL Ͱͷҧ͍Λҙࣝͯ͠Έͨɻ • ΫϥΠΞϯτଆɺAPIΛհͯ͠αʔόʹӬଓԽ͞Ε͍ͯΔσʔ
λߏΛͲ͏ૢ࡞͍ͯ͠Δͷ͔Πϝʔδͯ͠ΈΔɻ • αʔόαΠυଆɺAPIΛհͯ͠ɺDB͔Β͜ͷσʔλߏΫϥ ΠΞϯτͰͲ͏ૢ࡞͞Ε͍ͯΔͷ͔ΛΠϝʔδͯ͠ΈΔɻ • ཪଆͰߦΘΕ͍ͯΔ͜ͱ͕ΠϝʔδͰ͖ΔͱɺΫϥ/αόΛݟ௨ ͤͨઃܭ/։ൃ͕ߦ͑Δɻ
ࢀߟॻ੶ɾURL
ࢀߟॻ੶ • σʔλϕʔεΤϯδχΞཆಡຊ 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/
ࢀߟ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ͷجૅࣝʢ20137݄ߨٛࢿྉʣ http://www.slideshare.net/geminimobile/nosql20137
͝ਗ਼ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ʂʂ
Q & A