Go Conference 2018 Spring
©2018 Wantedly, Inc.Dgraph - A high performancegraph database written in pure GoGo Conference 2018 Spring - @munisystem
View Slide
©2018 Wantedly, Inc.Yuichi Saito@munisystem• Wantedly, Inc.• Infrastructure Engineer• Microservices• Productivity• My Favorite Golang Products• Istio / Istio• wercker / stern• ory / dockertestࣗݾհ
©2018 Wantedly, Inc.άϥϑͱάϥϑͰදݱͰ͖Δͷࢁͷ8FC"QQMJDBUJPO͕άϥϑΛแ͍ͯ͠Δw ίʔυϕʔεͱґଘύοέʔδw υΩϡϝϯτͱΧςΰϦλάw ͱจཤྺw ໊ަ
©2018 Wantedly, Inc. ԿނάϥϑσʔλϕʔεΛ͏ͷ͔ طଘͷάϥϑσʔλϕʔεͷ %HSBQIͷհ ·ͱΊΞδΣϯμ
©2018 Wantedly, Inc.άϥϑΛ3%#.4Ͱѻ͏ͷ͍͠w 3%#.4άϥϑΛϦϨʔγϣϯͱͯ͠දݱ͢Δw άϥϑΛḷΔʹ+0*/Λ͏ඞཁ͕͋Δw +0*/ίετ͕͔͔Δw ਓɺɺ໊ͳͲ༷ʑͳσʔλؒͷάϥϑΛදݱ͢ΔʹɺҎԼͷͲͪΒ͔͔͠ͳ͍ ਓਓɺਓͳͲͦΕͧΕʹରͯ͠ϦϨʔγϣϯΛఆٛ ϙϦϞʔϑΟοΫͳϦϨʔγϣϯΛఆٛԿނάϥϑσʔλϕʔεΛ͏ͷ͔
©2018 Wantedly, Inc.άϥϑσʔλϕʔεݸʑͷͭͳ͕ΓϑΥʔΧεͨ͠σʔλετΞw શͯͷσʔλ/PEFͱ&EHFͰදݱ͞ΕΔw /PEFw σʔλͷΤϯςΟςΟΛࣔ͢w FHϢʔβɺɺ໊w &EHFw σʔλؒͷؔͱํΛࣔ͢w FH༑ͩͪɺߪೖɺ໊ަԿނάϥϑσʔλϕʔεΛ͏ͷ͔C
©2018 Wantedly, Inc.Index Free Adjacencyw /PEF࣍ͷ/PEFΞΫηε͢ΔͨΊͷΞυϨεΛ࣋ͭw ୳ࡧࣗͷ࣋ͭ&EHFͷ͚ͩͰΑ͍w -JOLFE-JTUͳͲͰ࣮͞ΕΔw 0 Ͱ࣍ͷ/PEFΛࢀরͰ͖Δw ྫ"͔Β#Λࢀর͢ΔԿނάϥϑσʔλϕʔεΛ͏ͷ͔ABC
©2018 Wantedly, Inc.8BOUFEMZ1FPQMF͕Ϣʔβʹఏڙ͍ͯ͠ΔՁw ʮ໊ΛऔΓɺਓͱͭͳ͕Δʯw ໊ͱਓͷ͍͋ͩͷάϥϑΛετΞ͍ͨ͠ԿނάϥϑσʔλϕʔεΛ͏ͷ͔
©2018 Wantedly, Inc.طଘͷάϥϑσʔλϕʔεͷ
©2018 Wantedly, Inc.ॻ͖ࠐΈͷੑೳ͕͔ͬͨw 3FBEຆͲͷάϥϑσʔλϕʔεͰߴ͍ੑೳΛग़͍ͯ͠Δw ໊ΛࡱΔɺͱ͍͏ߦҝ8BOUFEMZ1FPQMFͷίΞͳମݧw ຖຖඵେྔʹૹΒΕͯ͘Δ໊ΛετΞͰ͖Δ͚ͩͷ8SJUFͷύϑΥʔϚϯε͕ඞཁw ͜ΕΛຬͨ͢άϥϑσʔλϕʔεଘࡏ͠ͳ͔ͬͨطଘͷάϥϑσʔλϕʔεͷ
©2018 Wantedly, Inc.εέʔϧ͠ͳ͍ߏ• αʔϏεͷʹεέʔϧͰԠ͡ΒΕΔඞཁ͕͋Δw /FPKσʔλϕʔεଆͰͷσʔλͷγϟʔσΟϯάʹରԠ͍ͯ͠ͳ͍w 0SJFOU%#$MBTTʢςʔϒϧʣຖʹγϟʔσΟϯάΛ͢Δw ͋Δςʔϒϧ͚ͩॻ͖ࠐΈ͕ܹ͍͠ɺΈ͍ͨͳέʔεʹରԠͰ͖ͳ͍طଘͷάϥϑσʔλϕʔεͷ
©2018 Wantedly, Inc.%HSBQIͷհ
©2018 Wantedly, Inc.(Pͷࢄάϥϑσʔλϕʔεw (SBQI2-ϥΠΫͳΫΤϦγϯλοΫεw H31$ͱ)551ͷαϙʔτw ϋΠύϑΥʔϚϯε%HSBQIͱ
©2018 Wantedly, Inc.ॻ͖ࠐΈͷύϑΥʔϚϯε͕༏Ε͍ͯΔw ެࣜͷϕϯνϚʔΫw ಡΈॻ͖ڞʹ/FPKͷഒw 1FPQMFͷ̎ޙΛఆͨ͠σʔλྔ εϧʔϓοτͰϕϯνϚʔΫΛ࣮ࢪw εέʔϧͳ͠Ͱ͑ΒΕͨ%HSBQIͱhttps://blog.dgraph.io/post/benchmark-
©2018 Wantedly, Inc.%HSBQIͷσʔλϞσϧw %HSBQIͰάϥϑϞσϧͱͯ͠3%'5SJQMFΛ࠾༻w 8FCϦιʔεʹϝλใΛ༩͢ΔͨΊͷΈw ϦιʔεͷؔΛ4VCKFDU 1SFEJDBUF 0CKFDUͰදݱw 4VCKFDUࢧͱͳΔ/PEFw 1SFEJDBUFؔΛද͢&EHFw 0CKFDUऴͱͳΔ/PEF%HSBQIͱ . . . . .RDF ٖࣅίʔυʹ͓͚ΔϑϨϯυϦϨʔγϣϯ
©2018 Wantedly, Inc.3%'5SJQMFDgraphͱ . . . . .RDF ٖࣅίʔυʹ͓͚ΔϑϨϯυϦϨʔγϣϯCBob ba Alicefriend named==
©2018 Wantedly, Inc.3%'5SJQMFw QFSTPO͕ͳ͍ w 0CKFDU4VCKFDU&OUJUZͱ"UUSJCVUF͕͋Δw &OUJUZ6TFSͳͲͷ֓೦Λද͢w "UUSJCVUFΛද͢w ຊ࣭తʹϞσϦϯάʹ͕ؔͳ͍w OBNFEQSFEJDBUF͕͋ΔͳΒͦΕQFSTPOw ·ΔͰ%VDL5ZQJOHDgraphͱCBob ba Alicefriend named
©2018 Wantedly, Inc.%HSBQIͷσʔλߏ
©2018 Wantedly, Inc.άϥϑ̎ͭͷσʔλߏʹΑͬͯදݱ͞Ε͍ͯΔw 1PTUJOHw 1PTUJOH-JTU%HSBQIͷσʔλߏ
©2018 Wantedly, Inc.1PTUJOHw %HSBQIͷσʔλͷ࠷খ୯Ґw 1SFEJDBUFͱͦΕʹඥͮ͘ 4VCKFDUͱ0CKFDUΛแ͢Δw WBMVF@UZQF͕6*%w 4VCKFDU&OUJUZͰ͋Δw ͦΕҎ֎"UUSJCVUFw WBMVFʹ࣮σʔλ͕ೖΔ%HSBQIͷσʔλߏmessage Posting {fixed64 uid = 1;bytes value = 2;enum ValType {DEFAULT = 0;BINARY = 1;INT = 2;FLOAT = 3;BOOL = 4;DATETIME = 5;GEO = 6;UID = 7;PASSWORD = 8;STRING = 9;}ValType val_type = 3;......enum PostingType {REF=0;VALUE=1;VALUE_LANG=2;}PostingType posting_type = 4;bytes lang_tag = 5;string label = 6;repeated api.Facet facets = 9;uint32 op = 12;uint64 start_ts = 13;uint64 commit_ts = 14;}Protobuf ʹΑΔ Posting ͷఆٛ
©2018 Wantedly, Inc.1PTUJOH-JTUw 1SFEJDBUFͱ4VCKFDUͷϖΞʹඥͮ͘1PTUJOHΛͻͱ·ͱΊʹͨ͠ͷw ͻͱ·ͱΊʹ͢Δ͜ͱͰɺ͋ΔϢʔβͷ༑ୡҰཡ ΛҰճͷ୳ࡧͰऔಘͰ͖Δw ,74ͷLFZʹ1SFEJDBUFͱ4VCKFDUؚ͕·ΕΔw ͦͷҝ1PTUJOHʹ͕ࣗԿऀͰ͋Δ͔Λ දݱ͢ΔGJFME͕ͳ͍%HSBQIͷσʔλߏmessage PostingList {repeated Posting postings = 1;bytes checksum = 2;uint64 commit = 3;bytes uids = 4;}Protobuf ʹΑΔ Posting ͷఆٛ(Predicate,Subject) -> PostingListKVS ͷετΞํ๏
©2018 Wantedly, Inc.#BEHFSw %HSBQIͷ։ൃνʔϜ͕࡞ͨ͠(PͰॻ͔Εͨ,74w ϋΠύϑΥʔϚϯεw 3BOEPN3FBE'BDFCPPLͷ,74Ͱ͋Δ3PDLT%#ͷഒw 44%ͷ࠷దԽw "$*%5SBOTBDUJPOͷαϙʔτDdgraphͷσʔλετϨʔδ
©2018 Wantedly, Inc.Կނ#BEHFSΛ࡞ͬͨͷ͔w ͱͱ3PDLT%#Λ͍ͬͯͨw ͔͠͠$HPΛ͔ͭ͏σϝϦοτ͕େ͖͗ͨ͢w (PͷΤίγεςϜʹΕͳ͍w QQSPGSBDFEFUFDUPSw QUISFBE@DSFBUFͰόάΛҾ͖ى͜͠ɺύϑΥʔϚϯε͕Լ͢Δw (Pͷࠒw ($͕ޮ͔ͳ͍ͷͰ$GSFF ΛΕΔͱϝϞϦϦʔΫΛҾ͖ى͜͢DdgraphͷσʔλετϨʔδ
©2018 Wantedly, Inc.Կނ#BEHFSΛ࡞ͬͨͷ͔w (PͰॻ͔Ε͍ͯΔ#PMU%#Ͳ͏ͩͬͨͷ͔w #PMU%#3FBE8SJUFڞʹάϩʔόϧۭؒʹ͋ΔTZOD38.VUFYͷϩοΫΛͱΔw ฒྻॲཧ͕ग़དྷͳ͍w 1PTUJOH-JTUͷมߋʹେ͖ͳӨڹΛ༩͑ͨDdgraphͷσʔλετϨʔδ
©2018 Wantedly, Inc.#BEHFSͷΈ
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFw ίϯηϓτͰ͖Δ͚ͩγʔΫΛগͳ͘͢Δw ॻ͖ࠐΈͷϑϩʔ ॻ͖ࠐΈ͕͋ͬͨ߹8"-ͱϝϞϦʢ.FN5BCMFʣʹॻ͖ग़͢ ॻ͖ࠐΉͱ͖ʹ.FN5BCMFʹσʔλ͕ೖΒͳ͍߹ϑΝΠϧʹϑϥογϡ γʔΫͷྔΛݮΒͨ͢ΊʹɺϑΝΠϧ͕ଟ͘ͳ͖ͬͯͨΒϑΝΠϧΛϚʔδͤ͞Δw $PNQBDUJPOStorage architecture of Badger
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFAdd: (muni, 30)Storage architecture of BadgerL WAlice 10Bob 20Level 1L WCarol 30Level 0 (Mem Table)
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFAdd: (muni, 30)Storage architecture of BadgerL WAlice 10Bob 20Level 1L WCarol 30muni 30Level 0 (Mem Table)
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFAdd: (muni, 30)Storage architecture of BadgerL WAlice 10Bob 20Level 1L WLevel 0 (Mem Table)L WCarol 10muni 20
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFSet: (Alice, 20)Storage architecture of BadgerL WAlice 10Bob 20Level 1L WLevel 0 (Mem Table)L WCarol 10muni 20
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFSet: (Alice, 20) ... will remove (Alice, 10) when mergeStorage architecture of BadgerL WAlice 10Bob 20Level 1L WAlice 20Level 0 (Mem Table)L WCarol 10muni 20
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFAdd: (mike, 50)Storage architecture of BadgerL WAlice 10Bob 20Level 1L WAlice 20Level 0 (Mem Table)L WCarol 10muni 20
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFAdd: (mike, 50)Storage architecture of BadgerL WAlice 10Bob 20Level 1L WAlice 20mike 50Level 0 (Mem Table)L WCarol 10muni 20
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFAdd: (mike, 50)Storage architecture of BadgerL WAlice 20mike 50Level 1L WLevel 0 (Mem Table)L WCarol 10muni 20Bob 20Level 2
©2018 Wantedly, Inc.-PH4USVDUVSFE.FSHF5SFFw Կ͕خ͍͠ʁw 8SJUF͕ΔͷϚʔδͷλΠϛϯά͚ͩw 8"-ॻ͍͍ͯΔ͚Ͳɺ࣮σʔλʹൺΕίετw ಡΈࠐΉͱ͖Ϩϕϧ͔Βॱʹߦ͏ͷͰɺஞ࣍σʔλΛߋ৽͢Δඞཁ͕ͳ͍w ϑΝΠϧͷ͚ͩγʔΫ͢ΕΑ͍w ϑΝΠϧʹͲͷ,FZؚ͕·Ε͍ͯΔͷ͔֬ೝ͢ΔͨΊͷ#MPPN'JMUFS͕͋Δw #MPPN'JMUFS͕GBMTFΛฦͨ͠߹ͦͷϑΝΠϧʹ,FZඞͣଘࡏ͠ͳ͍Storage architecture of Badger
©2018 Wantedly, Inc."$*%5SBOTBDUJPOw ࣮.VMUJ7FSTJPO$PODVSSFODZ$POUSPMw 3FBEͨ͠ͱ͖ɺߦʹUJNFTUBNQΛ༩͢Δw ผͷτϥϯβΫγϣϯͰಉ͡ߦʹະίϛοτͷมߋ͕ͬͨw มߋϝϞϦʹରͯ͠ߦͳΘΕɺଞͷτϥϯβΫγϣϯ͔Βݟ͑ͳ͍w ίϛοτͯ͠ߦͷ࣮σʔλͷUJNFTUBNQΛߋ৽w τϥϯβΫγϣϯͰҰճ3FBEͨ͠ߦΛ͏Ұࢀরw طʹUJNFTUBNQ͕༩͞Ε͍ͯΔͷͰલͷΛฦ͢ACID Transaction of Badger
©2018 Wantedly, Inc.%HSBQIͷεέʔϦϯά
©2018 Wantedly, Inc.%HSBQIΛߏ͢Δίϯϙʔωϯτw [FSPw Ϋϥελͷཧϊʔυw (SPVQʢޙड़ʣͷཧw όοΫΞοϓγϟοτμϯͱ໋͍ͬͨྩΛ(SPVQʹൖͤ͞Δw TFSWFSw σʔλετΞɺΫΤϦͷ࣮ߦϊʔυw ̍ͭͷ(SPVQʹඞͣଐ͢Δ%HSBQIͷεέʔϦϯά
©2018 Wantedly, Inc.(SPVQw Ҏ্ͷTFSWFSʹΑͬͯߏ͞ΕΔw ಉ͡(SPVQʹଐ͢Δશͯͷϊʔυಉ͡σʔλΛ࣋ͭw 3BGUͷ2VPSVNw γϟʔσΟϯάͷ୯Ґw (SPVQʹׂΓͯΒΕΔσʔλ1SFEJDBUFຖʹܾ·Δw ͭ·ΓGSJFOEʹؔ͢Δσʔλશͯಉ͡(SPVQͰཧ͞ΕΔw Ͳͷ1SFEJDBUFΛड͚͔࣋ͭ[FSPʹΑܾͬͯఆ͞ΕΔ%HSBQIͷεέʔϦϯά
©2018 Wantedly, Inc.w ͭͳ͕ΓΛอଘ͢ΔσʔλετΞͱͯ͠ άϥϑσʔλϕʔεΛ࠾༻w %HSBQIطଘͷάϥϑσʔλϕʔε๊͕͍͑ͯͨΛղܾ͍ͯ͠Δw ॻ͖ࠐΈͷύϑΥʔϚϯεw ਫฏεέʔϦϯά·ͱΊ