ํํฐ์ ๋(๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ )
ํํฐ์ ๋์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๋ถํ ํ๋ ๊ฒ์ผ๋ก ํฐ ํ ์ด๋ธ์ด๋ ์ธ๋ฑ์ค๋ฅผ ์์ ‘ํํฐ์ ’ ๋จ์๋ก ๋๋์ด ๊ด๋ฆฌํ๋ ๊ธฐ๋ฒ์ ๋งํ๋ค. ์๋น์ค์ ํฌ๊ธฐ๊ฐ ์ ์ ์ปค์ง๊ณ DB์ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ค์ ๊ท๋ชจ ๋ํ ์ปค์ง๋ฉด์ ๊ธฐ์กด์ ์ฌ์ฉํ๋ DB์์คํ ์ ์ฉ๋๊ณผ ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ํํฐ์ ๋ ๊ธฐ๋ฒ์ด ๋ํ๋๊ฒ ๋์๋ค. ๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํฐ ๋ถํ ์ด ์๋๋ผ๋, DB์ ์ ๊ทผํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฅ์์๋ ์ด๋ฅผ ์ธ์ํ์ง ๋ชปํ๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ ํ ์ด๋ธ ๋จ์๋ก ์ด๋ค์ง๊ณ , ๋ฐ์ดํฐ ์ ์ฅ์ ํํฐ์ ๋ณ๋ก ์ํ๋๋ค.
ํํฐ์ ๋ ์ฅ์
์ฑ๋ฅ
๋ฐ์ดํฐ ์ ๊ทผ ์ ์ก์ธ์ค ๋ฒ์๋ฅผ ์ค์ฌ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ด ํฅ์๋๋ค.
ํํฐ์
๋ณ๋ก ๋ฐ์ดํฐ๊ฐ ๋ถ์ฐ๋์ด ์ ์ฅ๋๋ฏ๋ก ๋์คํฌ์ ์ฑ๋ฅ์ด ํฅ์๋๋ค.
ํํฐ์
๋ณ๋ก ๋ฐฑ์
๋ฐ ๋ณต๊ตฌ๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ค.
๊ฐ์ฉ์ฑ *์์คํ
์ด ์ ์์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์ ๋
ํํฐ์
๋์ผ๋ก ์ธํด ๋
ผ๋ฆฌ์ ์ธ ํ
์ด๋ธ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ํค๊ธฐ ๋๋ฌธ์ ์ ์ฒด ๋ฐ์ดํฐ์ ํผ์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ ๋ค.
ํํฐ์
๋จ์๋ก ์
์ถ๋ ฅ์ ๋ถ์ฐ์์ผ ์
๋ฐ์ดํธ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
๊ด๋ฆฌ์ฉ ์ด์ฑ
ํฐ ํ
์ด๋ธ์ ์์ ํ
์ด๋ธ๋ค๋ก ์ชผ๊ฐ๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ค.
ํํฐ์ ๋ ๋จ์
ํ ์ด๋ธ์ ์ฌ๋ฌ ํํฐ์ (ํ ์ด๋ธ)์ผ๋ก ์ชผ๊ฐ๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ ๊ฐ์ Join ๋น์ฉ์ด ์ฆ๊ฐํ๋ค. ๋ํ ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค๋ฅผ ๋ณ๋๋ก ํํฐ์ ๋ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ด ํํฐ์ ๋ ํด์ผ ํ๋ค. ๋ํ ์ฉ๋์ด ์์ ํ ์ด๋ธ์ ํํฐ์ ๋์ ์ํํ๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋๋ค.
ํํฐ์ ๋ ์ข ๋ฅ
์ํ ํํฐ์ ๋
์ํ ํํฐ์ ๋์ด๋ ์คํค๋ง๋ฅผ ๋ณต์ ํ ํ ๋ถํ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๋๋ ๊ฒ์ ๋งํ๋ค. ์ฆ, ํ๋์ ํ ์ด๋ธ์ ๊ฐ ํ์ ๋ค๋ฅธ ํ ์ด๋ธ๋ก ๋ถ์ฐ์ํค๋ ๊ฒ์ด๋ค. ์ํ ํํฐ์ ๋์ ์ฑ๋ฅ, ๊ฐ์ฉ์ฑ์ ์ํด ๋ถํ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฌ ํ ์ด๋ธ๋ก ๋ถ์ฐ ์ ์ฅํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋งํ๋ ํํฐ์ ๋์ ์ํ ๋ถํ ์ ์๋ฏธํ๋ค.
๐ก ์ค๋ฉ
๊ฐ์ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถ์ฐํ์ฌ ์ ์ฅํ๋ ๊ธฐ๋ฒ. ์ํ ํํฐ์ ๋๊ณผ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋๊ณค ํ์ง๋ง ์ฝ๊ฐ ๋ค๋ฅธ๋ฐ, ์ํ ํํฐ์ ๋์ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์ ๋ถ์ฐ ์ ์ฅํ๋ ๊ฒ์ ๋งํ๊ณ ์ค๋ฉ์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถ์ฐ ์ ์ฅํ๋ ๊ฒ์ ๋งํ๋ค. (๊ฐ์ DB๋ด์์ ๋ถ์ฐ ์ ์ฅ vs ๋ค๋ฅธ DB์ ๋ถ์ฐ ์ ์ฅ)
์์ง ํํฐ์ ๋
์์ง ํํฐ์ ๋์ด๋ ํ ์ด๋ธ์ ์ผ๋ถ ์ด์ ๋นผ๋ด๋ ํํ๋ก ๋ถํ ํ๋ ๊ธฐ๋ฒ์ ๋งํ๋ค. ์คํค๋ง๋ฅผ ๊ทธ๋๋ก ๋ณต์ ํ๋ ์ํ ํํฐ์ ๋๊ณผ ๋ค๋ฅด๊ฒ ์์ง ํํฐ์ ๋์ ์คํค๋ง๋ฅผ ๋๋๊ณ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ผ ์ฎ๊ฒจ๊ฐ๋ค. ์ 3 ์ ๊ทํ๊ณผ ๋น์ทํ ๊ฐ๋ ์ด์ง๋ง ์์ง ํํฐ์ ๋์ ์ด๋ฏธ ์ ๊ทํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ณผ์ ์ด๋ค.
*์ 3 ์ ๊ทํ
https://cladren123.tistory.com/123
https://jhnyang.tistory.com/360
ํํฐ์ ๋์ ๋ถํ ๊ธฐ์ค(๋ถํ ๋ฐฉ๋ฒ)
DBMS๋ ๋ถํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ ์ ์งํํ๋ฉฐ, ๋ถํ ์ ๋ํด ๊ฐ์ข ๋ถํ ๊ธฐ๋ฒ(๊ธฐ์ค)์ ์ ๊ณตํ๊ณ ์๋ค.
๋ฒ์ ๋ถํ (Range Partitioning) BY RANGE
๋ถํ ํค์ ๊ฐ์ด ์ง์ ํ ๋ฒ์ ๋ด์ ์๋์ง์ ๋ฐ๋ผ ๊ตฌ๋ถํ๋ ๋ฐฉ์์ด๋ค. ๋ณดํต ๋ ์ง๋ฅผ ๋ถํ ํค๋ก ๋ง์ด ์ฌ์ฉํ๋๋ฐ, ์ด๋ ๋์ฉ๋ ํ
์ด๋ธ์ ์ฐ๋ ๋ณ(์ ๋ณ, ์ผ ๋ณ)๋ก ๋๋์ด ํ
์ด๋ธ์ ๋ถ๋ฆฌํ ์ ์๋ค. ์๋์ ์์์์๋ ‘์
ํ ์ฐ๋’๊ฐ ๋ถํ ํค๊ฐ ๋๊ณ , ๋ฒ์๋ฅผ 2018๋
์ด์ ๊ณผ ์ดํ๋ก ์ง์ ํ์๋ค. ๋ฐ๋ผ์ ํํฐ์
A์๋ 2018๋
๋ ์ด์ ์ ๋ฐ์ดํฐ๋ค๋ง ์ ์ฅ๋๊ณ , ๋๋จธ์ง 2018๋
๋ ์ดํ์ ๋ฐ์ดํฐ๋ค์ ํํฐ์
B์ ์ ์ฅ๋๋ค.
-- ํ
์ด๋ธ ์์ฑ(ํํฐ์
๋)--
CREATE TABLE students (
id INT NOT NULL,
name VARCHAR(45) NULL,
department VARCHAR(45) NULL,
entrance DATE NOT NULL
)
PARTITION BY RANGE(YEAR(entrance)) (
PARTITION A VALUES LESS THAN (2018),
PARTITION B VALUES LESS THAN (2023)
);
-- ๋ฐ์ดํฐ ์ฝ์
--
INSERT INTO `studuent_db`.`students` (`id`, `name`, `department`, `entrance`)
VALUES (1, '๊ฐ๊ธธ๋', '์ปดํจํฐ๊ณตํ๊ณผ', date('2017-3-2'));
INSERT INTO `studuent_db`.`students` (`id`, `name`, `department`, `entrance`)
VALUES (2, '๋๊ธธ๋', '์ปดํจํฐ๊ณตํ๊ณผ', date('2018-3-2'));
INSERT INTO `studuent_db`.`students` (`id`, `name`, `department`, `entrance`)
VALUES (3, '๋ค๊ธธ๋', '์ ์๊ณผ', date('2014-3-2'));
INSERT INTO `studuent_db`.`students` (`id`, `name`, `department`, `entrance`)
VALUES (4, '๋ผ๊ธธ๋', '๊ฑด์ถํ๊ณผ', date('2014-3-2'));
INSERT INTO `studuent_db`.`students` (`id`, `name`, `department`, `entrance`)
VALUES (5, '๋ง๊ธธ๋', '์๋ํ๊ณผ', date('2020-3-2'));
INSERT INTO `studuent_db`.`students` (`id`, `name`, `department`, `entrance`)
VALUES (6, '๋ฐ๊ธธ๋', 'ํํ๊ณผ', date('2022-3-2'));
-- ํํฐ์
๋ณ ๋ฐ์ดํฐ ์กฐํ --
SELECT * FROM students PARTITION(A);
SELECT * FROM students PARTITION(B);
๋ชฉ๋ก ๋ถํ (List Partitioning) BY LIST IN
ํน์ ์นผ๋ผ์ ๊ฐ ๋ชฉ๋ก์ ๊ธฐ์ค์ผ๋ก ๋ถํ ์ ํ๋ ๋ฐฉ์์ด๋ค. ๋ฒ์ ๋ถํ ๊ณผ ๋ค๋ฅด๊ฒ ๋ถ์ฐ์์ ์ธ ๊ฐ ๋ชฉ๋ก๋ค์ ๊ฐ ํํฐ์
์ผ๋ก ์ง์ ํ ์ ์๋ค. ์๋์ ํ์ ํ
์ด๋ธ์ ์์๋ก ๋ค๋ฉด ์์ธ, ๊ฒฝ๊ธฐ, ์ธ์ฒ์ ํ๋์ ํํฐ์
์ผ๋ก ๋ฌถ์ด ์๋๊ถ์ผ๋ก ๊ตฌ๋ถํ ์ ์๊ณ ๋๊ตฌ, ์ธ์ฐ, ๋ถ์ฐ์ ํ๋์ ํํฐ์
์ผ๋ก ๋ฌถ์ด ๊ฒฝ์๊ถ ํ
์ด๋ธ๋ก ์ ์ฅํ ์ ์๋ค.
-- ํ
์ด๋ธ ์์ฑ(ํํฐ์
๋)
CREATE TABLE `students` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
`department` VARCHAR(45) NULL,
`addr` INT NOT NULL // ๋ฆฌ์คํธ ํํฐ์
๋ ๋ถํ ํค -> int (5.5๋ฒ์ ๋ถํฐ๋ ๋ฌธ์์ด ๊ฐ๋ฅ)
)
PARTITION BY LIST (addr) (
PARTITION A VALUES IN(0, 1, 2),
PARTITION B VALUES IN(3, 4, 5)
);
-- ๋ฐ์ดํฐ ์ฝ์
INSERT INTO students (id, name, department, addr)
VALUES (1, '๊ฐ๊ธธ๋', '์ปดํจํฐ๊ณตํ๊ณผ', 0),
(2, '๋๊ธธ๋', '์ปดํจํฐ๊ณตํ๊ณผ', 1),
(3, '๋ค๊ธธ๋', '์ ์๊ณผ', 3),
(4, '๋ผ๊ธธ๋', '๊ฑด์ถํ๊ณผ', 1),
(5, '๋ง๊ธธ๋', '์๋ํ๊ณผ', 5),
(6, '๋ฐ๊ธธ๋', 'ํํ๊ณผ', 2);
-- ํํฐ์
๋ณ ์กฐํ
SELECT * FROM studuent_db.students PARTITION(A);
SELECT * FROM studuent_db.students PARTITION(B);
ํด์ ๋ถํ (Hash Partitioning) BY HASH
ํด์ ํจ์์ ๊ฒฐ๊ด๊ฐ์ ๋ฐ๋ผ ํํฐ์
์ ๋ถํ ํ๋ค. ์๋ฅผ ๋ค์ด 3๊ฐ์ ํํฐ์
์ผ๋ก ๋ถํ ํ๋ ๊ฒฝ์ฐ ํด์ ํจ์๋ 0์์ 2๊น์ง 3๊ฐ์ ์ ์๋ฅผ ๋ฐํ ๊ฐ์ผ๋ก ํ๋ค. ๋ฒ์ ๋ถํ ๊ณผ ๋ชฉ๋ก ๋ถํ ์์๋ ๋ถํ ํค๋ก ์ฌ์ฉ๋๋ ์นผ๋ผ์ ๊ฐ์ ๋ช
์์ ์ผ๋ก ์ง์ ํ์ง๋ง, ํด์ ๋ถํ ๊ธฐ๋ฒ์์๋ ํด์ํ ์นผ๋ผ๊ณผ ๋ถํ ๋ ํ
์ด๋ธ์ ์๋ง ์ ํ๋ฉด ๋๋ค. ์ด๋ ํน์ ๋ฐ์ดํฐ๊ฐ ์ด๋ ํํฐ์
์ ์๋์ง ์ ์ ์๊ฒ ํ๋ค. ๋ฒ์ ๋ถํ ์ด๋ ๋ชฉ๋ก ๋ถํ ๋ก ๊ณ ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
-- ํ
์ด๋ธ ์์ฑ(ํํฐ์
๋)
CREATE TABLE `students` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
`department` VARCHAR(45) NULL,
`addr` INT NOT NULL
)
PARTITION BY HASH (addr)
PARTITIONS 2;
-- ๋ฐ์ดํฐ ์ฝ์
INSERT INTO students (id, name, department, addr)
VALUES (1, '๊ฐ๊ธธ๋', '์ปดํจํฐ๊ณตํ๊ณผ', 0),
(2, '๋๊ธธ๋', '์ปดํจํฐ๊ณตํ๊ณผ', 1),
(3, '๋ค๊ธธ๋', '์ ์๊ณผ', 3),
(4, '๋ผ๊ธธ๋', '๊ฑด์ถํ๊ณผ', 1),
(5, '๋ง๊ธธ๋', '์๋ํ๊ณผ', 5),
(6, '๋ฐ๊ธธ๋', 'ํํ๊ณผ', 2);
-- ํํฐ์
๋ณ ์กฐํ
SELECT * FROM studuent_db.students PARTITION(p0);
SELECT * FROM studuent_db.students PARTITION(p1);
ํฉ์ฑ ๋ถํ (Composite Partitioning)
๊ฐ ํํฐ์
์ ์๋ธ ํํฐ์
์ ๊ตฌ์ฑํ๋ ๊ฒ์ผ๋ก ํํฐ์
๋์ด ํ์ฐจ๋ก ๋ ์งํ๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ๋ฒ์ ๋ถํ ์ ํ์ง๋ง ์ฌ์ ํ ํํฐ์
์ ํฌ๊ธฐ๊ฐ ํฐ ๊ฒฝ์ฐ ํด์ ๋ถํ ๋ก ๊ณ ๋ฅด๊ฒ ๋ค์ ๋ถํ ํ๋ ๊ธฐ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
'๐ CS > ๐ DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DB] ์ ๊ทํ ๊ณผ์ (1NF/2NF/3NF/BCNF) (0) | 2023.08.03 |
---|---|
[DB] Persistence Framework (SQL Mapper vs ORM) (6) | 2022.09.26 |
[DB] SQL (0) | 2022.09.01 |
[DB] ํธ๋์ญ์ (๊ฐ๋ /ํน์ฑ/์ฐ์ฐ/์ํ) (6) | 2022.08.22 |
[DB] ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ (0) | 2022.08.18 |