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
8
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
450
Introduction to singleflight
nsega
0
4.2k
Google Cloud Next '19 Recap
nsega
1
560
Introduction my way to learn Go for beginners
nsega
0
80
Other Decks in Programming
See All in Programming
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
210
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
390
WEBエンジニア向けAI活用入門
sutetotanuki
0
300
PLoP 2024: The evolution of the microservice architecture pattern language
cer
PRO
0
1.6k
Jakarta Concurrencyによる並行処理プログラミングの始め方 (JJUG CCC 2024 Fall)
tnagao7
1
230
qmuntal/stateless のススメ
sgash708
0
120
Kaigi on Rails 2024 - Rails APIモードのためのシンプルで効果的なCSRF対策 / kaigionrails-2024-csrf
corocn
5
3.4k
Tuning GraphQL on Rails
pyama86
2
1k
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
850
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
23k
Webの技術スタックで マルチプラットフォームアプリ開発を可能にするElixirDesktopの紹介
thehaigo
2
920
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
11
2.3k
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
692
190k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
The Power of CSS Pseudo Elements
geoffreycrofte
72
5.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Cost Of JavaScript in 2023
addyosmani
45
6.6k
Visualization
eitanlees
144
15k
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
Rails Girls Zürich Keynote
gr2m
93
13k
Speed Design
sergeychernyshev
24
570
4 Signs Your Business is Dying
shpigford
180
21k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
290
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