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
Talk on Database (ja)
Search
UENISHI Kota
January 31, 2014
Technology
14
14k
Talk on Database (ja)
筑波大学の2013年度の情報システム特別講義Dのスライド
UENISHI Kota
January 31, 2014
Tweet
Share
More Decks by UENISHI Kota
See All by UENISHI Kota
Storage Systems in Preferred Networks
kuenishi
0
32
Metadata Management in Distributed File Systems
kuenishi
2
510
Behind The Scenes: Cloud Native Storage System for AI
kuenishi
2
400
Apache Ozone behind Simulation and AI Industries
kuenishi
0
380
Distributed Deep Learning with Chainer and Hadoop
kuenishi
3
1.2k
A Few Ways to Accelerate Deep Learning
kuenishi
0
1.1k
Introducing Retz
kuenishi
5
1.1k
Introducing Retz and how to develop practical frameworks
kuenishi
3
730
Formalization and Proof of Distributed Systems (ja)
kuenishi
10
6.4k
Other Decks in Technology
See All in Technology
Snowflake のアーキテクチャは本当に筋がよかったのか / Data Engineering Study #30
indigo13love
0
290
Recoil脱却の現状と挑戦
kirik
3
480
20250728 MCP, A2A and Multi-Agents in the future
yoshidashingo
1
110
[MIRU25] NaiLIA: Multimodal Retrieval of Nail Designs Based on Dense Intent Descriptions
keio_smilab
PRO
1
140
Tiptapで実現する堅牢で柔軟なエディター開発
kirik
1
160
クマ×共生 HACKATHON - 熊対策を『特別な行動」から「生活の一部」に -
pharaohkj
0
220
「AI駆動開発」のボトルネック『言語化』を効率化するには
taniiicom
1
220
LLM開発を支えるエヌビディアの生成AIエコシステム
acceleratedmu3n
0
340
P2P ではじめる WebRTC のつまづきどころ
tnoho
1
280
私とAWSとの関わりの歩み~意志あるところに道は開けるかも?~
nagisa53
1
140
公開初日に個人環境で試した Gemini CLI 体験記など / Gemini CLI実験レポート
you
PRO
3
670
2025-07-31: GitHub Copilot Agent mode at Vibe Coding Cafe (15min)
chomado
0
140
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.4k
The Cost Of JavaScript in 2023
addyosmani
51
8.7k
Documentation Writing (for coders)
carmenintech
72
4.9k
A designer walks into a library…
pauljervisheath
207
24k
Git: the NoSQL Database
bkeepers
PRO
431
65k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Gamification - CAS2011
davidbonilla
81
5.4k
Docker and Python
trallard
45
3.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
19k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Automating Front-end Workflow
addyosmani
1370
200k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Transcript
σʔλϕʔεͷͳ͠ Basho Japan KK Kota UENISHI 2014/1/31
ͲͪΒ༷Ͱ͔͢ʁ • @kuenishi • NTTݚڀॴ ˠ Basho • Erlang/OTPΛॻ͍ͯࣄΛ͍ͯ͠·͢ •
ࢄσʔλϕʔεɾࢄγεςϜͷ༻։ൃྺ 6 • ϛυϧΣΞతͳͷ͕ൺֱతಘҙͰ͢
• Riakͱ͍͏OSSͷࢄσʔλϕʔε Λ࡞ͬͯച͍ͬͯ·͢ • Riak CSͱ͍͏OSSͷΫϥυετ ϨʔδΛ࡞ͬͯଧ͍ͬͯ·͢ • ʮࢄਥʯΧϯϑΝϨϯεRicon.io •
Basho.com 3
͖͔͚ͬ 4 தུ ʮ༰ͱͯ͠riakͱ ɹNoSQLΛؚΊͯ ɹ͚ͨΒʯ
ࠓ͓΅͑ͯΒ͏͜ͱ • NoSQLόζϫʔυͰ͋Γɺఆٛͳ͍ • ͍Ζ͍ΖͳσʔλετΞͱͦͷྨɺ͍͚ͷίπ • ࢄγεςϜσʔλϕʔεपลͷɺ၆ᛌਤ • RiakૉΒ͍͠σʔλϕʔεͰ͋Δ
ͦͦ σʔλϕʔεͱԿʁ • ΞϓϦέʔγϣϯͷσʔλΛίϯϐϡʔλʹอଘ͢Δ ͨΊͷιϑτΣΞʢϥΠϒϥϦ or αʔόʔʣ 6 01010110100001001011 11001010101010100101
01001010101001010100 10101010010111111110 00000101111100101010 00000010010101001001 01001010010010100
อଘ͢Δͱ͖ͷཁٻ • σʔλΛਖ਼͘͠ॻ͖ࠐΉ͜ͱɺσʔλͷߋ৽͕த్ ͳঢ়ଶͰࣦഊ͠ͳ͍͜ͱ • ॻ͖ࠐΜͩσʔλΛਖ਼͘͠ಡΈग़͢͜ͱ • ॻ͖ࠐΜͩσʔλΛผܗࣜʹมͯ͠ಡΈͩ͢͜ͱ • ϋʔυΣΞੑೳͷݶք·Ͱߴʹอଘ͢Δ͜ͱ
• ϋʔυΣΞੑೳͷݶք·ͰߴʹಡΈग़͢͜ͱ • σʔλ͕ফ͑Δ͕݅ਖ਼֬ʹ໌͍ͯ͠Δ͜ͱ 7
ྺ্࢙ͷσʔλϕʔε • IDS (GE, 1963) • ֊ܕDB • IMS (IBM,
1966 -), • ωοτϫʔΫܕDB • CODASYL (1969, COBOL), • ࠓಈ͍͍ͯΔ͋Δ 8
1977 System R (IBM) • ؔͷཧʹج͍ͮͨσʔλૢ࡞ݴޠ SQLΛ࣮ͨ͠ੈքॳͷσʔλϕʔε • Ұ؏ͨ͠σʔλʹର͢Δෳͷૢ࡞Λશͯ ޭɾશࣦͯഊʹ·ͱΊɺෳͷߋ৽ཁٻ
Λฒߦ੍ޚ͠ɺσʔλΛӬଓԽ͢Δτϥϯ βΫγϣϯॲཧΛ࣮ͨ͠ੈքॳͷσʔλ ϕʔε • ۀॲཧͷϞσϧʹඇৗʹΑ͘Ϛονͨ͠ ͨΊɺരൃతʹීٴɹˠISOͰඪ४Խ • 1983 Oracle v3 • 1987 Sybase SQL Server (ݱMicrosoft SQL Server) 9
͡Ί͔ΒSQLͩͬͨΘ͚ͰϦϨʔγϣφϧ ͩͬͨΘ͚Ͱͳ͍ ͭ·Γ… 10
RDBMSͷ࣌ • ACIDಛੑʹج͍ͮͨτϥϯβΫγϣϯཧ • SQLͱ͍͏౷Ұ͞ΕͨΠϯλʔϑΣʔε • ੈքதͷΤϯλʔϓϥΠζͷσʔλཧΦϑΟεͷOA ԽɾγεςϜͷΦʔϓϯԽʹ͍RDBMS͕ओྲྀʹ • εέʔϧΞοϓͷ࣌Ͱ͋Δ
• 1995ͷHDDͷGB୯Ձ: ~7.5ສԁ/ GB 11
• 2003ʙɹITόϒϧ่յޙ • Ոఉ༻ίϯϐϡʔλɺϒϩʔυόϯυͷීٴ • Web 2.0ɺϒϩάɺWikipediaɺEϝʔϧɺWebݕࡧɺEC • 1998 Googleۀ
• 1995 Amazonۀ • “Web Scale” ͷσʔλྔ 12 Webͷ࣌
• ٻΊΒΕΔ͜ͱ͕มԽ: ߏ؆୯Ͱɺྔτϥ ϑΟοΫɺϨεϙϯεɺՄ༻ੑͳͲͷཁٻ͕ଟ༷ ԽɾߴԽ • σʔλͷ୯Ձ͕͍҆etc • RDBMSͰղܾͰ͖ͳ͍Φʔμʔ·Ͱσʔλྔ͕ ૿Ճ͢ΔʹैͬͯɺͦΕΛղܾ͢Δٕज़͕ొ
• ؔϞσϧɺSQLͰѻ͍ʹ͍͘σʔλϞσϧʢ୯ ७͕ͩΑ͘มԽ͢Δσʔλߏʣ • 2003ͷHDDͷGB୯Ձ: 100ԁ / GBɹ(120GB) 13 “Web Scale”
Web ScaleͷΞϓϩʔν • Ոఉ༻ίϯϐϡʔλͱಉ͡HW • LAMP + Memcached(2003) • Redis
(2009) • Google: GFS(2003), BigTable(2006) • Hadoop (2006), HBase (2006) • Amazon: Dynamo(2006) • Cassandra (2008), Riak (2009) 14
ຊʹղ͖͍ͨ 15
εέʔϦϯάͷ 16
εέʔϦϯάͷํ๏ • ෳͷϊʔυʹσʔλΛࢄอ࣋ͯ͠ྔΛՔ͙ • ʮͲͷσʔλ͕Ͳͷαʔόʔʹೖ͍ͬͯΔ͔ʁʯ 17
18
ϋογϡతϧʔςΟϯά • Riak, Cassie, DynamoͳͲ • Կ͕Ͳ͜ʹ͋Δ͔ Θ͔Γʹ͍͘ • εέʔϧΞτɺ
ෛՙࢄ͕؆୯ 19 node1 node2 node3 node4
“ϋογϡత” • ΩʔͱϊʔυIDΛϋογϡԽͯ͠ಉ໊͡લۭؒʹஔ͘ • ϋογϡͷ୯ҐͰσʔλΛׂͯ͠ஔ • ϊʔυՃɾআͷͱ͖ͷσʔλ࠶ஔΛ࠷খݶʹͰ ͖Δ 20 {foo,
SomeData}! Hash(foo)%N! Hash(node1)%N!
21 Locality vs Load Balancing - Use Cases • ઌಡΈΛޮ͔ͤͯόϧΫͰγʔέϯγϟϧΞ
Ϋηε • - HBase, BigTable, etc • ϋογϡͰࢄͤͯ͞ෛՙࢄͯ͠ϥϯμϜ ΞΫηε • - Riak, Cassie, etc
߹ੑͷ 22
Q. ߹ੑͬͯͳΜͩͱ ͓͍·͔͢ʁ 23
߹ੑʹ2ͭͷจ຺͕͋Δ • ڞ௨͢Δͷʮ୭͕ݟͯಉ͡Α͏ʹݟ͑Δ͜ͱʯ • ෳछྨͷσʔλؒͷInvariant͕कΒΕ͍ͯΔ͜ͱ • “ACID” తͳAnomaly͕ൃੜ͠ͳ͍͜ͱ • Phantom
Read, Write Skew, etc etc… • ෳͷσʔλͷίϐʔ͕ಉ͡Ͱ͋Δ͜ͱ • ෳͷίϐʔΛ҆શʹߋ৽Ͱ͖Δ͜ͱ • ผʑͷਓͰಉ͡σʔλΛݟΕ͍ͯΔ͜ͱ
25 Consistent Replication is Difficult • ϨϓϦέʔγϣϯॱ൪͕ೖΕସΘΔ • CPUͷΞτΦϒΦʔμʔ࣮ߦͱಉ͡ w1
w1 w1 w2 w2 w2 Actor 0 Actor 1 Actor 2 w2 w2 w1
ࢄ߹ҙ • ʮෳ͕ͯ͢ಉ͡Ͱ͋Δʯ • ʹʮશһ͕ͻͱͭͷʹ߹ҙͰ͖͍ͯΔঢ়ଶʯ • ΞϠγ͍ಈ࡞Λ͢ΔՄೳੑ͕͋Δͷ • ωοτϫʔΫ •
߹ҙ͢Δ૬ख • ੍ݶ࣌ؒɿແݶ 26
·͡Ίʹॻ͘ͱ… • ͍ͭͰյΕΔՄೳੑͷ͋Δෳͷϊʔυ͕ɺ • յΕͯ·ͨ෮ؼ͢ΔՄೳੑ͋Δ • ฦࣄ͕͍͚ͩͷ߹ • ৴པੑͷ͍ϊʔυؒ௨৴Λͬͯ •
ͷ͘͢͝Ԇ͍ͯ͠Δ͚Ͳ࣮ಧ͘ • ͻͱͭͷΛ߹ҙ͢ΔʢͷʹͲͷΑ͏ͳ݅ͱϓϩτ ίϧ͕͋ΕΑ͍͔ʁʣ 27
ͳ͍ͥ͠ͷ͔ • ࢮ׆ࢹ͕͍͠ • ϦʔμʔΛఘΊΔɺϚελʔΛఘΊΔɺetc • ࢳిͰࢮ׆ࢹ͢Δ࿅श • ނোϞσϧͷͳ͕͍͠Ζ͍Ζ͋Δ 28
ࢮ׆ࢹ͍͠ • ʮࢮΜͩ͜ͱʯΛਖ਼͘͠ݟ͚ͭΔͷ͍͠ • ࣮ݧʢ͕࣌ؒ͋Εʣ 29
ʮࢮΜͰ͍Δʯ is Կ 30 © ʮేͷݓʯݪɺଚ
ނোతࠔΔ͜ͱͷྨ Crash Failure ɹ (fail-stop, fail-safe) ނোͨ͠Βࢭ·Δɺࢭ·ͬͨ͜ͱ͕͢ ͙ʹ͔Δ Crash Failure
(fail-silent) ͬͯࢮ͵ Crash Recovery ނোͨ͠ϑϦͯ͠ΒΜΓͯ͠ؼͬͯ ͘Δ Omission Failure (receive / send) ϝοηʔδܽམ Timing Failure ·ͱͳͰಈ͔ͳ͘ͳΔ Response Failure Ϩεϙϯε͕͓͔͍͠ʢσʔλ͕յΕͯ ͍Δetcʣ Arbitrary Failure Ϗβϯνϯނোɺѱҙͷ͋ΔϠπ͕͍Δ 31
ࢄ߹ҙͷछྨ • ʮΞτϛοΫϒϩʔυΩϟετϓϩτίϧʯ • ͓͓·͔ʹ͍ͬͯࢄ߹ҙ͢ΔͨΊͷϓϩτίϧΛ ૯শͯ͠ • ΞτϛοΫ͡Όͳ͍ϒϩʔυΩϟετࢁ͋ͬͯͦ ΕͳΓʹಈ͍͍ͯΔ •
දతͳͷPaxos, Rafter, ZAB 32
33 Consensus Based Replication • ϨϓϦέʔγϣϯͷϦʔμʔΛଟܾͰબग़ • or ϨϓϦέʔγϣϯຖʹଟܾ w1
w1 w1 w2 w2 w2 Actor 0 Actor 1 Actor 2 w2 w2 w1
34 What is PAXOS? – Example Two phase election
– phase 1 Larger n is prior 21:32 8ß: ¼ ÛËÙêîĝ 21:36 O2Ě 21:35 [_ÕðJK 21:36 O2ÙÐÄorz 21:38 O2ÙÐÞorz n=3 n=1 n=2 8
35 What is PAXOS? – Example Two phase election
– phase 2 confirmation 21:42 Ãğ 21:41 O2ÙÀÀ ëÞĝĚ 21:43 a~Å… 21:44 Ãğ 21:43 GJ proposer 21:43 ÀêO2ÚyÁËÚ Ù|N`çÜßÙ n=4 9
Մ༻ੑͷ • σʔλΛ͍͟ॻ͖ࠐ͏ͱࢥͬͨॠؒʹσʔλ͕σʔλϕʔε ͕མ͍ͪͯͨΓݻ·͍ͬͯͯϏδωενϟϯεΛಀ͢ 36
CAPఆཧ ͲΜͳނোʹରͯ͠ QBSUJUJPOUPMFSBODF σʔλৗʹ߹͓ͯ͠Γ DPOTJTUFODZ γεςϜ͕ࢭ·Δ͜ͱͳ͍ BWBJMBCJMJUZ
• ͜ͷ3ͭΛಉ࣌ʹຬͨ͢γεςϜଘࡏ͠ͳ͍ • ͜Ε·ͰͷRDBMSCAॏࢹ 37
CAPఆཧʢCॏࢹͷ߹ʣ • n1ͱn2ͷϨϓϦΧΛৗʹ߹͓ͤͯ͘͞ • ωοτϫʔΫ͕ΕͨΓނোͨ͠ΒࢭΊΔˠՄ༻ੑˣ 38 w1 w2 n1 n2
CAPఆཧʢAॏࢹͷ߹ʣ • n1ͱn2ͷϨϓϦΧΛৗʹ͑ΔΑ͏ʹ͢Δ • ωοτϫʔΫ͕ΕͨΓނোͯ͠ॻ͚Δˠ߹ੑˣ 39 w1 w2 n1 n2
CAPఆཧʢPॏࢹͷ߹ʣ • n1ͱn2ͷϨϓϦΧΛΤεύʔʹ͢Δ • ωοτϫʔΫ͕ΕͨΒਖ਼͍͠ํ͕Θ͔ΔˠՄ༻ੑͪ ΐͬͱˣ 40 w1 w2 n1
n2
Amazon’s Dynamo • ʮσʔλϕʔεϦϨʔγϣφϧ͚ͩ͡Όͳ͍ɺ߹ ੑ͚ͩ͡Όͳ͍ɺՄ༻ੑ͕େࣄͳ߹͋ΔΜͩʯ • ΞϚκϯͷγϣοϐϯάΧʔτʹΘΕ͍ͯͨ • Vector Clocks
• Handoff • (CRDT in Riak) 41
ʮͱΓ͋͑ͣॻ͘ʯͱ͍͏ߟ͑ • “Hinted Handoff” Ϧϯάͷ࣍ͷਓ ʹͱΓ͓͋͑ͣͯ͘͠ • ނো͔Β͖ͬͯͨΒฦ͢ • ॻ͖ࠐΈ͕ॏෳͨ͠Βʁ
42 w1
ͱΓ͋͑ͣॻ͍͓͍ͯͯ ॻ͖ࠐΈ͕িಥͨ͠Βʁ • ྆ํ͓͍࣋ͬͯͯɺিಥͨ͠σʔ λͷʮҼՌؔʯΛ໌Β͔ʹ͢Δ • “Vector Clock” • {a:
1, b:2, c:1} ͱ {a: 2, b:2, c:1} • {a: 1, b:2, c:1} ͱ {a: 1, c:1, d:1} • িಥͨ͠ͷΞϓϦͰղܾ 43 w1 w2 r
44 CRDT • CRDT (Conflict-Free Replicated Data Types • “AP”
Λαϙʔτ • Counter, Register, Sets, Maps • →ผεϥΠυʁ
45 CRDTͰͷRead • ॱ൪͕ೖΕସΘͬͯ݁Ռ͕มΘΒͳ͍ܕ • update(w1, update(w2, Data0) = update(w2,
update(w1, Data0) = Data w1 w1 w1 w2 w2 w2 Actor 0 Actor 1 Actor 2 w1(w2(Data0)) => Data w1(w2(Data0)) => Data w2(w1(Data0)) => Data
ACID vs BASE ACID BASE ߹͍ͯ͠ͳͯ͘ ৗʹσʔλʹΞΫη εͰ͖Δ Basically Avaiable
Atomicity ෳͷૢ࡞ͷޭɾ ࣦഊΛ·ͱΊΔ Consistency Խ͞Εͨσʔλ ෳͷϦϨʔγϣ ϯ͕ৗʹ߹͍ͯ͠ Δ ࠷ऴతʹ߹ͨ͠ঢ় ଶʹͳΔ͜ͱ͕อূ ͞Ε͍ͯΕΑ͍ Eventually Consistent Isolation ฒߦཧͯ͠ߋ৽్ தͷঢ়ଶΛݟͤͳ͍ Durability σʔλΛӬଓԽͯ͠ ࣦΘͳ͍ ϨϓϦΧܾఆత Ͱͳ͘ɺ֬తͰ ͋ͬͨΓɺάϩʔό ϧʹҰ؏͍ͯ͠ͳ͘ ͯΑ͍ Soft-state 46
σʔλετΞͷྨ࣠ 47
ΫΠζɿͲ͜·Ͱ͕DB? Ͳ͔͜Β͕NoSQL? ACIDͳτϥϯβΫγϣϯ τϥϯβΫγϣϯͳ͠ SQLΠϯλʔϑ Σʔε Oracle MySQL PostgreSQL SQL
Server, DB2 Cassandra (CQL) Hive, Presto Impala ಠࣗAPI InnoDB BerkeleyDB FoundationDB Riak MongoDB Redis 48
ςετʹग़ͳ͍ຊͷ͜ͱ 49
CAPఆཧ͔ΒΈͨͷྨ • CAॏࢹ • RDBMS, MongoDB, HBase, etc… • ߹ੑҡ࣋ͷͨΊͷࢄ߹ҙʢਖ਼͘͠ϑΣΠϧΦʔ
όʔ͢ΔͨΊʣͷΈ͕ඞཁ • APॏࢹ • Cassandra, Riak, CouchDB • ࢄ߹ҙͷΈ͕ෆཁʹ࣮ӡ༻؆୯ 50
͜͜·Ͱͷ·ͱΊ: ͱͯᐆດͳද CAॏࢹ APॏࢹ RDBMS HBase MongoDB Cassandra CouchDB Riak
51
ϦϨʔγϣφϧϞσϧΛఘΊΔ 52 • ςʔϒϧߏ => KVS (Mapߏ) • PkeyΧϥϜͷͻͱ͔ͭΒબͿͷ=> ඞਢͷͷ
• JOINΛͤ͞ͳ͍ • ͜ΕʹΑΓεέʔϧΞτܕͷࢄ͕Մೳʹ • εΩʔϚΛࣄલఆٛ͠ͳ͍
εΩʔϚ: σʔλϕʔεͷσʔλߏΛܾΊΔͷ • εΩʔϚΛࣄલʹఆٛ: ϦϨʔγϣφϧϞσϧʹԊ͍ͬͨํ • Pros: σʔλߏʹڧྗͳ੍Λ՝ͨ͢Ί࠷దԽ͍͢͠ˍΞϓϦ Λ։ൃ͍͢͠ •
Cons: ΞϓϦͷมߋίετ͕ߴ͍ˍ࠷ॳʹదʹઃܭ͠ͳ͍ͱ͔ͳ Γมߋʹऑ͍ • εΩʔϚΛࣄલʹܾΊΔඞཁ͕ͳ͍߹ • Pro: σʔλߏΛޙ͔ΒͰ͔ͳΓॊೈʹมߋͰ͖Δ • Con: ςετ͕ͳ͍ͱόά͕ग़͍͢ɺσʔλߏ͕ෳࡶͩͱ࠷ద Խ͠ʹ͍͘ 53
৽͍͠σʔλϞσϧ ΧϥϜࢦ • ΧϥϜΛ͍͘ΒͰ૿ ͢͜ͱ͕Ͱ͖Δ • Query LanguageΛ࡞Δ • ʮΧϥϜϑΝϛϦʔʯ
• HBase, Cassandra υΩϡϝϯτࢦ • ݸʑͷϨίʔυ͕ࣗ༝ͳ ܗࣜΛ࣋ͭ • MapReduceͰΫΤϦ • XML, JSON, etc … • CouchDB, MongoDB 54
͜͜·Ͱͷ·ͱΊ: ͱͯᐆດͳද2 CAॏࢹ APॏࢹ SQL RDBMS - ΧϥϜࢦ HBase Cassandra
υΩϡϝϯτࢦ MongoDB CouchDB (blob) Riak 55
͏ͻͱͭσʔλϞσϧ Graph • Semantic WebతͳσʔλߏΛѻ͏ͨΊͷDB • ;ͨͭͷํੑ • ϊʔυͱΤοδΛਂ͘୳ࡧ͍ͨ͠ •
ϊʔυͱΤοδ͕ଟ͗͢Δ 56
σʔλϕʔε͕ಈ͘ॲཧܥ • ωΠςΟϒ • ͍ɺϝϞϦཧɺGC͕ͳ͍ • JVM • ͍ɺϝϞϦཧ͠ͳ͍͍ͯ͘ɺGC͕ى͖Δ •
Erlang VM • ͍ͦͦ͜͜ɺϝϞϦཧ͠ͳ͍͍ͯ͘ɺGCͰࢭ ·Βͳ͍ 57
58
͍··Ͱઆ໌͖ͯͨ͠ͷͰ؆୯ RiakͲ͏͍ͯ͠Δ͔ εέʔϦϯά ϋογϡతϧʔςΟϯάͰGossipͳਫฏࢄ ߹ੑͷཧ Vector Clocks, CRDTͳͲRead࣌ʹղܾ 2.0ͰPaxosೖΔ
Մ༻ੑͷอূ Hinted HandoffΛͬͯৗʹॻ͖ࠐΈ͕Ͱ͖ΔΑ͏ ʹ͍ͯ͠Δ σʔλϞσϧ Blob + Document Based ΠϯσοΫεΛΕΔ MapReduce͕Ͱ͖Δ ॲཧܥ Erlang VM 59
࣮໘ͰͷRiakͷಛ • ʮதʹΞϥʔτͰى͜͞Εͳ͍ʯ͜ͱΛࢦͨ͠ • Erlang VMΛ༻ • GCʹΑΔఀࢭ͕࣌ؒͳ͍ • ແఀࢭͰͷύονద༻ɺղੳɺૢ࡞͕Մೳ
• ίϚϯυମܥɾϑΝΠϧߏɾσʔλߏΛͳΔ͘γϯϓϧʹઃ ܭ͠ӡ༻ෛ୲Λݮ • ҆ఆੑΛॏࢹͨ͠ઃܭ • ίϯύΫγϣϯɺ༧ଌՄೳੑ 60
݁ہɺͲ͏͍͏ͱ͖ʹͲΕΛ͑Α͍ͷ͔ʁ 61
࣮໘ߟྀͨ͠ બͷϙΠϯτ • JOINͳͲσʔλͷਖ਼نԽ͕ඞཁͳͱ͖: RDBMS • ΦϯϝϞϦͰ࠷৽ͷ࣌ܥྻσʔλΛݟ͍ͨͱ͖: MongoDB • ΧϥϜΛ͍͘ΒͰ૿͍ͨ͠ͱ͖
• SQL෩ͷΫΤϦΛ͍ͨ͠ͱ͖ or Մ༻ੑ: Cassandra • େྔσʔλʹޮతʹόονॲཧΛ͍ͨ͠ͱ͖: Hbase • σʔλΛͳ͘͞ͳ͍&μϯλΠϜΛͳ͍ͨ͘͠ͱ͖: Riak 62
·ͱΊ • σʔλϕʔεͷྺ࢙తʹNoSQL৽͘͠ͳ͍ • SQLͱACIDผͷͳ͠ɺNoSQLͱ͍͏ΑΓNoACID • εέʔϦϯάʢཧ۶ʣ͘͠ͳ͍ • ߹ੑཧ۶͔Β͍ͯͦͦ͠͠ •
Մ༻ੑͦΜͳʹ͘͠ͳ͍ • RiakՄ༻ੑͱεέʔϥϏϦςΟ͕ಘҙ 63
Questions? 64 ࢀߟจݙϦετ: https://gist.github.com/kuenishi/8296883#refs