DuckDB 0.6.0 DBMS์ ์ถ์๋ ์ปดํฉํธํจ, ์๋ฒ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ก ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฅ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋์ ํ์ผ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ, ํธ๋ฆฌํ CLI ์ธํฐํ์ด์ค, ์คํ์ ์ํ ๋๊ตฌ ๋ฐ ์ต์ ํ์ ๊ฐ์ SQLite์ ์์ฑ์ ๊ฒฐํฉํ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํ ์ด๋ธ์ ์ ์ฒด ๋ด์ฉ์ ์ง๊ณํ๊ฑฐ๋ ์ฌ๋ฌ ๊ฐ์ ํฐ ํ ์ด๋ธ์ ๋ณํฉํ๋ ๋ฑ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์๋น ๋ถ๋ถ์ ๋ค๋ฃจ๋ ๋ถ์ ์ฟผ๋ฆฌ์ ๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ์ ์ฅ ํ์์ด ์์ง ์์ ํ๋์ง ์์๊ณ ๋ฒ์ ๋ณ๋ก ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์ ์์ง ์คํ์ ์ธ ๋ฆด๋ฆฌ์ค๋ฅผ ํ์ฑํ๋ ๋จ๊ณ์ ์์ต๋๋ค.
DuckDB๋ ๋งค์ฐ ๋ณต์กํ๊ณ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ํฌํจ๋ ๊ณ ๊ธ SQL ์ธ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ณต์กํ ์ ํ(๋ฐฐ์ด, ๊ตฌ์กฐ, ๊ณต์ฉ์ฒด)์ ์ฌ์ฉ๊ณผ ์์ ๋ฐ ์ค์ฒฉ๋ ์๊ด ํ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ธฐ๋ฅ์ด ์ง์๋ฉ๋๋ค. ์ฌ๋ฌ ์ฟผ๋ฆฌ๋ฅผ ๋์์ ์คํํ์ฌ CSV ๋ฐ Parquet ํ์ผ์์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์์ต๋๋ค. PostgreSQL DBMS์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
SQLite์ ์ ธ ์ฝ๋ ์ธ์๋ ํ๋ก์ ํธ๋ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ PostgreSQL์ ํ์, MonetDB์ Date Math ๊ตฌ์ฑ ์์, ์์ฒด ์ฐฝ ํจ์ ๊ตฌํ(์ธ๊ทธ๋จผํธ ํธ๋ฆฌ ์ง๊ณ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฐ), ์ ๊ท์ ํ๋ก์ธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. RE2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์์ฒด ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก๊ทธ๋จ, MVCC ์ ์ด ๋ฉ์ปค๋์ฆ ๋์ ์์ ์คํ(Multi-Version Concurrency Control), ๊ทธ๋ฆฌ๊ณ ๋๊ท๋ชจ ๊ฐ ์ธํธ๋ฅผ ํ์ฉํ๋ Hyper-Pipelining Query Execution ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฐ์ ๋ฒกํฐํ๋ ์ฟผ๋ฆฌ ์คํ ์์ง โโํ ๋ฒ์ ์์ ์ผ๋ก ํ๋ฒ์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ ๋ฆด๋ฆฌ์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ์ฅ ํ์์ ๊ฐ์ ํ๋ ์์ ์ด ๊ณ์๋์์ต๋๋ค. ํ๋์ ํธ๋์ญ์ ์์ ๋๋์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ก๋ํ ๋ COMMIT ๋ช ๋ น์ผ๋ก ํธ๋์ญ์ ์ด ํ์ธ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์คํธ๋ฆฌ๋ฐ ๋ชจ๋์์ ๋ฐ์ดํฐ๊ฐ ์์ถ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ผ์ ๊ธฐ๋ก๋๋ ๋๊ด์ ๋์คํฌ ์ฐ๊ธฐ ๋ชจ๋๊ฐ ๊ตฌํ๋์์ต๋๋ค. . COMMIT ๋ช ๋ น์ ์์ ํ๋ฉด ์ด๋ฏธ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ๊ธฐ๋ก๋์ด ์์ผ๋ฉฐ ROLLBACK์ด ์คํ๋๋ฉด ํด๋น ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ฉ๋๋ค. ์ด์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ฒ์์๋ ์์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์๋ค๊ฐ ์ปค๋ฐ๋๋ฉด ๋์คํฌ์ ์ ์ฅ๋์์ต๋๋ค.
- ๋ณ๋์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ๋ก๋ํ๋ ์ง์์ด ์ถ๊ฐ๋์ด ๋ฉํฐ ์ฝ์ด ์์คํ ์์ ๋ก๋ ์๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด์ ๋ฆด๋ฆฌ์ค์์๋ 150์ฝ์ด CPU์ 10์ต 91์ฒ๋ง ํ์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ก๋ํ๋ ๋ฐ 17์ด๊ฐ ๊ฑธ๋ ธ์ง๋ง ์ ๋ฒ์ ์์๋ ์ด ์์ ์ด XNUMX์ด ๋ง์ ์๋ฃ๋ฉ๋๋ค. ๊ธฐ๋ก ์์๋ฅผ ์ ์งํ๋ ๋ชจ๋์ ์์๋ฅผ ์ ์งํ์ง ์๋ ๋ชจ๋์ ๋ ๊ฐ์ง ๋ณ๋ ฌ ๋ก๋ ๋ชจ๋๊ฐ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์์ถ์ ๊ฒฝ์ฐ FSST(Fast Static Symbol Table) ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ผ๋ฐ์ ์ธ ์ผ์น ํญ๋ชฉ์ ๊ณตํต ์ฌ์ ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์์ถํ ์ ์์ต๋๋ค. ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํจ์ผ๋ก์จ ํ ์คํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฌ๊ธฐ๋ฅผ 761MB์์ 251MB๋ก ์ค์ผ ์ ์์์ต๋๋ค.
- ๋ถ๋ ์์์ ์(DOUBLE ๋ฐ FLOAT)๋ฅผ ์์ถํ๊ธฐ ์ํด Chimp ๋ฐ Patas ์๊ณ ๋ฆฌ์ฆ์ด ์ ์๋์์ต๋๋ค. ์ด์ Gorillas ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น๊ตํ์ฌ Chimp๋ ๋ ๋์ ์์ค์ ์์ถ๊ณผ ๋ ๋น ๋ฅธ ์์ถ ํด์ ๋ฅผ ์ ๊ณตํฉ๋๋ค. Patas ์๊ณ ๋ฆฌ์ฆ์ ์์ถ๋ฅ ์์๋ Chimp์ ๋นํด ๋ค๋จ์ด์ง์ง๋ง ์์ถ ํด์ ์๋์์๋ ํจ์ฌ ๋นจ๋ผ์ ์์ถ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ๊ณผ ๊ฑฐ์ ๋ค๋ฅด์ง ์์ต๋๋ค.
- CSV ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ณ๋ ฌ ์คํธ๋ฆผ(SET Experiment_parallel_csv=true)์ผ๋ก ๋ก๋ํ๋ ์คํ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ๋์ฉ๋ CSV ํ์ผ์ ๋ก๋ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํฌ๊ฒ ์ค์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด ์ต์ ์ ํ์ฑํํ๋ฉด 720MB CSV ํ์ผ์ ๋ค์ด๋ก๋ ์๊ฐ์ด 3.5์ด์์ 0.6์ด๋ก ๋จ์ถ๋์์ต๋๋ค.
- ์ธ๋ฑ์ค ์์ฑ ๋ฐ ๊ด๋ฆฌ ์์ ์ ๋ณ๋ ฌ ์คํ ๊ฐ๋ฅ์ฑ์ด ๊ตฌํ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, 16๋ง ๊ฐ์ ๋ ์ฝ๋๊ฐ ์๋ ์ด์ ๋ํ CREATE INDEX ์์ ์ด 5.92์ด์์ 1.38์ด๋ก ๋จ์ถ๋์์ต๋๋ค.
- "COUNT(DISTINCT col)" ํํ์์ด ํฌํจ๋ ์ฟผ๋ฆฌ์์ ์ง๊ณ ์์ ์ ๋ณ๋ ฌํ๋ฅผ ํ์ฑํํ์ต๋๋ค.
- SQL์๋ ์ฌ๋ฌ ์ ํ์ ํ๋์ ์์์ ๋ฐ์ธ๋ฉํ ์ ์๋ UNION ์ ํ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค(์: "UNION(num INT, error VARCHAR))").
- SQL์ "SELECT" ๋์ "FROM"์ด๋ผ๋ ๋จ์ด๋ก ์์ํ๋ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ "SELECT *"๋ก ์์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
- SQL์๋ ํํ์์ ๋ณต์ ํ์ง ์๊ณ ๋ ์ฌ๋ฌ ์ด์ ๋ํ ์์ ์ ์ํํ ์ ์๋ COLUMNS ํํ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, โSELECT MIN(COLUMNS(*)) from obs;โ obs ํ ์ด๋ธ์ ๊ฐ ์ด์ ๋ํด MIN ํจ์๊ฐ ์คํ๋๊ณ "SELECT COLUMNS('val[0-9]+') from obs;" ์ด๋ฆ์ด "val"๊ณผ ์ซ์๋ก ๊ตฌ์ฑ๋ ์ด์ ๊ฒฝ์ฐ.
- ๋ชฉ๋ก ์์ ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค(์: "SELECT [x + 1 for x in [1, 2, 3]] AS l;").
- ๋ฉ๋ชจ๋ฆฌ ์๋น๊ฐ ์ต์ ํ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Linux ํ๋ซํผ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด jemalloc ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํ๋์ด ์๋ ๊ฒฝ์ฐ ํด์ ๋ณํฉ ์์ ์ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋์์ต๋๋ค.
- ํฐ๋ฏธ๋ ์ฐฝ์ ๋๋น๋ฅผ ๊ณ ๋ คํ์ฌ ์ค๊ฐ ์ด์ ์ญ์ ํ๋ ".mode duckbox" ์ถ๋ ฅ ๋ชจ๋๋ฅผ ๋ช ๋ น์ค ์ธํฐํ์ด์ค์ ์ถ๊ฐํ์ต๋๋ค("SELECT *์ ๊ฐ์ด ๋ง์ ์์ ์ด์ด ํฌํจ๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ์ํ๊ฒ ์๊ฐ์ ์ผ๋ก ํ๊ฐํ๋ ๋ฐ ์ ํฉ). FROM tblโ, ์ผ๋ฐ ๋ชจ๋์์๋ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ํ์๋ฉ๋๋ค. ".maxrows X" ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ์๋๋ ํ ์๋ฅผ ์ถ๊ฐ๋ก ์ ํํ ์ ์์ต๋๋ค.
- CLI๋ ์ปจํ ์คํธ๋ฅผ ๊ณ ๋ คํ ์ ๋ ฅ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค(ํค์๋, ํ ์ด๋ธ ์ด๋ฆ, ํจ์, ์ด ์ด๋ฆ ๋ฐ ํ์ผ ์ด๋ฆ ์ ๋ ฅ์ด ์๋ฃ๋จ).
- CLI์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฟผ๋ฆฌ ์งํ๋ฅ ํ์๊ธฐ๊ฐ ํ์ฑํ๋์ด ์์ต๋๋ค.
์ถ์ฒ : opennet.ru