Slide 1

Slide 1 text

PostgreSQLͰֶͿ ϦϨʔγϣφϧσʔλϞσϧͱͦͷ࣮૷ Twitter: @a_suenami Github: a-suenami id: a_suenami

Slide 2

Slide 2 text

໔੹ࣄ߲ • ຊൃදͷ಺༰͸ࢲݸਓͷݟղͰ͋Γɺॴଐ͢Δ૊৫ɾஂମͷݟղΛ ඞͣ͠΋൓өͨ͠΋ͷͰ͸͋Γ·ͤΜɻྃ͝ঝ͍ͩ͘͞ɻ

Slide 3

Slide 3 text

ࣗݾ঺հ • ຤ฒ ߊʢ͑͢ͳΈ ͖͋Βʣ • @a_suenami • ޷͖ͳ΋ͷ͸ RDB ͱ͔ΦϒδΣΫτࢦ޲ͱ͔ TDD ͱ͔ɻ • ࠷ۙ͸౶࣭ܯ࡯ͱͯ͠׆ಈதɻ

Slide 4

Slide 4 text

࢓ࣄ ঁͷࢠͷ͔Θ͍͍Λ࡞ͬͯ·͢ɻ

Slide 5

Slide 5 text

ຊൃදͷ໨త • PostgreSQL Λ͸͡Ίͱ͢ΔϦϨʔγϣφϧσʔλϕʔεʢ RDB ʣ ͷࠜװΛ੒͢ϦϨʔγϣφϧσʔλϞσϧʹ͍ͭͯཧղͯ͠΋Β͏ɻ • RDB ΍ͦΕʹର͢Δ໰͍߹Θͤݴޠͱͯ͠ͷ SQL ͸ϦϨʔγϣφϧ σʔλϞσϧΛϕʔεʹ͠ͳ͕Β΋ɺͦΕҎ্ʹศརʹ࢖͏ͨΊʹଟ ͘ͷ௥Ճ࣮૷͕͋Δ͜ͱΛཧղͯ͠΋Β͏ɻ • PostgreSQL ΛྫʹͱͬͯɺϦϨʔγϣφϧσʔλϞσϧ͓ΑͼͦΕ Ҏ֎ͷ࣮૷ʹ͍ͭͯ஌ͬͯ΋Β͏͜ͱɻ

Slide 6

Slide 6 text

·ͣ͸ࠓ೔͜ͷձ৔ʹ Ͳ͏͍͏ਓ͕͍Δͷ͔஌Γ͍ͨͰ͢

Slide 7

Slide 7 text

ֶੜͷਓ ϊϊϊ

Slide 8

Slide 8 text

ʢݚڀ΍ۀ຿Ͱʣ গͳ͘ͱ΋ͻͱͭҎ্ͷRDBMS ੡඼Λ ࢖ͬͨܦݧ͕͋Δਓ ϊϊϊ

Slide 9

Slide 9 text

ϦϨʔγϣφϧσʔλϞσϧͬͯ Կ͔஌ͬͯΔਓ ϊϊϊ

Slide 10

Slide 10 text

͋Γ͕ͱ͏͍͟͝·͢ɻ ࢀߟʹ͠·͢ɻ

Slide 11

Slide 11 text

ϦϨʔγϣφϧσʔλϞσϧ

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

ϦϨʔγϣφϧσʔλϞσϧͷجૅ • ͋Δ෺ࣄʹؔ͢Δࣄ࣮ͷू߹ʢ=ϦϨʔγϣϯʣΛѻ͏σʔλϞσ ϧɻ • ϦϨʔγϣϯ ≠ ϦϨʔγϣϯγοϓ • ϦϨʔγϣϯʢؔ܎ʣͱ͸ɺRDB ʹ͓͚Δςʔϒϧؒͷؔ܎ʢࢀ রɺ֎෦ΩʔʣͰ͸ͳ͘ɺςʔϒϧ಺ͷΧϥϜؒͷؔ܎ɺͭ·Γςʔ ϒϧͦͷ΋ͷͷ͜ͱͰ͋Δɻ

Slide 14

Slide 14 text

ೋ߲ؔ܎ͱड़ޠ࿦ཧͱϦϨʔγϣϯ • ͋Δ 2 ͭͷू߹ͷཁૉ x, y ͷ૊Έ߹Θ͕ͤ͋Δ৚݅ R Λຬͨ͢৔߹ɺʮx ͱ y ͸ R ͷؔ܎ʹ͋Δʯͱ͍͍ɺ͜ͷ૊Έ߹Θͤͷू߹Λೋ߲ؔ܎ͱ͍͏ɻ • ྫ: x + y = 3 ͱͳΔΑ͏ͳࣗવ਺ͷू߹ • (0, 3), (1, 2), (2, 1), (3, 0) • ϦϨʔγϣφϧσʔλϞσϧ͸͜ΕΛ n ߲ʹ֦ுͨ͠΋ͷͰ͋Δɻ • ͕ͨͬͯ͠ɺϦϨʔγϣϯͷ֤ཁૉ͸ n ࣍ݩ্ۭؒͷ͋Δ࠲ඪΛද͢͜ͱʹ ͳΔɻ • ॏෳ͸ͳ͍ɻ • ॱং΋ͳ͍ɻ

Slide 15

Slide 15 text

ؔ܎ԋࢉ • ੍ݶʢ Restrict ʣ • ࣹӨʢ Project ʣ • ࿨ʢ Union ʣ • ੵʢ Intersect ʣ • ௚ੵʢ Product ʣ • ݁߹ʢ Join ʣ

Slide 16

Slide 16 text

੍ݶ ձһ൪߸ ੏ ໊ ೥ྸ ຤ฒ ߊ ࢁా ଠ࿠ ాத Ֆࢠ ࠤ౻ ୓໵ ձһ൪߸ ੏ ໊ ೥ྸ ຤ฒ ߊ ࠤ౻ ୓໵

Slide 17

Slide 17 text

ࣹӨ ձһ൪߸ ੏ ໊ ೥ྸ ຤ฒ ߊ ࢁా ଠ࿠ ాத Ֆࢠ ࠤ౻ ୓໵ ձһ൪߸ ੏ ໊ ຤ฒ ߊ ࢁా ଠ࿠ ాத Ֆࢠ ࠤ౻ ୓໵

Slide 18

Slide 18 text

࿨ ձһ൪߸ ੏ ໊ ೥ྸ ຤ฒ ߊ ࢁా ଠ࿠ ాத Ֆࢠ ࠤ౻ ୓໵ ձһ൪߸ ੏ ໊ ೥ྸ ླ໦ Ұ࿠ ߴڮ ࿨ࢠ ձһ൪߸ ੏ ໊ ೥ྸ ຤ฒ ߊ ࢁా ଠ࿠ ాத Ֆࢠ ࠤ౻ ୓໵ ླ໦ Ұ࿠ ߴڮ ࿨ࢠ

Slide 19

Slide 19 text

݁߹ ձһ൪߸ ੏ ໊ ೥ྸ ౎ಓ෎ݝ ຤ฒ ߊ େ෼ ࢁా ଠ࿠ ࢁޱ ాத Ֆࢠ ࢁޱ ࠤ౻ ୓໵ ޿ౡ ౎ಓ෎ݝ ݝிॴࡏ஍ ๺ւಓ ࡳຈ ࢁޱ ࢁޱ େ෼ େ෼ ձһ൪߸ ੏ ໊ ೥ྸ ౎ಓ෎ݝ ݝிॴࡏ஍ ຤ฒ ߊ େ෼ େ෼ ࢁా ଠ࿠ ࢁޱ ࢁޱ ాத Ֆࢠ ࢁޱ ࢁޱ ࠤ౻ ୓໵ ޿ౡ ޿ౡ

Slide 20

Slide 20 text

ੵ • ݁߹ͷಛघͳέʔεɻ • ͢΂ͯͷଐੑ͕׬શʹҰக͢Δ৔߹ɻ ੏ ໊ ຤ฒ ߊ ࢁా ଠ࿠ ాத Ֆࢠ ࠤ౻ ୓໵ ੏ ໊ ຤ฒ ߊ ాத Ֆࢠ ੏ ໊ ຤ฒ ߊ ాத Ֆࢠ

Slide 21

Slide 21 text

௚ੵ • ݁߹ͷಛघͳέʔεɻ • Ұக͢Δଐੑ͕ͻͱͭ΋ͳ͍৔߹ɻ ੏ ໊ ຤ฒ ߊ ࢁా ଠ࿠ εΩϧ 1PTUHSF42- .Z42- ੏ ໊ εΩϧ ຤ฒ ߊ 1PTUHSF42- ຤ฒ ߊ .Z42- ࢁా ଠ࿠ 1PTUHSF42- ࢁా ଠ࿠ .Z42-

Slide 22

Slide 22 text

SQL ͱͷରԠ ؔ܎ԋࢉ 42- ੍ݶ 8)&3& ࣹӨ 4&-&$5 ࿨ 6/*0/ ݁߹ +0*/

Slide 23

Slide 23 text

ϦϨʔγϣφϧσʔλϞσϧͱ ਖ਼نԽཧ࿦

Slide 24

Slide 24 text

Կނਖ਼نԽ͕ඞཁ͔ • σʔλ͕ϦϨʔγϣϯͰදݱ͞Ε͍ͯΕ͹ؔ܎ԋࢉΛߦͳ͏͜ͱ͸ ՄೳͰ͋Δɻ • ͨͩ͠ɺͦΕ͸σʔλͷ੔߹ੑΛอূͯ͘͠ΕΔ͜ͱΛҙຯ͢ΔΘ ͚Ͱ͸ͳ͍ɻ • ʮԋࢉ͕ՄೳͰ͋Δʯ͜ͱͱʮԋࢉ݁Ռ͕ଥ౰Ͱ͋Δ͜ͱ͕อূ͞ ΕΔʯ͜ͱ͸ҟͳΔɻ • ਖ਼نԽ͸σʔλͷ੔߹ੑΛҡ࣋͢Δ্Ͱඞཁͳཧ࿦Ͱ͋Δɻ

Slide 25

Slide 25 text

ਖ਼نԽͷछྨ • ୈ̍ਖ਼نܗ • ୈ̎ਖ਼نܗ • ୈ̏ਖ਼نܗ • ϘΠείουਖ਼نܗ • ୈ̐ਖ਼نܗ • ୈ̑ਖ਼نܗ • ୈ̒ਖ਼نܗ

Slide 26

Slide 26 text

༻ޠ঺հ • ީิΩʔ • ϦϨʔγϣϯͷཁૉΛҰҙʹಛఆͰ͖Δଐੑͷू߹ͰɺͦΕҎ্ཁૉΛݮΒ͢͜ͱ͕Ͱ ͖ͳ͍΋ͷɻ • εʔύʔΩʔ • ީิΩʔͷεʔύʔηοτɻ • ͢΂ͯͷଐੑΛؚΉू߹͸ৗʹεʔύʔΩʔͰ͋Δɻ • ؔ਺ैଐੑ • ϦϨʔγϣϯͷཁૉͷ͋Δଐੑ a ͕ఆ·ͬͨΒผͷଐੑ b ΋ఆ·Δ৔߹ɺb ͸ a ʹؔ਺ ैଐ͢Δͱ͍͏ɻ • ݁߹ैଐੑ • ςʔϒϧΛ݁߹ͨ͠৔߹ʹݩʹ໭ΔΑ͏ʹແଛࣦ෼ղͰ͖Δ͜ͱɻ

Slide 27

Slide 27 text

ୈ̍ਖ਼نܗ • σʔλ͕ϦϨʔγϣϯͰදݱ͞Ε͍ͯΔ͜ͱɻ • ٯʹݴ͏ͱඇਖ਼نܗͷσʔλ͸ͦ΋ͦ΋ϦϨʔγϣφϧσʔλϞσ ϧʹैͬͯͳ͍ͱ͍͏͜ͱʹͳΔɻ • ΧϯϚ۠੾Γจࣈྻɺ഑ྻɺJSON ౳ͷσʔλ͸ؔ܎ԋࢉͰѻ͑ͳ ͍ͷͰ͜͏͍ͬͨσʔλ͕ഉআ͞Εͨঢ়ଶ͕ୈ1ਖ਼نܗͰ͋Δɻ

Slide 28

Slide 28 text

ୈ̎ਖ਼نܗ • ީิΩʔͷҰ෦͔ΒඇΩʔଐੑ΁ͷؔ਺ैଐ͕ഉআ͞Εͨঢ়ଶɻ • ୯ҰଐੑͷީิΩʔ͔͠ଘࡏ͠ͳ͍৔߹ʹ͸ࣗಈతʹୈ2ਖ਼نܗͱ ͳΔɻ ੏ ໊ ೥ྸ ॻ੶ ຤ฒ ߊ σʔλϕʔε࣮ફೖ໳ ຤ฒ ߊ 42-Ξϯνύλʔϯ ຤ฒ ߊ υϝΠϯۦಈઃܭ ࢁా ଠ࿠ σʔλϕʔε࣮ફೖ໳ ੏ ໊ ೥ྸ ຤ฒ ߊ ࢁా ଠ࿠ ੏ ໊ ॻ੶ ຤ฒ ߊ σʔλϕʔε࣮ફೖ໳ ຤ฒ ߊ 42-Ξϯνύλʔϯ ຤ฒ ߊ υϝΠϯۦಈઃܭ ࢁా ଠ࿠ σʔλϕʔε࣮ફೖ໳

Slide 29

Slide 29 text

ୈ̏ਖ਼نܗ • ඇΩʔଐੑͷਪҠؔ਺ैଐ͕ഉআ͞Εͨঢ়ଶɻ ੏ ໊ ೥ྸ ౎ಓ෎ݝ ݝிॴࡏ஍ ຤ฒ ߊ େ෼ େ෼ ࢁా ଠ࿠ ࢁޱ ࢁޱ ాத Ֆࢠ ࢁޱ ࢁޱ ࠤ౻ ୓໵ ޿ౡ ޿ౡ ੏ ໊ ೥ྸ ౎ಓ෎ݝ ຤ฒ ߊ େ෼ ࢁా ଠ࿠ ࢁޱ ాத Ֆࢠ ࢁޱ ࠤ౻ ୓໵ ޿ౡ ౎ಓ෎ݝ ݝிॴࡏ஍ ๺ւಓ ࡳຈ ࢁޱ ࢁޱ େ෼ େ෼

Slide 30

Slide 30 text

ϘΠείουਖ਼نܗ • ඇΩʔଐੑ͔ΒީิΩʔʹର͢Δؔ਺ैଐੑΛഉআͨ͠΋ͷɻ • ΄ͱΜͲͷ৔߹ʹ͓͍ͯୈ̏ਖ਼نܗͱಉ͡ʹͳΔ͕ɺީิΩʔ͕ෳ ਺ଘࡏ͢Δ৔߹ʹ͸ୈ̏ਖ਼نܗͰ͸͋Δ͕ϘΠείουਖ਼نܗͰ͸ ͳ͍͜ͱ͕ى͜Γ͏Δɻ ੏ ໊ ϓϩδΣΫτ Ϛωʔδϟʔ ຤ฒ ߊ 999 ҏ౻ ຤ฒ ߊ ::: தଜ ࢁా ଠ࿠ 999 খྛ ࢁా ଠ࿠ ;;; ࢁຊ Ϛωʔδϟʔ ϓϩδΣΫτ ҏ౻ 999 தଜ ::: খྛ 999 ࢁຊ ;;; ੏ ໊ Ϛωʔδϟʔ ຤ฒ ߊ ҏ౻ ຤ฒ ߊ தଜ ࢁా ଠ࿠ খྛ ࢁా ଠ࿠ ࢁຊ

Slide 31

Slide 31 text

ୈ4ਖ਼نܗ • Ұ෦ͷ݁߹ैଐੑʢଟ஋ैଐੑʣΛഉআͨ͠ঢ়ଶɻ • ୈ̐ਖ਼نܗͱୈ̑ਖ਼نܗ͸ީิΩʔͷΈͰߏ੒͞ΕΔϦϨʔγϣϯ ͷΈ͕ਖ਼نԽͷର৅ͱͳΔɻ ঎඼໊ ৭ αΠζ ϫϯϐʔε ന 4 ϫϯϐʔε ന . ϫϯϐʔε ϐϯΫ 4 ϫϯϐʔε ϐϯΫ . εΧʔτ ࠇ 4 εΧʔτ ࠇ . εΧʔτ ࠇ - εΧʔτ ന 4 εΧʔτ ന . εΧʔτ ന - ๧ࢠ ੨ . ঎඼໊ αΠζ ϫϯϐʔε 4 ϫϯϐʔε . εΧʔτ 4 εΧʔτ . εΧʔτ - ๧ࢠ . ঎඼໊ ৭ ϫϯϐʔε ന ϫϯϐʔε ϐϯΫ εΧʔτ ࠇ εΧʔτ ന ๧ࢠ ੨

Slide 32

Slide 32 text

ୈ5ਖ਼نܗ • ͢΂ͯͷ݁߹ैଐੑΛഉআͨ͠ঢ়ଶɻ • ࣄ্࣮ɺਖ਼نܗͷ࠷ऴஈ֊Ͱ͋Δɻ • ୈ̒ਖ਼نܗ΋ଘࡏ͸͢Δ͕࣮ࡍʹ͸͋·Γҙຯ͕ͳ͍ɻ

Slide 33

Slide 33 text

ୈ4ਖ਼نܗ / ୈ5ਖ਼نܗ • ݁߹ैଐੑΛഉআͨ͠ঢ়ଶɻ • ީิΩʔͷΈͰߏ੒͞ΕΔϦϨʔγϣϯͷ৔߹ʹ͸͜ΕΒͷਖ਼نԽ Λͨ͠΄͏͕Α͍৔߹΋͋Δɻ

Slide 34

Slide 34 text

ਖ਼نԽ͠ͳ͍ͱ͍͏બ୒ࢶ • ͦ΋ͦ΋ϦϨʔγϣφϧσʔλϞσϧͱ૬ੑ͕ѱ͍σʔλͷ৔߹͸ඞ ͣ͠΋ਖ਼نԽΛ͢Δඞཁ͸ͳ͍ɻ • ৔߹ʹΑͬͯ͸ͦ΋ͦ΋ҧ͏ΞʔΩςΫνϟΛݕ౼ͨ͠΄͏͕Α͍ɻ • ཤྺσʔλ • ໦ߏ଄σʔλ • άϥϑσʔλ • ෳࡶͳॱং෇͖Ϧετ

Slide 35

Slide 35 text

PostgreSQL ʹ͓͚Δ࣮૷

Slide 36

Slide 36 text

ϦϨʔγϣφϧσʔλϞσϧʹ͸ͳ͍͕SQLʹ͋Δ΋ͷ • NULL • ॱংɾฒͼସ͑ • τϥϯβΫγϣϯ • ΠϯσοΫε

Slide 37

Slide 37 text

PostgreSQL ͷ࣮૷ • JOIN • ΠϯσοΫε • τϥϯβΫγϣϯ

Slide 38

Slide 38 text

݁߹ͷ࣮૷ • ωεςουϧʔϓ݁߹ • Ϛʔδ݁߹ • ϋογϡ݁߹

Slide 39

Slide 39 text

ωεςουϧʔϓ݁߹

Slide 40

Slide 40 text

Ϛʔδ݁߹

Slide 41

Slide 41 text

ϋογϡ݁߹

Slide 42

Slide 42 text

ΠϯσοΫε ͷ࣮૷ • B-Tree ΠϯσοΫε • B-Tree ߏ଄Λ࣋ͭ൚༻తʹ༻͍ΒΕΔΠϯσοΫεɻ • ϋογϡΠϯσοΫε • ΠϯσοΫεΛϋογϡςʔϒϧͰอ࣋͢Δɻ • ݱࡏ͸ඇਪ঑ɻ • GIN ΠϯσοΫε • શจݕࡧ༻్ʹ༻͍ΔΠϯσοΫεɻ • GiST ΠϯσοΫε • ۭؒ৘ใ޲͚ͷΠϯσοΫεɻ

Slide 43

Slide 43 text

B-Tree ͷߏ଄

Slide 44

Slide 44 text

τϥϯβΫγϣϯ • ϦϨʔγϣφϧσʔλϞσϧͱਖ਼نԽཧ࿦͸σʔλͷ੔߹ੑΛอͭ ͨΊʹ༗ޮͰ͋Δ͕ɺෳ਺ͷؔ܎ԋࢉΛΞτϛοΫʹ࣮ࢪ͠ͳ͍ͱ σʔλ੔߹ੑ͕յΕΔέʔεͰ͸τϥϯβΫγϣϯͷ֓೦͕ඞਢʹ ͳΔɻ • τϥϯβΫγϣϯ͸ϦϨʔγϣφϧσʔλϞσϧʹ͓͚Δ֓೦Ͱ͸ ͳ͍͕ RDB ʹ͸ඞਢͷ࢓૊ΈͰ͋Δɻ

Slide 45

Slide 45 text

τϥϯβΫγϣϯ෼཭Ϩϕϧ • Read Uncommitted • τϥϯβΫγϣϯ෼཭Ϩϕϧ͕࠷΋௿͘ɺμʔςΟϦʔυʢଞͷτϥϯβΫγϣϯ ͕ॻ͖ࠐΜͰ·ͩίϛοτ͍ͯ͠ͳ͍σʔλΛಡΉʣ͕ൃੜ͢ΔՄೳੑ͕͋Δɻ • Read Committed • ଞͷτϥϯβΫγϣϯ͕ίϛοτͨ͠σʔλΛࢀর͢Δ͕൓෮ಡΈࠐΈͷՄೳੑ͸ ͋Δɻ • Repeatable Read • ಉҰτϥϯβΫγϣϯ಺ͰԿ౓ಉ͡σʔλΛࢀরͯ͠΋಺༰͸มΘΒͣɺ൓෮ಡΈ औΓʹରͯ҆͠શʹͳΔɻ • Serializable • τϥϯβΫγϣϯ͕௚ྻʹฒͼଞͷ͢΂ͯͷτϥϯβΫγϣϯ͔Β෼཭͞ΕΔɻ

Slide 46

Slide 46 text

·ͱΊ • RDB Λ࢖͏ͨΊʹ͸ϦϨʔγϣφϧσʔλϞσϧΛ͖ͪΜͱཧղ͢ Δඞཁ͕͋Δɻ • ϦϨʔγϣφϧσʔλϞσϧͷݶքΛ஌ΓɺϦϨʔγϣφϧσʔ λϞσϧ͕ۤखͱ͢Δ෦෼͸ผͷΞʔΩςΫνϟͰઃܭΛ͢Δɻ • RDB ͕࣮ࡍʹͲͷΑ͏ʹ࣮૷͞Ε͍ͯΔ͔Λཧղ͠ɺద੾ʹઃܭΛ ͢Δɻ

Slide 47

Slide 47 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠