Graduation Research 1: Additional Concepts
2025๋ ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฉ์ ์ปจํํ์ฌ ํ๋ถ ์กธ์ ์ฐ๊ตฌ ์ฃผ์ ๋ฅผ ๋ฐ์์ ์งํํ๊ณ ์์ต๋๋ค. ์ ์ ์ฃผ์ ๋ โContinuous Subgraph Matchingโ๊ณผ ๊ด๋ จํด ์ฝ๋๋ฅผ ์ต์ ํ ํ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ผ๋ก ๊ทธ๋ํ ์ฟผ๋ฆฌ ๊ด๋ จ ๋ ผ๋ฌธ์ ์ฝ๊ณ , C++ ์ฝ๋๋ฅผ ํ๋ํ๊ณ ์์ต๋๋ค. ์กธ์ ๋ง์ง๋ง ํ๊ธฐ์ ๋ฃ๋ ์์ ์ธ๋ฐ ๋ง์ ๋ ธํ์ฐ์ ๊ฒฝํ์ ์๊ณ ์กธ์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค ใ ใ
๋ค์ด๊ฐ๋ฉฐ
์กธ์ ์ฐ๊ตฌ๋ฅผ ํ๋ฉด์ ๊ณ๋ค๋ฆฌ๋ก ์ฐพ์๋ณธ ๋ด์ฉ๋ค, ๊ทธ๋ฆฌ๊ณ ๋ ผ๋ฌธ์์ ์ ๊น ์ธ๊ธ๋ ๋ด์ฉ๋ค์ ๋ชจ์์ ์ด ํฌ์คํธ์ ๋ชจ์๋ก๋๋ค.
Sideways Information Passing
SQL์์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ํํ๋ ํ ํฌ๋ ์ ๋๋ค.
์๋ฅผ ๋ค์ด, Orders
(order_id, customer_id, data) ํ
์ด๋ธ๊ณผ Customers
(customer_id, name, country) ํ
์ด๋ธ์ด ์๊ณ , ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์์ต๋๋ค.
SELECT *
FROM Orders O
JOIN Customers C ON O.customer_id = C.customer_id
WHERE C.country = 'Korea';
์์ ์ฟผ๋ฆฌ๋ฅผ ํ
์ด๋ธ Join์ ๋จผ์ ์ํํ๊ณ , ์กฐ์ธ ๊ฒฐ๊ณผ์ ๋ํด C.country = 'Korea'
์กฐ๊ฑด์ ์ ์ฉ ํฉ๋๋ค.
SIP ํ
ํฌ๋์ WHERE
์ ์ ์กฐ์ธ ๋์์ธ Customers
ํ
์ด๋ธ์ ๋จผ์ ์ ์ฉํ๊ณ , ํ
์ด๋ธ ์กฐ์ธ์ ์ํํ ์ ์๋๋ก ํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํ ์ด๋ธ ์กฐ์ธ์์ $N \times M$์ด ์๋๋ผ $N \times (M - \alpha)$๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋ ์ ์ ์กฐ์ธ ์ฐ์ฐ์ผ๋ก ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค!
SIP๋ ์๋์ผ๋ก ๋๋๊ฒจ? ์๋ ์ฌ๋์ด ํด์ผ ํ๋๊ฒจ?
์๋์ผ๋ก ๋๋ ๊ฑฐ๋ผ๊ณ ํฉ๋๋ค! ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ตํฐ๋ง์ด์ ๋ โ๋ด๋ถ์ ์ผ๋กโ ์ํํ๋ ์ฟผ๋ฆฌ ์ต์ ํ ๊ธฐ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ค๋ง, ์ฌ์ฉ์๋ ์ฟผ๋ฆฌ ์ตํฐ๋ง์ด์ ๊ฐ ๊ตฌ์กฐ๋ฅผ ์ ์ธ์ํ ์ ์๋๋ก ์ฟผ๋ฆฌ ์์ฒด๋ฅผ ์ ์์ฑ ํด์ค์ผ ํฉ๋๋ค.
์ ๊ธฐํ๊ฒ๋ Apache Spark์๋ SIP ์ต์ ํ๊ฐ ์ ์ฉ ๋์ด ์๋ค๊ณ ํฉ๋๋ค! Spark์ โCatalyst Optimizerโ๋ SIP๋ฅผ ํฌํจํด ๋ค์ํ ๋ ผ๋ฆฌ/๋ฌผ๋ฆฌ ์ฟผ๋ฆฌ ์ต์ ํ๋ฅผ ์ํํด์ค๋๋ค.
vs. Predicate Pushdown
SIP์ ์์๋ณด๋ฉด์ ํท๊ฐ๋ ธ๋๊ฒ, Predicate Pushdown ์ต์ ํ ์์ต๋๋ค.
Predicate Pushdown์ ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ์์ ์ํ ๋๋๋ฐ,
SELECT *
FROM Customers
WHERE country = 'Korea';
์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ๊ฐ ํ์ผ/ํ
์ด๋ธ ์ค์บ ํ๋ ๊ณผ์ ์์ WHERE
์กฐ๊ฑด์ ๋จผ์ ์ ์ฉํฉ๋๋ค. ์ด๊ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ํ์ํ ํ๋ง ๋ก๋ํด์ ๋ฆฌ์์ค๋ฅผ ์๋ ์ ์์ต๋๋ค!
๋ฐ๋ฉด์, SIP๋ ์กฐ์ธ ๊ณผ์ ์์ ์ด๋ค์ง๋ ์ต์ ํ ์
๋๋ค. ์กฐ์ธ ๊ฒฐ๊ณผ์ WHERE
์ ์ํํ์ง ์๊ณ , ์์ค ํ
์ด๋ธ์ WHERE
์ ๋๊ฒจ๋ฒ๋ฆฌ๋ ๊ฒ์ด SIP์ ์ปจ์
์
๋๋ค.
๋ ์ต์ ํ ๊ธฐ๋ฒ์ ์๋ก ์์ถฉ ๋๋ ๊ฒ์ด ์๋๋๋ค. ๊ทธ๋์ SIP๊ฐ ์ ์ฉ๋ ํ์ ์์ค ํ ์ด๋ธ์ ๋ํด์ Predicate Pushdown์ด ์ผ์ด๋๋ ๊ฒ๋ ๊ฐ๋ฅ ํฉ๋๋ค.
Database Algebra
๋๋๊ฒ๋โฆ ์ ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ ๋ฃ๊ณ ์กธ์ ์ ํฉ๋๋คโฆ ใ ใ ๊ทธ๋์ ๋ ผ๋ฌธ์ ํ๊ธฐ ์ค์ ์ฒจ๋ณด๋ ๊ฒ๋ค์ด ์์ด์ ์ ๋ฆฌํฉ๋๋ค ใ ใ (์ ๋ณด์ฒ๋ฆฌ์ฐ์ ๊ธฐ์ฌ ์ค๋นํ ๋ ๋ณด๊ธด ํ์๋ค์)
Projection $\pi$
SQL์ SELECT
์ฐ์ฐ ๊ฐ์ ๊ฒ
Joins
- Theta Join $\Join_{\theta}$
- Join ์กฐ๊ฑด์
ON
์ ์ ์ง์ ๋ช ์ํ๋ ์กฐ์ธ ์ ๋๋ค.
- Join ์กฐ๊ฑด์
- Natural Join $\Join$
- ๋ ์์ค ํ ์ด๋ธ์ ์๋ ๊ณตํต ์ด๋ฆ&ํ์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์์์ ์กฐ์ธ์ ์ํํฉ๋๋ค.
MVCC, Multi-version Concurrency Control
๋ฐ์ดํฐ๋ฒ ์์ค๋ ๋์ ์์คํ ์์ โ๋์์ฑโ์ ์ ์ดํ๊ธฐ ์ํด์ ์ฌ๋ฌ ๋ฒ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ ์งํ๋ ํ ํฌ๋ ์ ๋๋ค.
TurboFlux(2018) ๋ ผ๋ฌธ์์ CSM ๋ฌธ์ ๋ฅผ ๋ถ์ฐ์ฒ๋ฆฌ ํ๊ฒฝ์์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ธ๊ธํ ๋, ์ ๊น ๋์์ต๋๋ค.
ํ์ฌ์์ Delta-lake ํฌ๋งท์ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ์ด๊ฒ ๋ํ์ ์ธ MVCC ํ๋ ์์ํฌ๋ผ๊ณ ํฉ๋๋ค.
Dataset
์กธ์ ํ๋ก์ ํธ ์คํ์ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ์ ๋ชฉ๋ก ์ ๋๋ค.
- LSBench
- Undirected, Labeled
- Directed, Labeled
- Livejournal
- Undirected, Unlabeled
- Netflow
- Directed, Labeled
Labeled vs. Unlabeled
Labeled์ Unlabeled์ ์ฐจ์ด๋ Edge์ ๋ผ๋ฒจ์ด ์๋์ง ์ฌ๋ถ ์ ๋๋ค.
@lsbench (labeled)
v 0 0
v 1 0
v 2 0
v 3 0
v 4 0
v 5 0
e 0 3 33
e 1 2 42
e 2 3 42
e 3 4 41
e 3 5 32
LSBench๋ ์ฃ์ง์ ๋ผ๋ฒจ์ด ๋ถ์ฌ ๋์ด ์์ต๋๋ค: e v1, v2 label
@livejournal (unlabeled)
v 0 26
v 1 8
v 2 9
v 3 26
v 4 8
v 5 14
e 0 2 0
e 0 3 0
e 0 5 0
e 1 3 0
e 3 4 0
livejournal์ ์ฃ์ง์๋ ๋ผ๋ฒจ์ด ์์ง๋ง, ๋ ธ๋์๋ ๋ผ๋ฒจ์ด ์กด์ฌํฉ๋๋ค.