๐๏ธ[Medium] Postgres vs MySQL
๊ฐ๋จํ ๋งํด, ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฃผ์ํ ์ฐจ์ด์ ์ ๊ธฐ๋ณธ ์ธ๋ฑ์ค์ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์์ฝ๋ฉ๋๋ค. ์ด์ ๋ํด ๋ ์ดํด๋ณด๊ฒ ์ต๋๋ค.ย MySQL ๊ธฐ๋ณธ ์ธ๋ฑ์ค์์ ๊ฐ์ ๋ชจ๋ ์์ฑ์ ํฌํจํ ์ ์ฒด ํ ๊ฐ์ฒด์ ๋๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ ์ธ๋ฑ์ค๋ฅผ ํด๋ฌ์คํฐํ ์ธ๋ฑ์ค(clustered indexes) ๋๋ ์ธ๋ฑ์ค-์กฐ์งํ ํ ์ด๋ธ(index-organized table)์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ฆ, ๊ธฐ๋ณธ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ๋๋ค. ย ๊ธฐ๋ณธ ์ธ๋ฑ์ค์์ ํค๋ฅผ ์กฐํํ๋ฉด ํค๊ฐ ์กด์ฌํ๋ ํ์ด์ง์ ํด๋น ํค์ ๊ฐ(์ฆ, ์ ์ฒด ํ)์ ์ฐพ์ ์ ์์ด ์ถ๊ฐ ์ด์ ๊ฐ์ ธ์ค๊ธฐ ์ํ ์ถ๊ฐ I/O๊ฐ ํ์ํ์ง ์์ต๋๋ค. ย ๋ณด์กฐ ์ธ๋ฑ์ค์์๋ ํค๊ฐ ์ธ๋ฑ์ฑ๋ ์ด(๋ค)์ด๊ณ ๊ฐ์ ์ค์ ํ์ด ์์นํ ๊ณณ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๋๋ค. ๋ณด์กฐ ์ธ๋ฑ์ค ๋ฆฌํ ํ์ด์ง์ ๊ฐ์ ์ฃผ๋ก ๊ธฐ๋ณธ ํค์ ๋๋ค. ย MySQL์์๋ ๋ชจ๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ์ธ๋ฑ์ค๊ฐ ์์ด์ผ ํ๋ฉฐ, ๋ชจ๋ ์ถ๊ฐ ๋ณด์กฐ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ ํค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. MySQL ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ฅผ ์์ฑํ์ง ์์ผ๋ฉด ์์คํ ์ด ์ด๋ฅผ ์์ฑํฉ๋๋ค PostgreSQL PostgreSQL์์๋ ๊ธฐ๋ณธ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉฐ, ๋ชจ๋ ์ธ๋ฑ์ค๋ ๋ณด์กฐ ์ธ๋ฑ์ค์ด๊ณ ์์คํ ์ด ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ ํ์ด์ง์ ํํ ID๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ํ์ ๋ก๋๋ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ ์ธ๋ฑ์ค ๋ฆฌํ ํ์ด์ง์ ๋ฌ๋ฆฌ ์ ๋ ฌ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ํ์ 1-100๊น์ง ์ฝ์ ํ๊ณ ๋ชจ๋ ํ์ด ๋์ผํ ํ์ด์ง์ ์์ ๋, ๋์ค์ 120๋ฒ ํ์ ์ ๋ฐ์ดํธํ๋ฉด ์ด 20๊ฐ์ ํ์ด ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํด ์์๊ฐ ๋ค๋ฐ๋ ์ ์์ต๋๋ค. ๋ฐ๋ฉด ํด๋ฌ์คํฐํ ๊ธฐ๋ณธ ์ธ๋ฑ์ค์์๋ ํค์ ์์๋ฅผ ๋ง์กฑํ๋ ํ์ด์ง๋ก ์ฝ์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋์ PostgreSQL ํ ์ด๋ธ์ "ํ ์กฐ์งํ ํ ์ด๋ธ(heap organized tables)"๋ก ์์ฃผ ๋ถ๋ฆฝ๋๋ค. ย PostgreSQL์์๋ ์ ๋ฐ์ดํธ์ ์ญ์ ๊ฐ ์ค์ ๋ก ์ฝ์ ์ ๋๋ค. ๋ชจ๋ ์ ๋ฐ์ดํธ๋ ์ญ์ ๋ ์๋ก์ด ํํ ID๋ฅผ ์์ฑํ๊ณ , MVCC(Multi-Version Concurrency Control) ์ด์ ๋ก ๊ธฐ์กด ํํ ID๋ ์ ์ง๋ฉ๋๋ค. Processes vs Threads MySQL์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์ฌ๋ฌ ์ด์ ๋ก ํจ์จ์ ์ผ ์ ์์ต๋๋ค: * ๊ฒฝ๋์ฑ: ์ค๋ ๋๋ ํ๋ก์ธ์ค๋ณด๋ค ๊ฐ๋ฒผ์์ ์์คํ ์์์ ๋ ์ฌ์ฉํฉ๋๋ค. * ๋ฉ๋ชจ๋ฆฌ ๊ณต์ : ์ค๋ ๋๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ณต์ ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ์ฑ์ด ๋์ต๋๋ค. * ์ปจํ ์คํธ ์ค์์นญ: ์ค๋ ๋ ๊ฐ์ ์ปจํ ์คํธ ์ค์์นญ์ TLB(Translation Look-aside Buffer)๋ฅผ ๋ฌดํจํํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋น ๋ฆ ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ด ๋์ผํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ๋ ํจ์จ์ ์ ๋๋ค. PostgreSQL์ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์ค๋ ๋ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์๊ณผ ๋น๊ตํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ฅ๋จ์ ์ด ์์ต๋๋ค: * ๋ ๋ฆฝ์ฑ: ๊ฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๋ฏ๋ก ํ๋์ ํ๋ก์ธ์ค๊ฐ ํฌ๋์ํ๋๋ผ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. * PCB vs. TCB: ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB)์ด ์ค๋ ๋ ์ ์ด ๋ธ๋ก(TCB)๋ณด๋ค ํฌ์ง๋ง, ์ด๋ ํ๋ก์ธ์ค๊ฐ ๋ ๋ฆฝ๋ ์์๊ณผ ํ๊ฒฝ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. Summary ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์ฅ๋จ์ ์ ์ดํดํ๊ณ , ์ฌ๋ฌ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์ ์ฟผ๋ฆฌ์ ๋ง๋ ์์คํ ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. MySQL์ ์ค๋ ๋ ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ฒผ์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๊ณผ ๋น ๋ฅธ ์ปจํ ์คํธ ์ค์์นญ์ ์ ๊ณตํ๋ ๋ฐ๋ฉด, PostgreSQL์ ํ๋ก์ธ์ค ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ๋ ๋์ ๋ ๋ฆฝ์ฑ๊ณผ ์์ ์ฑ์ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ ์ ํฉํ์ง๋ ์ฌ์ฉ์์ ํน์ ์๊ตฌ ์ฌํญ๊ณผ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ย ๊ฒฐ๋ก ์ ์ผ๋ก, ์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด ๋ ์ข๋ค๊ณ ๋จ์ ์ง์ ์๋ ์์ต๋๋ค. ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ์ ์ดํดํ๊ณ , ์ฌ๋ฌ๋ถ์ ํ์์ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฒ์ญ: [https://ducktopia.tistory.com/128] ์๋ฌธ: