Slide 1

Slide 1 text

େن໛αʔϏεٕज़ೖ໳ ୈ5ճ ISUCONରࡦษڧձ 2017/8/11

Slide 2

Slide 2 text

ୈ5ճ େن໛σʔλॲཧ[࣮ફ]ೖ໳ - ΞϓϦέʔγϣϯ։ൃͷצॴ -

Slide 3

Slide 3 text

େن໛σʔλॲཧΞϓϦέʔγϣϯͷ
 ߟ͑ํͱରࡦ • ࠓ·Ͱ͸, େྔͷσʔλ͕͋ͬͯ΋ϋʔυ΢Σ Ξͷߏ੒Λݟ௚͢ʢہॴੑΛ׆͔͢ʣ͜ͱͰ ͳΜͱ͔৐Γ੾Ζ͏ͱ͍͏ߟ͑. • Ͳ͏ͯ͠΋େྔͷσʔλʹΞΫηε͠ͳ͍ͱ ͍͚ͳ͍ͱ͖ͷରࡦΛߟ͑Δ.

Slide 4

Slide 4 text

େن໛σʔλॲཧΞϓϦέʔγϣϯͷ
 ߟ͑ํͱରࡦ • ຊ೔ͷ಺༰ • Lesson14
 ༻్ಛԽܕΠϯσΫγϯά • Lesson15
 ཧ࿦ͱ࣮ફͷ྆ଆ͔Β߈ΊΔ

Slide 5

Slide 5 text

Lesson14 ༻్ಛԽܕΠϯσΫγϯά

Slide 6

Slide 6 text

ΠϯσοΫεͱγεςϜߏ੒ • େن໛σʔλΛѻ͏ྫ • શจݕࡧ • ྨࣅจॻܥ୳ࡧ • σʔλϚΠχϯά

Slide 7

Slide 7 text

ΠϯσοΫεͱγεςϜߏ੒ • ઌఔڍ͛ͨγεςϜͰ͸RDBMSͰ͸͠ΜͲ͍ • ͳΒRDBMSΛ࢖Θͳ͚Ε͹͍͍͡Όͳ͍ • શ͘RDBMSΛ࢖Θͳ͍ͱ͍͏࿩Ͱ͸ͳ͍

Slide 8

Slide 8 text

ΠϯσοΫεͱγεςϜߏ੒ • σʔλ͸RDBMSʹอଘ͓ͯ͘͠ • ͦͷσʔλΛఆظతʹநग़͠, ผ్ΠϯσοΫ εαʔόͷΑ͏ͳ΋ͷΛ࡞Δ • ͦ͜ʹWebΞϓϦ͔ΒRPCͳͲͰΞΫηε͢ Δํ๏Λ࢖͏

Slide 9

Slide 9 text

ʲ෮शʳRDBMS • Relational DataBase Management System • ؔ܎σʔλϕʔεΛӡ༻͢ΔͨΊͷιϑτ΢Σ Ξͷू߹ମ • MySQL, PostgreSQL, SQLite, etc…

Slide 10

Slide 10 text

ʲ෮शʳRPC • Remote Procedure Call • ωοτϫʔΫʹ઀ଓ͞Εͨଞͷίϯϐϡʔλ ্ͷϓϩάϥϜΛ࣮ߦ͢Δ • ͦͷ݁ՌΛडऔΔ

Slide 11

Slide 11 text

ΠϯσοΫεͱγεςϜߏ੒ ΠϯσοΫε αʔό ᶃఆظతʹ σʔλΛநग़ cron job NPE@QFSM
 "1TFSWFS ᶄΠϯσοΫεΛ࡞Δ ᶅRPCͰΞΫηε ᶆσʔλऔಘ

Slide 12

Slide 12 text

ΠϯσοΫεͱγεςϜߏ੒2 ΠϯσοΫε αʔό ᶃఆظతʹ σʔλΛநग़ cron job NPE@QFSM
 "1TFSWFS ᶄΠϯσοΫεΛ࡞Δ ᶅRPCͰΞΫηε ᶇσʔλऔಘ httpd ᶆݕࡧͯ͠JSON Λฦ͢ΞϓϦ

Slide 13

Slide 13 text

ͳͥAPαʔόʹΠϯσοΫεΛ ࣋ͨͤͳ͍ͷ͔ • ઌ΄Ͳͷਤͷmod_perlͷ෦෼ • े෼ͳϝϞϦ͕ͳ͍ • ΞʔΩςΫνϟతʹେྔͷσʔλΛ୳͢Α͏ ͳ΋ͷʹ޲͍͍ͯͳ͍

Slide 14

Slide 14 text

ͳͥAPαʔόʹΠϯσοΫεΛ ࣋ͨͤͳ͍ͷ͔ • APαʔόશͯʹΠϯσοΫεΛ΋ͨͤΔͷ΋ େมʢࠓޙ૿͑ΔՄೳੑ͕͋Δʣ • ΠϯσοΫεαʔόʹू໿ͯ͠؅ཧ͢Δ

Slide 15

Slide 15 text

RPCͬͯ஌ͬͯΔʁ • ͔ͭͯ͸RPCΛ࢖ͬͯΠϯσοΫεαʔό͔Β ݁ՌΛऔಘ͍ͯͨ͠.ʢࠓ΋͋Δʣ • ࠓͰ͸JSON+HTTP͕ओྲྀ • զʑ΋ೃછΈ͕ਂ͍

Slide 16

Slide 16 text

༻్ಛԽܕͷΠϯσΫγϯά • ࠓ·Ͱ঺հͨ͠ߏ੒͸ʮ༻్ಛԽܕΠϯσΫ γϯάʯͱݺ͹Ε͍ͯΔ • ͜ΕʹΑͬͯ, RDBMSͰ͸೉͔ͬͨ͜͠ͱ͕ ࣮ݱՄೳʹʂ

Slide 17

Slide 17 text

༻్ಛԽܕͷΠϯσΫγϯά • RDBMS͸൚༻తʹ࢖͑ΔΑ͏༷ʑͳػೳ͕උ Θ͍ͬͯΔ • ౷ܭॲཧ, ݁߹, ιʔτ • ཉ͍͠ػೳ͚ͩʹಛԽʢνϡʔχϯάʣ͢Δ ͨΊૣ͘ͳΔ

Slide 18

Slide 18 text

༻్ಛԽܕͷΠϯσΫγϯά • σʔλΛఆظతʹॻ͖ग़ͯ͠ΠϯσοΫεʢσʔλ ߏ଄ʣΛߏங͢Δ • ߏ଄Խͨ͠σʔλΛอ࣋ͨ͠αʔόΛC++Ͱ࡞Γ, RPCͰΞΫηε͢ΔͳͲ • ThriftͬͯͷͰଟݴޠRPC͕Մೳʹ • ௐ΂ͯΈΔͱݕࡧΤϯδϯܥͰΑ͋͘Δߏ੒ͬΆ͍

Slide 19

Slide 19 text

ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ

Slide 20

Slide 20 text

ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • ΩʔϫʔυϦϯΫΛੜ੒͢ΔॲཧΛߟ͑Δ Լઢ෦෼͕ϦϯΫ

Slide 21

Slide 21 text

ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • Ωʔϫʔυͷ਺͕20ສϫʔυڧ͋Δ • ͜ΕΛ͍͍ͪͪൺֱ͍ͯ͘͠ͱաෛՙʹͳͬ ͯDBαʔό͕མͪͯ͠·͏ • Ͳ͏ͨ͠Β͍͍ͩΖ͏͔ʁ

Slide 22

Slide 22 text

ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • લʹ΍ͬͨΑ͏ʹ, όονॲཧͰΩʔϫʔυΛ ͢΂ͯऔΓग़͓ͯ͘͠ • ͔ͭͯ͸ڊେͳਖ਼نදݱΛ༻͍ͯνΣοΫ͠ ͍ͯͨ • OR৚݅ʹΑΓόοΫτϥοΫ͕ͨ͘͞Μൃ ੜͯ͠஗͘ͳͬͨ

Slide 23

Slide 23 text

ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • ݱࡏ͸Common Prefix Searchʢڞ௨઀಄ࣙݕࡧʣͱ Trie໦Λ࢖ͬͯϚονϯά͍ͯ͠Δ • Common Prefix Searchʹ͸, Aho-Corasick๏ʢΤΠ ϗʔίϥγοΫʣ΍Double Array TrieͳͲ • ࣗવݴޠॲཧാͩͱԦಓͳํ๏Β͍͠ • Aho-Corasick͸ؤுͬͯௐ΂͍ͯͩ͘͞

Slide 24

Slide 24 text

Trie໦ͱ͸ • Ωʔू߹Λѻ͏ͨΊͷσʔλߏ଄ͷҰछ • ࠓճͷΑ͏ͳ୯ޠͷू߹ͱ͔ • ݕࡧαΠζ͕໦ͷେ͖͞Ͱ͸ͳ͘୯ޠͷ௕͞ ʹґଘ͢Δ • ऩ࿥݅਺ʹґଘ͠ͳ͍

Slide 25

Slide 25 text

Trie໦ͱ͸ t e a n o i n n w e keys: tea, ten, to, i, in, inn, we

Slide 26

Slide 26 text

ʲྫʳ͸ͯͳΩʔϫʔυʹΑΔϦϯΫ • ঺հͨ͠Α͏ͳσʔλߏ଄Λ༧Ίߏங͓ͯ͠ ͘͜ͱͰߴ଎Խग़དྷΔ • 7ճͰৄ͘͠આ໌

Slide 27

Slide 27 text

ʲྫʳ͸ͯͳϒοΫϚʔΫͷ ςΩετ෼ྨث

Slide 28

Slide 28 text

ʲྫʳ͸ͯͳϒοΫϚʔΫͷ ςΩετ෼ྨث • ͸ͯͳϒοΫϚʔΫͷΧςΰϦࣗಈ෼ྨ͸, Complement Naive Bayesͱ͍͏ΞϧΰϦζϜ Λ࢖ͬͯػցֶशΛߦ͍෼ྨ͍ͯ͠Δ. • ৄ͘͠͸ׂѪ͢Δ͕, ग़ݱස౓ΛසൟʹٻΊΔ ͜ͱʹͳΔͷͰ, ͦΕ͚ͩΛฦ͢αʔό͕ଘࡏ ͍ͯ͠Δ

Slide 29

Slide 29 text

Lesson15 ཧ࿦ͱ࣮ફͷ྆ํ͔ΒऔΓ૊Ή

Slide 30

Slide 30 text

ٻΊΒΕΔٕज़తͳཁ݅ΛݟۃΊΔ • ཧ࿦ • ίϨΛ͜ͷ༷ʹ͢Δͱಈ͘Αͱ͍ͬͨΑ͏ͳ ஌ࣝ • ࣮ફ • ࣮ࡍʹखΛಈ͔ͨ͠Γӡ༻্͍ͯ͘͠Ͱඞཁ ʹͳͬͯ͘Δϊ΢ϋ΢

Slide 31

Slide 31 text

େن໛ΞϓϦʹ͓͚Δཧ࿦ͱ࣮ફ • ཧ࿦ͱ࣮ફΛόϥϯεྑ͘΍Βͳ͍ͱμϝ • ͲͪΒ͔Ұํ͚ͩʹภͬͯ͸͍͚ͳ͍ • ཧ࿦͚ͩ஌͍ͬͯͯ΋͍࣮͟૷ग़དྷΔ͔ͱ͍͏ͱ, ࣮ ૷ͷͨΊͷόουϊ΢ϋ΢͕… • ࣮ફΛ͜ͳ͍ͯͯ͠΋, Θ͔Βͳ͍͜ͱʢ஌ࣝෆ଍ʣ ΋Ͱͯ͘Δ

Slide 32

Slide 32 text

ܭࢉػͷ໰୊ͱͯ͠ಓےΛݟ͚ͭΔ • ઌͷΩʔϫʔυΛݟ͚ͭΔॲཧͰ͸, Double array Trieͱ͍͏࿩͕ग़͖ͯͨ • ͜ͷΑ͏ͳΞϧΰϦζϜΛ஌͍ͬͯΔ͔஌Β ͳ͍͔Ͱେ͖͘มΘͬͯ͘Δ • ʲ࠶ܝʳΞϧΰϦζϜ͸େࣄ

Slide 33

Slide 33 text

2ճ͔Β5ճ·Ͱͷখ·ͱΊ

Slide 34

Slide 34 text

ୈ2ճʙୈ5ճͷখ·ͱΊ 1. ΪΨόΠτ୯Ґͷσʔλॲཧ
 ςϥ, ϖλόΠτͷσʔλΛѻ͏ʹ͸Ͳ͏͢Δ͔. 2. ϝϞϦॏཁ
 ϝϞϦʹࡌΔͳΒϝϞϦʹ. Ωϟογϡ͕ฉ͖΍͍͢ߏ੒ʹ͢Δ. 3. ෼ࢄΛҙࣝͨ͠ӡ༻
 ద੾ͳεΩʔϚͷઃఆ, ύʔςΟγϣχϯά, JOINΛආ͚Δ. 4. ద੾ͳΞϧΰϦζϜͱσʔλߏ଄
 Trie໦, Double Array Trie, Common Prefix Search