[DuckDB] ์†Œ๊ฐœ

[์›๋ณธ ๋งํฌ]

DuckDB๋Š” ๋– ์˜ค๋ฅด๊ณ  ์žˆ๋Š” OLAP, ๋ถ„์„์šฉ DB ์ค‘ ํ•˜๋‚˜๋‹ค.
๋น„์Šทํ•œ ํฌ์ง€์…˜์„ ์žก๊ณ  ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜คํ”ˆ์†Œ์Šค ๊ฒฝ์Ÿ์ž๋กœ๋Š” clickhouse๊ฐ€ ์žˆ๋‹ค.

C++๋กœ ๋งŒ๋“ค์–ด์กŒ๊ณ , MIT ๋ผ์ด์„ผ์Šค๋ผ์„œ ์‚ฌ์šฉ์—๋Š” ์•„๋ฌด๋Ÿฐ ์ง€์žฅ์ด ์—†๋‹ค.
์•ˆ์ •ํ™”๋œ 1.0.0 ๋ฒ„์ „์€ 2024๋…„์— ๋‚˜์™”๋‹ค.




ํŠน์ง•

๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•œ ๋ถ„์„์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ column ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ณ  ๋ณต์žกํ•œ ํ•„ํ„ฐ๋ง ์กฐ๊ฑด์— ๋Œ€ํ•ด ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

SQLite์— ์˜๊ฐ์„ ๋ฐ›์•„ ๋งŒ๋“ค์–ด์ ธ์„œ, ๊ฐ€๋ณ๊ณ  ์ด์‹ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ์ง€ํ–ฅํ•œ๋‹ค.

OLAP DB๋กœ์„œ๋Š” ํŠน์ดํ•˜๊ฒŒ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋ฉฐ, ACID๋ฅผ ๋งŒ์กฑํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋‹ค๋ฅธ ํ”Œ๋žซํผ, ํฌ๋งท๋“ค๊ณผ์˜ ์—ฐ๋™ ๋Šฅ๋ ฅ์ด ๋›ฐ์–ด๋‚˜๋‹ค. ๋ฐ์ดํ„ฐ ๊ณผํ•™์— ์‚ฌ์šฉ๋˜๋Š” ํฌ๋งท์ธ parquet, apache arrow ๋“ฑ๊ณผ์˜ ์ง์ ‘์ ์ธ ํ†ตํ•ฉ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์žˆ์„ ํ•„์š”๋„ ์—†๋‹ค. s3 ๋“ฑ์—์„œ ๋ฐ”๋กœ ์Šค์บ”ํ•ด์„œ query๋ฅผ ๋‚ ๋ฆฌ๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•œ๋‹ค.




vs Clickhouse

DuckDB์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ฒฝ์Ÿ์ž๋Š” ์•„๋งˆ clickhouse์ผ ๊ฒƒ์ด๋‹ค.
๋” ์ตœ์‹  ๊ธฐ์ˆ ์ด๋ผ๊ณ  ์ด๊ฒŒ ๋” ์ข‹์€๊ฑด ์•„๋‹ˆ๊ณ , ์„œ๋กœ tradeoff๊ฐ€ ์กด์žฌํ•œ๋‹ค.

clickhouse๋Š” ์ˆ˜ํ‰ ํ™•์žฅ์„ ์ „์ œ๋กœ ํ•œ ๋ถ„์‚ฐ ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ํ…Œ๋ผ๋ฐ”์ดํŠธ์—์„œ ํŽ˜ํƒ€๋ฐ”์ดํŠธ์— ์ด๋ฅด๋Š” ์ง„์งœ ๋น…๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ์ œ๊ณตํ•œ๋‹ค.
๊ทธ ๋Œ€์‹  ๋ฆฌ์†Œ์Šค ์š”๊ตฌ๋Ÿ‰์ด ๊ฝค ๋†’์œผ๋ฉฐ, ์ผ๋ฐ˜์ ์ธ DB๋“ค๋งŒํผ ์„ค์ •์ด๋‚˜ ๊ด€๋ฆฌ ๋ถ€๋ถ„์—์„œ ์†์ด ๊ฐ€๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•œ๋‹ค.

DuckDB๋Š” clickhouse์— ๋น„ํ•˜๋ฉด ๊ฐ๋‹น ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ๋น„๊ต์  ์ž‘์€ ํŽธ์ด๋‹ค. ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ๊ธ‰, ์ž˜ ํ•˜๋ฉด ํ…Œ๋ผ๋ฐ”์ดํŠธ ์ˆ˜์ค€๊นŒ์ง€๋Š” ์ž˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ํŽ˜ํƒ€๋ฐ”์ดํŠธ ๊ธ‰ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” ์ตœ์ ํ™”์— ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค.
์ˆ˜ํ‰ ํ™•์žฅ๋„ ์ œ๋Œ€๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
์„ค์น˜์™€ ์‚ฌ์šฉ์ด ํŽธํ•˜๊ณ  ๋ฆฌ์†Œ์Šค ์š”๊ตฌ์น˜๊ฐ€ ๋‚ฎ์€ ๋Œ€์‹ , ์ƒํ•œ์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ DuckDB๋Š” ์ค‘์†Œ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์„ ๋‹จ๋ฐœ์ ์œผ๋กœ ํ•ธ๋“ค๋งํ•˜๋Š”๋ฐ ์ ์ ˆํ•˜๊ณ , ์ •๋ง ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ณด๊ด€ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด clickhouse๋ฅผ ๋น„๋กฏํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์†”๋ฃจ์…˜์„ ์ฐพ์•„๋ด์•ผ ํ•œ๋‹ค.


์‚ฌ์‹ค ์ด๊ฒƒ๋„ SQLite์ฒ˜๋Ÿผ ๊ฑฐํ’ˆ์ด ์ข€ ์กด์žฌํ•˜๋Š” ๊ฒƒ ๊ฐ™๊ธด ํ•œ๋ฐ, ์ ๋‹นํ•œ ์‚ฌ์šฉ์‚ฌ๋ก€์—์„œ๋Š” ์“ธ๋งŒํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
ํ…Œ๋ผ-ํŽ˜ํƒ€๊ธ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•  ์ผ์ด ๋งŽ์ง€๋Š” ์•Š๊ณ , ๋Œ€๊ฐœ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ปค๋„ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ ์ˆ˜์ค€์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.



์ฐธ์กฐ
https://duckdb.org/
https://duckdb.org/why_duckdb
https://www.cloudraft.io/blog/clickhouse-vs-duckdb
https://en.wikipedia.org/wiki/DuckDB