Slide 1

Slide 1 text

MongoDB x Business db tech showcase Tokyo 2015 Yuji Isobe

Slide 2

Slide 2 text

Profile Yuji Isobe Play fiddle/violin Engineer Contribute to socket.io Startup member of emin

Slide 3

Slide 3 text

emin = Emotion Intelligence ؾ࣋ͪΛղ͢ΔςΫϊϩδʔͷ୳ڀ Emotion Intelligence͸ɺʮແҙࣝͷߦಈ͔Βɺ ਓͷؾ࣋ͪͷػඍΛղ͢Δ஌ੑʯΛɺਓ޻஌ೳ͓Αͼػցֶ शͷԠ༻ٕज़Λ༻͍ͯ ։ൃ͠ɺϏδωεʹԠ༻͍ͯ͠·͢ɻ

Slide 4

Slide 4 text

;FO$MFSL ౰͕ࣾ։ൃͨ͠༧ଌΤϯδϯʮ&NPUJPO*0ʯ͕ɺ΢Σϒα Πτ্ͷϢʔβʔͷແҙࣝͷߦಈΛϦΞϧλΠϜͰݕ஌ɺղ ੳ͠·͢ɻϢʔβʔͷߪങߦಈʹ͓͚Δ໎͍Λ࡯஌͠ɺ࠷ద ͳλΠϛϯάͰΦϑΝʔΛఏࣔ͢ΔʮίϯόʔδϣϯɾΦϓ ςΟϚΠβʔʯ͕ɺ&$αΠτͷ$73Λ࠷దԽ͠·͢ɻ

Slide 5

Slide 5 text

ͳͥdb tech showcaseͰ
 Ϗδωε͕ςʔϚͳͷ͔ʁ

Slide 6

Slide 6 text

ਖ਼͍ٕ͠ज़͸
 Ϗδωεͷཁ݅Λຬͨ͢ Α͘ड͚Δ૬ஊ □□࢖Θͳ͍ͷʁ ˚˚͕ͭΒ͍ ××࢖ͬͯΔ͚Ͳ ͜ͷ··Ͱ͍͍ͷ͔ͳ ○○ͬͯͲ͏ࢥ͏ʁ ٕज़ͳΜͯԿ࢖ͬͯ΋
 ҰॹͰ͠ΐʁͬͯݴΘΕͨ
 Μ͚ͩͲͲ͏͢Ε͹…

Slide 7

Slide 7 text

ਖ਼͍ٕ͠ज़͸
 Ϗδωεͷཁ݅Λຬͨ͢ Business Tech ਖ਼͍ٕ͠ज़

Slide 8

Slide 8 text

Business ؒҧٕͬͨज़ Tech ؒҧٕͬͨज़Λબ୒͢Δͱ
 Ϗδωε͸੒ޭ͠ͳ͍

Slide 9

Slide 9 text

Business Tech εέʔϧ͠ͳ͍ٕज़ εέʔϧ͠ͳ͍ٕज़͸
 Ϗδωεͷ଍͔ͤʹͳΔ

Slide 10

Slide 10 text

Business Tech ίετ͕ߴ͍ٕज़ ίετ͕ߴ͗͢Δٕज़͸ ϏδωεΛ৯͍ͭͿ͢

Slide 11

Slide 11 text

Business Tech εέʔϧ͢Δਖ਼͍ٕ͠ज़ εέʔϧ͢Δٕज़͸
 ϏδωεΛՃ଎ͤ͞Δ

Slide 12

Slide 12 text

ಛʹDB͸ޙ͔Βมߋ͕
 ͳ͔ͳ͔Ͱ͖·ͤΜ

Slide 13

Slide 13 text

NoSQL͸దࡐదॴ

Slide 14

Slide 14 text

ͦΕ͸MongoDB΋
 ྫ֎Ͱ͸͋Γ·ͤΜ

Slide 15

Slide 15 text

Depth of Functionality Scalability & Performance NFNDBDIFE 3%#.4 LFZWBMVFTUPSF .POHP%# MongoDBͷཱͪҐஔ Relational Databases Fight NoSQL Gravity https://www.mongodb.com/blog/post/relational-databases-nosql-gravity

Slide 16

Slide 16 text

͜ͷਤʹ͸ͳ͍͜ͱ͕
 ݱ࣮Ͱ͸໰୊ʹͳΓ·͢

Slide 17

Slide 17 text

Ϗδωεͷࢹ఺͕·͢·͢
 ॏཁʹͳ͖͍ͬͯͯ·͢

Slide 18

Slide 18 text

ҰͭͷϢʔεέʔεΛ঺հ͢Δ͚ͩͰ͸ͳ͘
 ৽ͨͳ໰୊ʹ௚໘ͨ࣌͠ʹ΋ղܾʹ໾ཱͯΒΕΔ Goal

Slide 19

Slide 19 text

Topics ͳͥMongoDBΛબΜͩͷ͔ Ϗδωε͕ٸ଎ʹ੒௕͢ΔཪͰɺ
 ͲͷΑ͏ͳ໰୊ʹ௚໘͠ɺղܾ͖͔ͯͨ͠

Slide 20

Slide 20 text

ͳͥMongoDBΛબΜͩͷ͔

Slide 21

Slide 21 text

ͦͷલʹ

Slide 22

Slide 22 text

ࢲͨͪ͸໨తʹԠͯ͡
 DBΛ࢖͍෼͚͍ͯ·͢

Slide 23

Slide 23 text

redis : ϦΞϧλΠϜσʔλ MongoDB : ෼ੳ༻ϩάσʔλ MySQL : ϚελʔσʔλˍϨϙʔτ ࢖༻͍ͯ͠ΔDB

Slide 24

Slide 24 text

redis : ϦΞϧλΠϜσʔλ MongoDB : ෼ੳ༻ϩάσʔλ MySQL : ϚελʔσʔλˍϨϙʔτ ࢖༻͍ͯ͠ΔDB

Slide 25

Slide 25 text

$PVDI%# )#"4& DBTTBOESB 3೥લʹൺֱݕ౼ͨ͠DB ࠓͳΒ Amazon DynamoDB͋ͨΓ΋ݕ౼ʹೖΓͦ͏

Slide 26

Slide 26 text

ͳͥMongoDBΛબΜͩͷ͔ ߏ଄Խσʔλ εΩ ʔ Ϛ Ϩε εέ ʔ ϥ Ϗ Ϧ ς Ο Ϗδωε
 ϓϩηε

Slide 27

Slide 27 text

Ϗδωεϓϩηε ϦΞϧλΠϜ෼ੳ Ωϟϯϖʔϯ഑৴ σʔλϚΠχϯά Ϟσϧߏங ຊ൪౤ೖ σʔλ஝ੵ

Slide 28

Slide 28 text

Garbage In,
 Garbage Out

Slide 29

Slide 29 text

ΰϛΛ෼ੳͯ͠΋
 ΰϛ͕ฦͬͯ͘Δ͚ͩ

Slide 30

Slide 30 text

σʔλͷՁ஋Λ
 ߴΊΔϓϩηεΛ࡞Δ

Slide 31

Slide 31 text

ߏ଄Խσʔλ db.events.insert({
 event: “touch”,
 touches: [
 {pageX: 150, pageY: 100, …},
 {pageX: 47, pageY: 171, …}
 ],
 touchCount: 2 }); db.events.createIndex({
 event: 1
 }); ߦྻʹറΒΕͳ͍
 σʔλߏ଄ΛදݱͰ͖Δ ݕࡧ͍ͨ͠ϑΟʔϧυʹ
 ࣗ༝ʹΠϯσοΫε͕
 షΕΔ͜ͱ͕େ͖ͳڧΈ

Slide 32

Slide 32 text

Point! MongoDB͸RDBMSͱࣅͨΠϯσοΫεߏ଄Λ
 ͍࣋ͬͯΔͷͰɺRDBͷ஌ࣝΛੜ͔͢͜ͱ͕Ͱ͖·͢ B-Tree, Compound Index, Covered Index, etc.

Slide 33

Slide 33 text

εΩʔϚϨε db.events.insert({
 event: “touch”,
 touches: [
 {pageX: 150, pageY: 100, …},
 {pageX: 47, pageY: 171, …}
 ],
 // delete
 touchCount: 2,
 // new
 orientation: -90,
 touchStart: new Date(),
 … }); औಘ͍ͨ͠σʔλ͸
 ೔ʑมԽ͍͖ͯ͠·͢ RDBͷڧΈͰ͋Δ͸ͣͷ
 εΩʔϚ͕ɺϏδωεͷ
 ଍͔ͤʹͳͬͯ͠·͏

Slide 34

Slide 34 text

Point! ʰεΩʔϚϨε≠εΩʔϚఆ͕ٛෆཁʱͰ͸͋Γ·ͤΜ
 Ή͠ΖɺεΩʔϚϨεͰ͋Δ͔Βͦ͜ɺ
 εΩʔϚఆ͕ٛͱͯ΋ॏཁͰ͢

Slide 35

Slide 35 text

https://www.mongodb.com/presentations/schema-design-scale-1

Slide 36

Slide 36 text

ϨϓϦΧηοτ: ৑௕ੑͷ֬อͱReadͷ෼ࢄ γϟʔσΟϯά: ReadͱWriteͷਫฏ෼ࢄ εέʔϥϏϦςΟ

Slide 37

Slide 37 text

γϯάϧϊʔυ mogngod

Slide 38

Slide 38 text

ϨϓϦΧηοτ delayed replica replica set

Slide 39

Slide 39 text

ϨϓϦΧηοτˍγϟʔσΟϯά replica set shard mongos replica set shard replica set shard delayed replica delayed replica delayed replica mongoc

Slide 40

Slide 40 text

͜͜·Ͱίʔυͷมߋ͸
 ΄ͱΜͲඞཁ͋Γ·ͤΜ

Slide 41

Slide 41 text

Point! ͸͡Ί͔Βେن໛ͳDBΛߏ੒͢Δඞཁ͸͋Γ·ͤΜ
 ·ͣ͸ϛχϚϜʹ࢝ΊͯɺϏδωεͷ੒௕ʹ߹Θͤͯ
 MongoDB΋εέʔϧͤ͞Δ͜ͱ͕Ͱ͖·͢

Slide 42

Slide 42 text

ݱ࣮ͷ੍໿ Node.js ͱͷ૬ੑ ➡ ૒ํ޲௨৴ͷͨΊʹ socket.io͕ඞਢͩͬͨ ϗεςΟϯάαʔϏεͷ༗ແ ➡ গ਺ਫ਼ӶͰαʔϏεʹूத͔ͨͬͨ͠ ӦۀͱσʔλαΠΤϯςΟετ΋ѻ͑Δ

Slide 43

Slide 43 text

αʔϏεʹूத͢ΔͨΊʹ ϗεςΟϯάαʔϏεΛར༻͢Δͱ͍͏
 બ୒͸ݕ౼ͷՁ஋͋Γ http://www.slideshare.net/yujiosaka/starting-mongo-db-on-hosting-services

Slide 44

Slide 44 text

MongoDB͕
 ద͞ͳ͔ͬͨέʔε

Slide 45

Slide 45 text

ίϨΫγϣϯͷδϣΠϯ͕Ͱ͖ͳ͍ ίϨΫγϣϯΛ·͕ͨΔ
 τϥϯβΫγϣϯΛ؅ཧͰ͖ͳ͍ υΩϡϝϯταΠζ͕༧ଌͰ͖ͳ͍৔߹ʹ
 σΟεΫޮ཰͕ѱ͍ MongoDBͷۤख෼໺

Slide 46

Slide 46 text

http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/

Slide 47

Slide 47 text

http://blog.scrapinghub.com/2013/05/13/mongo-bad-for-scraped-data/

Slide 48

Slide 48 text

εΩʔϚσβΠϯʹࣦഊ͍ͯ͠Δ ෳࡶͳτϥϯβΫγϣϯ͕ඞཁͳσʔλΛѻ͍ͬͯΔ υΩϡϝϯταΠζ͕༧ଌͰ͖ͳ͍ ద͞ͳ͔ͬͨཧ༝

Slide 49

Slide 49 text

DB୯ҐͰϩοΫ͕͔͔ΓɺCPUΛޮ཰ྑ͘࢖͑ͳ͍ ϗοτσʔλ͕ͳ͍Α͏ͳσʔλͷ؅ཧ͕ۤख MongoDB 2.6Ҏલͷ໰୊

Slide 50

Slide 50 text

গ͠ා͕Βͤͯ
 ͠·͍·ͨ͠…

Slide 51

Slide 51 text

͔͠͠ɺDBͷબ୒͸ຊདྷ
 ৻ॏͰ͋Δ΂͖Ͱ͢

Slide 52

Slide 52 text

Point! MongoDB 3.0Ͱ͸MMAPv1ͷCollection Level΍
 Pluggable Storage Engine͕࣮૷͞Εɺগͣͭ͠
 ۤख෼໺Λࠀ෰ͭͭ͋͠Γ·͢

Slide 53

Slide 53 text

Topics ͳͥMongoDBΛબΜͩͷ͔ Ϗδωε͕ٸ଎ʹ੒௕͢ΔཪͰɺ
 ͲͷΑ͏ͳ໰୊ʹ௚໘͠ɺղܾ͖͔ͯͨ͠

Slide 54

Slide 54 text

Ϗδωε͕ٸ଎ʹ੒௕͢ΔཪͰɺ
 ͲͷΑ͏ͳ໰୊ʹ௚໘͠ɺղܾ͖͔ͯͨ͠

Slide 55

Slide 55 text

Customer Count Total Costs 0QUJNJ[BUJPO .PSF
 IBSEXBSF $PTUTUPP
 IJHIPQUJNJ[F Changing the Growth Formula https://www.compose.io/articles/changing-the-growth-formula/ -PXUPUBM
 DPTUT

Slide 56

Slide 56 text

Low total costs
 ίετɾύϑΥʔϚϯεͷ໰୊΋ͳ͘αʔϏεΛఏڙͰ͖͍ͯΔ More hardware
 Ϗδωεͷ੒௕Λࢧ͑ΔͨΊʹ౤ࢿΛ͢Δ࣌ظ Costs too high! optimize
 ίετ΁ͷܯࠂ্͕͕ΓɺΞʔΩςΫνϟͷݟ௚͕͠ٻΊΒΕΔ Optimization
 ΞʔΩςΫνϟ͕ܦࡁతʹ΋ύϑΥʔϚϯεతʹ΋࠷దԽ͞ΕΔ ϑΣʔζ Changing the Growth Formula https://www.compose.io/articles/changing-the-growth-formula/

Slide 57

Slide 57 text

Customer Count Total Costs 0QUJNJ[BUJPO .PSF
 IBSEXBSF $PTUTUPP
 IJHIPQUJNJ[F Changing the Growth Formula https://www.compose.io/articles/changing-the-growth-formula/ -PXUPUBM
 DPTUT

Slide 58

Slide 58 text

݄ؒ10ԯPV ಉ࣌઀ଓ਺5ສ ݄ؒ10TBอଘ db. ZenClerk .stats()

Slide 59

Slide 59 text

Economy Of Scale

Slide 60

Slide 60 text

Ϗδωεͷ੒௕ʹͭΕͯ
 εέʔϧϝϦοτ͕͖͘

Slide 61

Slide 61 text

ΫϥΠΞϯτ1ࣾ͋ͨΓͷ
 ίετ͸ࣗવͱԼ͕͍ͬͯ͘

Slide 62

Slide 62 text

ඞཁͳ͜ͱ͸εέʔϧ͢Δ
 γεςϜΛߏங͢Δ͜ͱ

Slide 63

Slide 63 text

Problem ݱ࣮ͷੈք͸ࢥͬͨ௨Γʹ͍͔ͳ͍ͷ͕ৗͰ͋Δ

Slide 64

Slide 64 text

ޮ཰Խ͠ͳ͚Ε͹
 ίετ͸૿͑ଓ͚ΔҰํ

Slide 65

Slide 65 text

Solution ϞχλϦϯά ϘτϧωοΫղফ Ծઆݕূ

Slide 66

Slide 66 text

MMS

Slide 67

Slide 67 text

஗͍ΫΤϦͷ؂ࢹ

Slide 68

Slide 68 text

ϘτϧωοΫΛݟ͚ͭͯɺ
 ҰͭҰͭղফ͍ͯ͘͠ https://speakerdeck.com/yujiosaka/yue-jian-10yi-pvkaraxue-ndamongodbantipatan

Slide 69

Slide 69 text

ΠϯσοΫεΛνϡʔχϯάͨ͠Γ… https://speakerdeck.com/yujiosaka/yue-jian-10yi-pvkaraxue-ndamongodbantipatan

Slide 70

Slide 70 text

ΠϯσοΫεΛ͞Βʹνϡʔχϯάͨ͠Γ… https://speakerdeck.com/yujiosaka/yue-jian-10yi-pvkaraxue-ndamongodbantipatan

Slide 71

Slide 71 text

ৗʹϗοτσʔλΛ࢖͏Α͏ʹҙࣝͨ͠Γ… https://speakerdeck.com/yujiosaka/yue-jian-10yi-pvkaraxue-ndamongodbantipatan

Slide 72

Slide 72 text

ΫΤϦΛνϡʔχϯάͨ͠Γ… https://speakerdeck.com/yujiosaka/yue-jian-10yi-pvkaraxue-ndamongodbantipatan

Slide 73

Slide 73 text

ηΧϯμϦ΁ͷΫΤϦ͕޲͘Α͏ʹͨ͠Γ… https://speakerdeck.com/yujiosaka/yue-jian-10yi-pvkaraxue-ndamongodbantipatan

Slide 74

Slide 74 text

ΞοϓσʔτΛνϡʔχϯάͨ͠Γ… https://speakerdeck.com/yujiosaka/yue-jian-10yi-pvkaraxue-ndamongodbantipatan

Slide 75

Slide 75 text

RedisΛ࢖ͬͯόοϑΝϦϯάͨ͠Γ… https://speakerdeck.com/yujiosaka/yue-jian-10yi-pvkaraxue-ndamongodbantipatan

Slide 76

Slide 76 text

໨తʹԠͯ͡DBΛ෼͚ͨΓ… https://speakerdeck.com/yujiosaka/yue-jian-10yi-pvkaraxue-ndamongodbantipatan

Slide 77

Slide 77 text

Point! MongoDB͸ {“key”:”value”} ͷܗࣜͰσʔλΛ
 ֨ೲ͢ΔͨΊɺσʔλͷ૿Ճ΋ແࢹͰ͖ͳ͍ ఆظతͳόοΫΞοϓˍ࡟আ΋େ੾

Slide 78

Slide 78 text

஍ಓͳνϡʔχϯά͕ඞཁ

Slide 79

Slide 79 text

ۜͷ஄ؙ͸ଘࡏ͠ͳ͍ ʢ͋Δ͍͸͓ߴ͍ʣ

Slide 80

Slide 80 text

To Shard-First, Or Not to?

Slide 81

Slide 81 text

·ͣ͸γϟʔσΟϯάʹ
 པΒͳ͍ͱ͍͏ఏҊ

Slide 82

Slide 82 text

Inefficiency ඇޮ཰ͳ··ͩͱ

Slide 83

Slide 83 text

ඇޮ཰ੑ΋ਫฏ෼ࢄ͢Δ Inefficiency Inefficiency Inefficiency

Slide 84

Slide 84 text

γεςϜશମΛޮ཰Խͤ͞Δ

Slide 85

Slide 85 text

Ͱ΋ɺͦΕҎ্ʹେ੾ͳ͜ͱ

Slide 86

Slide 86 text

ਖ਼͍ٕ͠ज़͸
 Ϗδωεͷཁ݅Λຬͨ͢ Business Tech ਖ਼͍ٕ͠ज़

Slide 87

Slide 87 text

Throw Garbage Away, Discover New Gold

Slide 88

Slide 88 text

ϏδωεʹՁ஋ͷͳ͍
 σʔλ͸ࣺͯͯ͠·͏

Slide 89

Slide 89 text

Ձ஋ͷ͋Δσʔλͷ
 ͨΊʹίετΛ෷͏

Slide 90

Slide 90 text

Customer Count Total Costs 1όΠτͷՁ஋ 1όΠτͷՁ஋ ޮ཰Խ

Slide 91

Slide 91 text

Technology scales business We are hiring ;)