๐Ÿ›ข๏ธDatabase

๋‹จ๊ณ„๋ณ„๋กœ ์„ฑ์žฅํ•˜์ž!
ํšŒ์‚ฌ์—์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ตœ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‹คํ–‰ ๊ณ„ํš๊ณผ ์‹ค์ œ ์ตœ์ ์˜ ์‹คํ–‰ ๊ณ„ํš์€ ์ข…์ข… ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.์ด๋•Œ, ๋‚ด๊ฐ€ ์ง„ํ–‰ํ–ˆ๋˜ ๊ฐœ์„  ๋ฐฉํ–ฅ์€ ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ ์ธ๋ฑ์Šค๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ฐœ์„  ๊ฐ€๋Šฅํ•œ๊ฐ€?์ธ๋ฑ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐœ์„  ๊ฐ€๋Šฅํ•œ๊ฐ€? 1๋ฒˆ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์€ SQL์— ์•ก์„ธ์Šค ๋ฐฉ์‹์ด๋‚˜ ์กฐ์ธ ์ˆœ์„œ, ์กฐ์ธ ๋ฐฉ์‹ ๋Œ€ํ•œ Hint๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐœ์„ ์„ ์ง„ํ–‰ํ–ˆ๊ณ ,1๋ฒˆ์œผ๋กœ ํ•ด๊ฒฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ฆ‰, 2๋ฒˆ์˜ ๊ฒฝ์šฐ์—๋Š” ์ธ๋ฑ์Šค์˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ ์ปฌ๋Ÿผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ํ•ด๋‹น ๊ธ€์—์„œ๋Š” 1๋ฒˆ์˜ ์ผ€์ด์Šค์— ์ ์šฉํ•œ ์˜ตํ‹ฐ๋งˆ์ด์ € ํžŒํŠธ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค. ์˜ตํ‹ฐ๋งˆ์ด์ € Hint์˜ค๋ธŒ์ ํŠธ ํ†ต๊ณ„์™€ ์‹œ์Šคํ…œ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ตœ์ ์˜ ํ”„๋กœ์‹œ์ €๋ฅผ ๋งŒ๋“œ๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €..
ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋˜ ์ค‘, ์†๋„๊ฐ€ ๋Š๋ฆฐ ์ฟผ๋ฆฌ๋“ค์„ ์‹คํ–‰๊ณ„ํš์„ ๋ถ„์„ํ•˜์—ฌ ์ถ”์ถœํ•œ ๊ฒฝํ—˜์ด ์žˆ๋‹ค.์‹คํ–‰๊ณ„ํš์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์˜ฌ๋ฐ”๋ฅธ ์ธ๋ฑ์Šค๋ฅผ ํƒ€๊ณ  ์žˆ๋Š”์ง€, Cost๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ๋†’์€์ง€ ๋“ฑ์„ ํ™•์ธํ–ˆ๋‹ค. ํ•ด๋‹น ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ  Cost๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ณ„์‚ฐ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•˜์—ฌ ์ฐพ์•„๋ณธ ๊ฒƒ์„ ์—ฌ๊ธฐ์— ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.์˜ตํ‹ฐ๋งˆ์ด์ €์˜ ํ†ต๊ณ„ ์ •๋ณด์˜ ๊ฒฝ์šฐ ๊ฐ๊ฐ์„ ์™ธ์šฐ๊ธฐ๋ณด๋‹ค๋Š” ์‹คํ–‰๊ณ„ํš์—์„œ์˜ Cost๊ฐ€ ์–ด๋– ํ•œ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ๋œ ๊ฒƒ์ธ์ง€ ์ฐธ๊ณ ํ•˜๋Š” ์ •๋„๋กœ ๋Ÿฌํ”„ํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์„ ํƒ๋„์™€ ์นด๋””๋„๋ฆฌํ‹ฐ์šฐ์„ , ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ ํƒ๋„์™€ ํ•จ๊ป˜ ์•Œ์•„๋ณด์ž. 1.  ์„ ํƒ๋„ (Selectivity)๋ฐ์ดํ„ฐ์—์„œ ํŠน์ • ๊ฐ’์„ ์–ผ๋งˆ๋‚˜ ์ž˜ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ง€ํ‘œ์ด๋‹ค.์„ ํƒ๋„๋Š” ๋‚ฎ์„์ˆ˜๋ก ์ธ๋ฑ์Šค ์„ค์ •์— ์ข‹์€ ์ปฌ๋Ÿผ์ด๋‹ค.์„ ํƒ๋„ ..
์ตœ๊ทผ ํ”„๋กœ์ ํŠธ์—์„œ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” ์—ฌ๋Ÿฌ DB์— ๋Œ€ํ•ด 2 Phase Commit์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ฒจ ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.์„ค๋ช…์„ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ, ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ์–˜๊ธฐํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค.๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์€ ๊ธ€๋กœ๋ฒŒ ํŠธ๋žœ์žญ์…˜์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ํ†ตํ•ฉ๋˜์–ด ๊ด€๋ฆฌ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜ ๋ฌถ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.์ด๋•Œ, 1๏ธโƒฃ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋˜๋Š” ํŠธ๋žœ์žญ์…˜์€ ์„œ๋กœ ๋™์ผํ•œ DB์— ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๊ณ , 2๏ธโƒฃ ์„œ๋กœ ๋‹ค๋ฅธ DB์— ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.XA Datasource์™€ 2 Phase Commit ์ด๋ž€?XA๋Š” 2 Phase Commit์„ ํ†ตํ•œ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด X/Open์—์„œ ์ •์˜ํ•œ ํ‘œ์ค€์ด๋‹ค.๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ๊ฐ์˜ DB์—๋Š” ํ•˜๋‚˜์˜ XA Datasource๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด XA Datasource๊ฐ€ XA C..
MySQL์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Isolation Level)์ด๋ž€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์ฒ˜๋ฆฌ๋  ๋•Œ ํŠน์ • ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ํฌ๊ฒŒ 4๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค. Read UNCOMMITTED Read COMMITTED REPEATABLE READ SERIALIZABLE 1๋ฒˆ๋ถ€ํ„ฐ 4๋ฒˆ๊นŒ์ง€ ๋’ค๋กœ ๊ฐˆ์ˆ˜๋ก ๊ฐ ํŠธ๋žœ์žญ์…˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ฒฉ๋ฆฌ(๊ณ ๋ฆฝ) ์ •๋„๊ฐ€ ๋†’์•„์ง€๋ฉฐ, ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ๋„ ์ผ๋ฐ˜์ ์œผ๋กœ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์•„์งˆ์ˆ˜๋ก MySQL ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋งŽ์ด ๋–จ์–ด์งˆ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค SERIALIZABLE ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ๋ฉด ํฌ๊ฒŒ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋Š” ์•Š์œผ๋‹ˆ ์•ˆ์‹ฌํ•ด๋„ ๋œ๋‹ค. ํ•˜๋‚˜ ํŠน๋ณ„ํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค..
JOIN์ด ์–ด๋–ป๊ฒŒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ ํŒจํ„ด๋ณ„๋กœ ์•Œ์•„๋ณด๊ณ  ์ฃผ์˜์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. JOIN์˜ ์ˆœ์„œ์™€ ์ธ๋ฑ์Šค ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”์€ ์ธ๋ฑ์Šค๋ฅผ ํƒ์ƒ‰(Seek)ํ•˜๋Š” ๋‹จ๊ณ„์™€ ์ธ๋ฑ์Šค๋ฅผ ์Šค์บ”(Scan)ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ฟผ๋ฆฌํ•˜๋Š” ์ž‘์—…์—์„œ๋Š” ๊ฐ€์ ธ์˜ค๋Š” ๋ ˆ์ฝ”๋“œ์˜ ๊ฑด์ˆ˜๊ฐ€ ์†Œ๋Ÿ‰์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค ์Šค์บ” ์ž‘์—…์€ ๋ถ€ํ•˜๊ฐ€ ์ž‘์ง€๋งŒ ํŠน์ • ์ธ๋ฑ์Šค ํ‚ค๋ฅผ ์ฐพ๋Š” ์ธ๋ฑ์Šค ํƒ์ƒ‰ ์ž‘์—…์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ถ€ํ•˜๊ฐ€ ๋†’๋‹ค. ์กฐ์ธ ์ž‘์—…์—์„œ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”์„ ์ฝ์„ ๋•Œ๋Š” ์ธ๋ฑ์Šค ํƒ์ƒ‰ ์ž‘์—…์„ ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ทธ ์ดํ›„๋ถ€ํ„ฐ๋Š” ์Šค์บ”๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์—์„œ๋Š” ์ธ๋ฑ์Šค ํƒ์ƒ‰ ์ž‘์—…๊ณผ ์Šค์บ” ์ž‘์—…์„ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”์—์„œ ์ฝ์€ ๋ ˆ์ฝ”๋“œ ๊ฑด์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค. ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”๊ณผ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์ด 1:1..
1. Redis Temporary Location For Speed ๋ฐ์ดํ„ฐ์˜ ์›๋ž˜ ์†Œ์Šค๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ž„์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์บ์‹œ๋ฅผ ์ด์šฉํ•œ๋‹ค. ๋‹น์—ฐํžˆ ์†๋„๋ฅผ ๋†’์ด๋ ค๋ฉด ์›๋ณธ์— ์ ‘๊ทผํ•˜๋Š”๊ฒƒ๋ณด๋‹ค ์บ์‹œ์— ์ ‘๊ทผํ•˜๋Š”๊ฒŒ ๋นจ๋ผ์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ์˜ ๋ฐ˜๋ณต์  ์•ก์„ธ์Šค๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์œ ๋ฆฌํ•˜๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค. ๋‹จ์ˆœํ•œ key-value ๊ตฌ์กฐ In-memory ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ (RAM) ๋น ๋ฅธ ์„ฑ๋Šฅ ํ‰๊ท  ์ž‘์—…์†๋„ < 1ms ์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์˜ ์ž‘์—… ๊ฐ€๋Šฅ ์ด์™ธ์—๋„ ์ตœ์‹  ๋ฒ„์ „์˜ Redis๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ PUB/SUB ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. Redis๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ ๊ณต๊ฐ„์— ์ œ์•ฝ..
DevPoong
'๐Ÿ›ข๏ธDatabase' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก