์๋ฌธ
๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ, ์ ์๊ธ์ต๊ฑฐ๋๋ฒ, ์๋ฃ๊ธฐ๋ก ๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ ๋ฑ ๊ฐ์ธ์ ๋ณด๋ฅผ ํฌํจํ ๋ฏผ๊ฐํ ์ ๋ณด์ ๋ณ๊ฒฝ์ฌํญ์ ๊ธฐ๋กํด์ผ ํ ์๋ฌด๋ฅผ ์๋น์ค ์ ๊ณต์์๊ฒ ๋ถ์ฌํ๋ ๊ท์ ์ ๋ฒ๋ น์ ๋๋ ์ด ๊ฐํ๋๊ณ ์์ต๋๋ค. ๋ฒ์์ ๋ช ์ํ๊ณ ์๋ ์๋ฌด ์ฌํญ ์ด์ธ์๋ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ๋ฐ ์ํ ํ์ง, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง ๋ฐ ์ฌ๊ณ ๋์๊ณผ ๊ฐ์ ์๋น์ค์ ์ ์ง๋ณด์ ๋ฐ ๋ณด์์ ์ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์ฌํญ ๊ธฐ๋ก์ ์ค์์ฑ์ ๊ฐ๋ฐ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์, ๋ณด์ ์ ๋ฌธ๊ฐ ๋ชจ๋์๊ฒ ๋ฌด์ํ ์ ์๋ ์ฌํญ์ ๋๋ค.
๋ง์ ์๋น์ค ์ ๊ณต์๋ค์ ์์ ๊ฐ์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๊ธฐ ์ํด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ์๋ณํ๊ณ ์ถ์ ํ๋ ๊ธฐ์ ์ธ CDC(Change Data Capture)๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ QueryPie์์๋ ์ญ์ CDC๋ฅผ ์ง์ํฉ๋๋ค. ์ด ๋ฐฑ์์์๋ QueryPie์์ ์ด๋ ํ ๋ฐฉ๋ฒ์ ํตํด ํธ๋์ญ์ ์์ด CDC ์์คํ ์ ๊ตฌํํ๋์ง์ ๋ํด ๋ค๋ฃน๋๋ค.
๋ฌธ์
ํธ๋์ญ์ ๊ธฐ๋ฐ CDC๊ฐ ๊ฐ์ง๋ ๋ฌธ์ ๋ค
CDC๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ ๋ ๋ณ๊ฒฝ ์ด์ ๋ฐ์ดํฐ์ ์ดํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ๋ค ์ค ํ๋๋ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธ๋์ญ์ ์ ํ์ฉํ๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ UPDATE ์ฟผ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ํตํด ๋ณ๊ฒฝ ์ ํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ ์ ์์ต๋๋ค.

๊ทธ๋ฌ๋ ํธ๋์ญ์ ์ ํตํด CDC๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ๋์ ํ ์ด๋ธ์ ๋ณ๊ฒฝ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ๋๋ง๋ค ํธ๋์ญ์ ์ ๋กค๋ฐฑ์ ์ํํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ํธ๋์ญ์ ์ ๋กค๋ฐฑ์ DBMS์ ๋ถํ๋ฅผ ๊ฐํ๊ฒ ๋๋ฉฐ, ๋์ ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ํฌ๋ฉด ํด์๋ก ๊ฐํด์ง๋ ๋ถํ๋ ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค. ๊ฒ๋ค๊ฐ ๋์ผํ ํ ์ด๋ธ์ ๋ํด ์ฟผ๋ฆฌ ์ํ ์ด์ , ์ดํ ์ด ๋ ๋ฒ์ ์ค๋ณต๋ ์กฐํ๋ฅผ ์ํํด์ผ ํ๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ํจ์จ์ฑ์ด ๋จ์ด์ง๋๋ค. ์ด์ธ์๋ NoSQL์ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ ๋ฏธ์ง์ํ๊ฑฐ๋, ์ง์ํ๋๋ผ๋ ์ฝํ ๋ ๋ฒจ์ ํธ๋์ญ์ ๋ง์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ๊ธฐ๋ฐ์ผ๋ก CDC๋ฅผ ๊ตฌํํ๊ฒ ๋ ๊ฒฝ์ฐ ์ง์์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค.
ํธ๋์ญ์ ์ ๋กค๋ฐฑ์ด ์ผ๋ง๋ ์ํฅ์ ๋ผ์น๋์ง๋ ๊ฐ๋จํ ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ํตํด ํ์ธํด๋ณผ ์ ์์ต๋๋ค. ํ ์คํธ ์๋๋ฆฌ์ค ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- MySQL 8.0 (on-premise, 8core(vcore 16), mem 256GB)
- 100,000๊ฐ์ ๋ ์ฝ๋
- ๋ค์๊ณผ ๊ฐ์ DDL์ ๊ฐ์ง๋ ํ
์ด๋ธ
actor - ๋คํธ์ํฌ ๋ณ๋ชฉ์ ๋ฌด์ํ ์ ๋๋ก ์ถฉ๋ถํ ๋น ๋ฅธ ๋คํธ์ํฌ ํ๊ฒฝ
CREATE TABLE actor (
actor_id int NOT NULL AUTO_INCREMENT,
first_name varchar(255) NOT NULL,
last_name varchar(255) NOT NULL,
last_update timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (actor_id)
);
ํด๋น ํ
์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋์ ๋ํด first_name์ ๋ชจ๋ 'Christopher'๋ผ๊ณ ๋ณ๊ฒฝํ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ง์ผ ํธ๋์ญ์
๋กค๋ฐฑ ๊ธฐ๋ฅ์ ํ์ฉํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ๋ ์ํํด์ผ ํฉ๋๋ค.
mysql> SET AUTOCOMMIT=0;
Query OK, 0 rows affected (0.06 sec)
mysql> SELECT * FROM actor;
...
100000 rows in set (0.42 sec)
mysql> UPDATE actor4 SET first_name='Christopher' WHERE 1;
Query OK, 100000 rows affected (1.54 sec)
Rows matched: 100000 Changed: 100000 Warnings: 0
mysql> ROLLBACK;
Query OK, 0 rows affected (0.85 sec)
mysql> UPDATE actor4 SET first_name='Christopher' WHERE 1;
Query OK, 100000 rows affected (1.58 sec)
Rows matched: 100000 Changed: 100000 Warnings: 0
mysql> COMMIT;
Query OK, 0 rows affected (0.04 sec)
๋์์ ์์ ์๊ฐ์ ํ ์ด๋ธ๋ก ๊ฐ์ํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ค์ ๋์์ ํ์ํ ํ ์ด๋ธ ์กฐํ์ ์ ๋ฐ์ดํธ ์ด์ธ์ CDC๋ฅผ ์ํด ์ถ๊ฐ๋ ๋์์ ๋ ธ๋์์ผ๋ก ๊ฐ์กฐ ํ์ํ์์ต๋๋ค.
| ๋์ | ์ํ ์๊ฐ |
|---|---|
| ํ ์ด๋ธ ์กฐํ | 0.42s |
| ํ ์ด๋ธ ์ ๋ฐ์ดํธ | 1.54s |
| ํธ๋์ญ์ ๋กค๋ฐฑ | 0.85s |
| ํ ์ด๋ธ ์ ๋ฐ์ดํธ | 1.58s |
| ํธ๋์ญ์ ์ปค๋ฐ | 0.04s |
| ์ด ์์ ์๊ฐ | 4.43s |
| ์ฌ์ฉ์ ์ฟผ๋ฆฌ ๋์์ ์ด ์์ ์๊ฐ | 2.04s |
| ์ถ๊ฐ๋ ๋์์ ์ด ์์ ์๊ฐ | 2.39s |
๋ณด์๋ ๋ฐ์ ๊ฐ์ด, ํธ๋์ญ์ ๋กค๋ฐฑ ๊ธฐ๋ฐ CDC์ ๊ฒฝ์ฐ ์ ๋ฐ์ดํธ์ ๋กค๋ฐฑ์ผ๋ก ์ธํด ๋ ๋ฐฐ ์ด์ ์๊ฐ์ด ์์๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ฆ, ์ฌ์ฉ์ ์ ์ฅ์์๋ CDC ์ฌ์ฉ์ผ๋ก ์ธํด 50%์ ์ฑ๋ฅ ์ ํ๋ฅผ ๊ฒฝํํ๊ฒ ๋ฉ๋๋ค.
๊ธฐํ CDC ๊ตฌํ์ด ๊ฐ์ง๋ ๋ฌธ์ ๋ค
์ด์ธ์๋ ํ ์ด๋ธ์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ถ์ ํ๊ฑฐ๋, ํ ์ด๋ธ์ modified_at ๋ฑ ๋ณ๊ฒฝ ์๊ฐ์ด๋ ํ์์คํฌํ๋ฅผ ๊ธฐ๋กํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ์กฐํํ๊ฑฐ๋, MySQL์ binlog์ ๊ฐ์ ๋ก๊ทธ ํ์ผ์ ํ์ฉํ์ฌ CDC๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ฐ ๊ตฌํ๋ง๋ค์ ์ฅ๋จ์ ์ด ์กด์ฌํ์ง๋ง, ๊ณตํต์ ์ผ๋ก๋ CDC์ ๋์์ ์ํด DBMS๋ฅผ ์์ ํด์ผ ํ๋ฏ๋ก CDC์ ๋์์ด DBMS์ ์ข ์๋๋ค๋ ๋จ์ ์ ๊ณต์ ํ๊ณ ์์ต๋๋ค. ์ฆ, ์๋ก์ด DBMS ์ธ์คํด์ค๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค ๊ด๋ จ๋ ์ค์ ์ ์ถ๊ฐํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ DBMS์ ๋ถํ๋ฅผ ๊ฐํ์ง ์๊ณ , DBMS ์ข ์์ฑ์ด ์๊ธฐ์ง ์์ผ๋ฉด์ ํจ๊ณผ์ ์ผ๋ก CDC๋ฅผ ๊ตฌํํ ์ ์์๊น์?
๋ชฉํ ์ค์
DBMS์ ๊ฐํ๋ ๋ถํ๋ฅผ ์ค์ด๋ ค๋ฉด, CDC ๊ตฌํ ์ ํธ๋์ญ์ ์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ๋์์ ๋์ผํ ํ ์ด๋ธ์ ๋ํ ์ค๋ณต๋ ์ฟผ๋ฆฌ๋ฅผ ์ํํ์ง ์์์ผ ํฉ๋๋ค. ๋ํ DBMS์์ ์ข ์์ฑ์ ๋ฐฉ์งํ๊ธฐ ์ํด CDC์ ๋์์ ์ํด DBMS๋ฅผ ์์ ํ์ง ์์์ผ ํฉ๋๋ค.
QueryPie์์๋ ์ด๋ฌํ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด, ์ฟผ๋ฆฌ ์ํ ์ดํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์กฐํํ๋ ๊ฒ์ด ์๋ ์ฌ๋ด ์ฟผ๋ฆฌ ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ QSI(Query Structure Interface)๋ฅผ ํ์ฉํ์ฌ ์ทจ๋ํฉ๋๋ค. ์ด๋ป๊ฒ ํ๋ฉด ํ ์ด๋ธ์ ์ง์ ํ์ธํ์ง ์๊ณ ๋ ์ฟผ๋ฆฌ ์ํ ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์์๊น์?
์๋ฃจ์ ๊ฐ์

QSI๋ ํ ์ด๋ธ์ ์ง์ ์กฐํํ๋ ๋์ , ์ฌ์ฉ์๊ฐ ์ง์ํ ์ฟผ๋ฆฌ์ ์ํ์ด ๊ฐ์ ธ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ๋ณ๊ฒฝ ์ ํ ์ด๋ธ ์กฐํ ๊ฒฐ๊ณผ์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ๋ณ๊ฒฝ ํ ํ ์ด๋ธ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํ๊ฒ ๋ฉ๋๋ค. ์ฆ, ์ฟผ๋ฆฌ์ ์ํ ๊ฒฐ๊ณผ ํ์ธ์ ๊ณผ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ํ๋ ๊ฒ์ด ์๋๋ผ, QSI ๋ด์์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ์ํํด๋ณด๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ฟผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ QueryPie์์๋ CDC๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ํธ๋์ญ์ ์ํ๊ณผ ๋กค๋ฐฑ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ๋ํ, ์ฟผ๋ฆฌ๋ง ์ํํ๋ฉด ๋๋ฏ๋ก ๋์์ ์ํ DBMS์ ์์ ๋ ์๊ตฌํ์ง ์์ผ๋ฉฐ, QueryPie ์ค์น ์ฆ์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ธฐ์ ์ ์ค๋ช ๋ฐ ์ํคํ ์ฒ

QueryPie์ ์น ์๋ํฐ๋ ํ๋ก์ ๋ฑ์ ํตํด QSI๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ INSERT, UPDATE, DELETE์ ๊ฐ์ด ํ ์ด๋ธ์ ๋ํ ๋ณ๊ฒฝ์ด ํฌํจ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ฅ์ผ๋ก ์ ๋ฌ๋ฐ๊ฒ ๋ฉ๋๋ค. ๋ถ์์ ์ํด์๋ ์ฟผ๋ฆฌ ์ํ ์ด์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฏ๋ก, QSI์์๋ ์ ๋ ฅ๊ฐ์ธ ์ฌ์ฉ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ถ์ํ์ฌ ์ค์ ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง ๋์ ํ ์ด๋ธ์ ํน์ ํ๊ณ , ๋ถ์๋ ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ๋์ ํ ์ด๋ธ์ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ์ดํ ์์ฑ๋ ์ฟผ๋ฆฌ๋ฅผ ํตํด ๋ณ๊ฒฝ ๋์ ํ ์ด๋ธ์ ๋ณ๊ฒฝ ์ํ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค.
์ด์ ์ฟผ๋ฆฌ ์ํ ๊ฒฐ๊ณผ ์๋ฎฌ๋ ์ด์ ์ ํ์ํ ๋์ ํ ์ด๋ธ์ ๋ณ๊ฒฝ ์ํ ์ด์ ๋ฐ์ดํฐ์ ์ฌ์ฉ์์ ์ ๋ ฅ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ๋ ํ๋ณดํ์ผ๋ฏ๋ก, ์๋ฎฌ๋ ์ด์ ์ ์ํํฉ๋๋ค. ์ฟผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ์์๋ ๋ณ๊ฒฝ๋๋ ๊ฐ์ ๋ํ ์ ๋ณด, ๋ณ๊ฒฝ์ด ์ด๋ค์ง๋ ํ์ ์กฐ๊ฑด์, ๋ณ๊ฒฝ ์ด์ ๋ฐ์ดํฐ์ ๋ด์ฉ, ์ ๋ ฅ ์ฟผ๋ฆฌ์ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ค์ํ ์์๋ค์ ๊ณ ๋ คํฉ๋๋ค. ์๋ฎฌ๋ ์ด์ ์ด ์ด๋ค์ง๊ณ ๋๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๊ฐ๊ณตํ๊ณ ์ ๋ฆฌํ์ฌ ๋ณ๊ฒฝ ์ดํ ๋ฐ์ดํฐ๋ก ์ ๊ณตํฉ๋๋ค. ์ดํ CDC์ ๊ฒฐ๊ณผ๋ csv ํฌ๋งท๋ก ๋ณํ๋์ด MySQL์ blob ํ์ ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
QueryPie CDC์ ์์
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ actor ํ
์ด๋ธ์ first_name์ด 'mason'์ธ ๋ชจ๋ ํ์ ๋ํด, last_name์ 'oh'๋ก ๋ณ๊ฒฝํ๋ ค๋ ์ํฉ์ ๊ฐ์ ํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฌ์ฉ์๋ ์ ์์
์ ์ํํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ QueryPie๋ฅผ ํตํด ์คํํฉ๋๋ค.
UPDATE actor SET last_name='oh' WHERE first_name='mason';
QueryPie์์๋ ์ ๊ตฌ๋ฌธ์ ์ ๋ ฅ๋ฐ๊ณ ์ด๋ฅผ QSI๋ก ์ ๋ฌํฉ๋๋ค. QSI์์๋ ์ ๋ ฅ๋ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ถ์ํ์ฌ, ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง๋ ๋์ ํ ์ด๋ธ์ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ์์ฑ๋ ์ฟผ๋ฆฌ๋ฅผ ์ํํ์ฌ ์ป์ ๊ฒฐ๊ณผ๋ฌผ์ CDC์ โ๋ณ๊ฒฝ ์ด์ ๋ฐ์ดํฐโ๋ก ์ฌ์ฉํฉ๋๋ค. ์์ฑ๋ ์ฟผ๋ฆฌ์ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
SELECT last_name FROM actor WHERE first_name='mason';
์ด์ ์ ์ฌ์ฉ์ ์
๋ ฅ ์ฟผ๋ฆฌ๋ฅผ ๋ถ์ํ ๋ฐ์ดํฐ์, ๋ณ๊ฒฝ ์ด์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์ฟผ๋ฆฌ ์๋ฎฌ๋ ์ด์
์ ์ํํฉ๋๋ค. ์ฆ, first_name์ ๊ฐ์ด 'mason'์ธ ๋ชจ๋ ํ์ ๋ํด last_name์ 'oh'๋ก ๋ณ๊ฒฝํ๋ ์์
์ actor ํ
์ด๋ธ์ ๋ณ๊ฒฝ ์ด์ ๋ฐ์ดํฐ์ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค. ์๋ฎฌ๋ ์ด์
์ ๊ฒฐ๊ณผ๋ฌผ์ CDC์ '๋ณ๊ฒฝ ์ดํ ๋ฐ์ดํฐโ๋ก ์ฌ์ฉํฉ๋๋ค.
์ผ๋ จ์ ๊ณผ์ ์ ํตํด, ์ฐ๋ฆฌ๋ CDC์ ํ์ํ ๋ณ๊ฒฝ ์ด์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ์ดํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ทจ๋ํ์์ต๋๋ค. ์ทจ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ถ DBMS์ ์ ์ฅํจ์ผ๋ก์จ CDC์ ๋์์ ๋ง๋ฌด๋ฆฌํฉ๋๋ค.
ํ๊ณ์
๋ชจ๋ ํ๊ฒฝ์ ๋ํด ์๋ฎฌ๋ ์ด์ ์ ์ํํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ํจ์ ํธ์ถ๊ณผ ๊ฐ์ด ํธ์ถ ์์ ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ์ด ๋ฌ๋ผ์ ธ, ๊ฒฐ๊ณผ๊ฐ์ ์ฟผ๋ฆฌ ์ํ ์ด์ ์ ํน์ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ QueryPie๋ฅผ ์ฃผ๋ก ์ ์ฉํ๋ ํ๊ฒฝ์ธ ์ด์๋ง์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์ ๊ฐ์ ๋ณด์ ์ ์ฃผ๋ก ์ํํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณด์ ์์๋ ์ผ๋ฐ์ ์ผ๋ก ํจ์ ํธ์ถ๋ณด๋ค ๋ฆฌํฐ๋ด ๊ฐ์ ๋ ์์ฃผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ํ๊ณ์ ์ ์ฒด๊ฐ ๋น๋๋ ๋ฎ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ํฅํ ํจ์ ํธ์ถ๊ณผ ๊ฐ์ ๋ณต์กํ ์๋ฎฌ๋ ์ด์ ์ ๋ํ ์ง์ ์ญ์ ๊ณํ ์ค์ ์์ต๋๋ค.
๊ธฐ๋ ํจ๊ณผ
QueryPie CDC๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์์ ๋ฌธ์ ๋จ๋ฝ์์ ํ์ธํ๋ ์ํ ์๊ฐ์์์ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค. QSI ์ฟผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ๋จ๊ณ๋ DBMS์ ํ ์ด๋ธ ์ ๋ฐ์ดํธ ๋ฐ ํธ๋์ญ์ ๋กค๋ฐฑ ๋ถํ๋ฅผ ๊ฐํ์ง ์๋ ๋์์ธ ๊ฒ ๋ํ ์ฃผ๋ชฉํ ๋งํ ์ ์ ๋๋ค.
| ๋์ | ์ํ ์๊ฐ |
|---|---|
| ํ ์ด๋ธ ์กฐํ | 0.42s |
| ํ ์ด๋ธ ์ ๋ฐ์ดํธ | 1.54s -> 0s |
| ํธ๋์ญ์ ๋กค๋ฐฑ | 0.85s -> 0s |
| QSI ์ฟผ๋ฆฌ ์๋ฎฌ๋ ์ด์ | 1.62s |
| ํ ์ด๋ธ ์ ๋ฐ์ดํธ | 1.58s |
| ํธ๋์ญ์ ์ปค๋ฐ | 0.04s |
| ์ด ์์ ์๊ฐ | 3.66s |
| ์ฌ์ฉ์ ์ฟผ๋ฆฌ ๋์์ ์ด ์์ ์๊ฐ | 2.04s |
| ์ถ๊ฐ๋ ๋์์ ์ด ์์ ์๊ฐ | 2.39s -> 1.62s |
์ด์ฒ๋ผ QueryPie CDC๋ฅผ ํตํด ํธ๋์ญ์ ๊ธฐ๋ฐ CDC ๋๋น 35% ๋ ๋น ๋ฅธ ๋์์ ๊ฒฝํํ ์ ์์ผ๋ฉฐ, DBMS์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ์ง ์์์ผ๋ก์จ ํ ์ด๋ธ ์ ๋ฐ์ดํธ ๋ฐ ํธ๋์ญ์ ๋กค๋ฐฑ์ ์๋ตํ์ฌ DBMS์ ๋ํ ๋ถํ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
QueryPie CDC์ 3๋ ์ฅ์ : ์ฑ๋ฅ, ์ ์ฐ์ฑ, ํ์ฅ์ฑ
QueryPie CDC๊ฐ ๋ค๋ฅธ CDC ์๋ฃจ์ ๊ณผ ๋น๊ตํ์ ๋ ์ฐ์๋ฅผ ๊ฐ์ง๋ ์์๋ค์ ๋ํด ์ ๋ฆฌํด ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฑ๋ฅ: QueryPie CDC๋ ํธ๋์ญ์ ๊ธฐ๋ฐ CDC๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ๋์ํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๋ฅผ ๋ ์ ๊ฒ ๊ฐํฉ๋๋ค.
- ์ ์ฐ์ฑ: QueryPie CDC๋ ๋์์ ์ํ DBMS์ ์ํ ๋ณ๊ฒฝ์ ์๊ตฌํ์ง ์์ต๋๋ค. ์ฆ, DBMS์ ์ข ์์ฑ์ ๊ฐ์ง์ง ์์ต๋๋ค. ๋๋ถ์ QueryPie CDC๋ ์ค์น ํ DBMS๋ฅผ ์์ ํ์ง ์๊ณ ๋ฐ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํ์ฅ์ฑ: QueryPie CDC๋ DBMS์ ์ข ์์ ์ด์ง ์๊ธฐ ๋๋ฌธ์, ์๋ก์ด ์ข ๋ฅ์ DBMS๋ฅผ ์ง์ํด์ผ ํ๋ ์ํฉ์์๋ ๋์์ ์ํด ์ถ๊ฐ๋ก ์งํํด์ผ ํ๋ ์์ ์์ด ๋ฐ๋ก ํด๋น DBMS๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
ํธ๋์ญ์ ๊ธฐ๋ฐ์ CDC ๊ตฌํ์ ์ฆ์ ํธ๋์ญ์ ๋กค๋ฐฑ, ์ค๋ณต ์ฟผ๋ฆฌ ์ํ, ๋ํดํ NoSQL ์ง์ ๋ฑ์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ธฐํ ๊ตฌํ ์ญ์ DBMS์ ์ข ์๋๋ค๋ ๋จ์ ์ ์๊ณ ์์ต๋๋ค. QSI๋ฅผ ํ์ฉํ CDC ์์คํ ๊ตฌํ์ ํตํด QueryPie๋ DBMS์ ์ข ์๋์ง ์์ผ๋ฉฐ ๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ๋ฅผ ์ต์ํํฉ๋๋ค. ํธ๋์ญ์ ๋กค๋ฐฑ์ ์ฌ์ฉํ์ง ์๊ณ ์ค๋ณต๋ ํ ์ด๋ธ ์กฐํ๋ฅผ ๋ฐฉ์งํ๋ QueryPie๋ง์ ๋ ์์ ์ธ ์ฟผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ๊ธฐ์ ์ด ์ด๋ฅผ ๋ท๋ฐ์นจํฉ๋๋ค.
์ด๋ฌํ ํธ๋์ญ์ ๊ธฐ๋ฐ CDC์ ํ๊ณ๋ฅผ ๋์ด, QueryPie๋ ์ฑ๋ฅ๊ณผ ์ ์ฐ์ฑ์ ๊ฒธ๋นํ ์๋ก์ด CDC ์๋ฃจ์ ์ ์ ์ํฉ๋๋ค. QueryPie์ CDC๋ฅผ ํตํด ๊ธฐ์ ์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ๋ณด์์ ์ ์งํ๋ฉด์๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์ด์์ ์คํํ ์ ์์ต๋๋ค. ์์ผ๋ก QueryPie๋ CDC ๊ธฐ์ ์ ๋์ฑ ๋ฐ์ ์์ผ ๊ณ ๊ฐ์ด ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ , ๊ท์ ์ ๋ณด์์ ๋์์ ๋ง์กฑํ๋ ํ์ ์ ์ธ ๋น์ฆ๋์ค ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์๋๋ก ๋๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ ๋ฏธ๋์ ํต์ฌ ์์ฐ์ ๋๋ค. QueryPie๋ ํต์ฌ ์์ฐ์ ๋ณดํธํ๋ฉฐ, ๊ธฐ์ ๊ณผ ๊ณ ๊ฐ์ ์ฑ๊ณต์ ์ํ๋ ์ ๋ขฐ๋ฐ๋ ํํธ๋๊ฐ ๋๊ฒ ์ต๋๋ค.
