ํ๋ฌ๊ทธ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ค๊ณ๋ ๊ฒฝ๋ DBMS์ธ SQLite 3.42์ด ์ถ์๋์์ต๋๋ค. SQLite ์ฝ๋๋ ๊ณต๊ฐ ๋๋ฉ์ธ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์ด๋ค ๋ชฉ์ ์ผ๋ก๋ ์ ํ ์์ด ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. SQLite ๊ฐ๋ฐ์๋ฅผ ์ํ ์ฌ์ ์ ์ง์์ Adobe, Oracle, Mozilla, Bentley ๋ฐ Bloomberg์ ๊ฐ์ ํ์ฌ๋ฅผ ํฌํจํ๋ ํน๋ณํ ๊ตฌ์ฑ๋ ์ปจ์์์์์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ :
- FTS5 ์ ์ฒด ํ ์คํธ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ๋ณด์ ์ญ์ ๋ช ๋ น์ด ๊ตฌํ๋์ด ์ญ์ ํ ๋ชจ๋ ์์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ๋ฆฌํฉ๋๋ค.
- JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์๋ ์ด์ JSON5 ํ์ฅ์ ์ง์ํฉ๋๋ค.
- ํฅ์๋ ์ฟผ๋ฆฌ ํ๋๋. ์กฐํ์ ์ต์ ํ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ต๋๋ค. ํ์ ์ฟผ๋ฆฌ์์ ์ฌ์ฉ๋์ง ์๋ ์ด ์ฒ๋ฆฌ๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค. ํธ์๋ค์ด ์ต์ ํ ๊ตฌํ์ด ๊ฐ์ ๋์์ต๋๋ค.
- ".testctrl"๊ณผ ๊ฐ์ ์ผ๋ถ ์ํํ ๋ช ๋ น์ ํ ์คํธ์ ์ฌ์ฉํ ์ ์๋๋ก CLI์ "--unsafe-testing" ์ต์ ์ ์ถ๊ฐํ์ต๋๋ค. ์์ ๋ชจ๋("--safe")์์๋ ".log on" ๋ฐ ".log off" ๋ช ๋ น์ด ํ์ฉ๋ฉ๋๋ค. ์ต์ ์ฒ๋ฆฌ๊ฐ ๋นํ์ฑํ๋ ์ดํ์ ์ธ์์ ๋ํ ๊ตฌ๋ถ ๊ธฐํธ "โ"์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ๋ฌดํ๋ ๋ฐ NaN ๊ฐ๊ณผ ๊ด๋ จ๋ ":inf" ๋ฐ ":nan" ๋งค๊ฐ๋ณ์๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ SQL ํจ์์ ์ด๋ฆ์ CROSS, FULL, INNER, LEFT, NATURAL, OUTER ๋ฐ RIGHT ํค์๋์ ๊ต์ฐจํ ์ ์์ต๋๋ค.
- ํ์ฅ๋ PRAGMA integrity_check ๊ธฐ๋ฅ. NOT NULL ์กฐ๊ฑด์ด ์๋ ์ด์ NaN ๊ฐ์ ์ง์ ํ๊ธฐ ์ํ ๊ฒ์ฌ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ค๋ฅ ๋ฉ์์ง์ ์ ๋ณด ๋ด์ฉ์ด ๊ฐ์ ๋์์ต๋๋ค.
- ์ธ์ ์ ์ถ๊ฐํ๋ฉด ROWID๊ฐ ์๋ ํ ์ด๋ธ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค.
- ์ด ๋จ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์๊ฐ ๋ฐ ๋ ์ง ์์ ์ ์ํ ํจ์์ "subsec" ํ์ ์๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ฐฐ์ด ๋ฐ JSON ๊ฐ์ฒด์ ๊ธฐ๋ณธ ์ฌ๊ท ๊น์ด๊ฐ 2000์์ 1000์ผ๋ก ๊ฐ์ํ์ต๋๋ค.
๋ํ DuckDB 0.8.0 DBMS ๋ฆด๋ฆฌ์ค๊ฐ ๊ตฌ์ฑ๋์ด SQLite ๋ณํ์ ๊ฐ๋ฐํ๊ณ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์๋น ๋ถ๋ถ์ ๋ค๋ฃจ๋ ๋ถ์ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ธฐ ์ํ ๊ธฐ๋ฅ ๋ฐ ์ต์ ํ๋ก ํ์ฅ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ ์ด๋ธ์ ์ ์ฒด ๋ด์ฉ์ ์ง๊ณํ๊ฑฐ๋ ์ฌ๋ฌ ํญ๋ชฉ์ ๋ณํฉํฉ๋๋ค. ํฐ ํ ์ด๋ธ. ๋งค์ฐ ๋ณต์กํ๊ณ ์ค๋ ์คํ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ๊ณผ ๋ณต์กํ ์ ํ(๋ฐฐ์ด, ๊ตฌ์กฐ, ๊ณต์ฉ์ฒด) ์ง์, ์ฌ๋ฌ ์ฟผ๋ฆฌ์ ๋์ ์คํ ๋ฐ CSV ํ์ผ์์ ์ง์ ์ฟผ๋ฆฌ ์คํ์ ํฌํจํ๋ ํ์ฅ๋ SQL ์ธ์ด๊ฐ ์ ๊ณต๋ฉ๋๋ค. , JSON ๋ฐ Parquet ํ์. PostgreSQL DBMS์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
SQLite์ ์ ธ ์ฝ๋ ์ธ์๋ ์ด ํ๋ก์ ํธ๋ PostgreSQL์ ํ์๋ฅผ ์ฌ์ฉํ๊ณ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ด๋ํ์ต๋๋ค. MonetDB์ Date Math ๊ตฌ์ฑ ์์, ์์ฒด ์ฐฝ ํจ์ ๊ตฌํ(์ธ๊ทธ๋จผํธ ํธ๋ฆฌ ์ง๊ณ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฐ), ์ ๊ท์ ํ๋ก์ธ์ RE2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฐ, ์์ฒด ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก๊ทธ๋จ, MVCC ์ ์ด ๋ฉ์ปค๋์ฆ ์์ ๋์ ์คํ(Multi-Version Concurrency Control), Hyper-Pipelining Query Execution ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ฒกํฐํ๋ ์ฟผ๋ฆฌ ์คํ ์์ง์ผ๋ก ๋๋์ ์์ ์งํฉ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ ๋ฒ์ ์์ ์ผ๋ก ํ ๋ฒ์ ๊ฐ. ํ๋ก์ ํธ ์ฝ๋๋ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ ๋ฒ์ ์ DuckDB์์:
- ํ์ ์ด๋ก ๋๋ ๊ทธ ๋ฐ๋๋ก ๋ณํํ๋ ์ ํํ์ "PIVOT" ๋ฐ "UNPIVOT"์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋ด๋ณด๋ผ ๋ ๋ณ๋ ฌํ๊ฐ ๊ฐ์ ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก CSV ํ์์ ํ์ผ์์ ์ฌ๋ฌ ์คํธ๋ฆผ์ผ๋ก ์ฝ๊ธฐ ๋ฐ ๋ค์ค ์ค๋ ๋ ์ฐ๊ธฐ๋ Parquet, CSV ๋ฐ JSON ํ์์ ์ฌ์ฉํ ๋ ๊ตฌํ๋ฉ๋๋ค.
- ํ์ผ ๊ฒฝ๋ก(์: FROM "'data/glob/crawl/stackoverflow/**/*.csv';")๋ฅผ ์ ์ํ ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ณตํ๋ "**" ์ฐ์ฐ์๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ ์ฝ๋ ๋ณํฉ ๊ธฐ์ค์ด ์ ํํ์ง๋ ์์ง๋ง ๊ฐ์ ๋๋ต์ ์ธ ์ผ์น์ธ ์๊ณ์ด(์ง์ ๋ ์๊ฐ ๊ฐ๊ฒฉ์ ๋งค๊ฐ๋ณ์ ๊ฐ ์กฐ๊ฐ) ํํ์ ๋ฐ์ดํฐ์ ๋ํ ๋ณํฉ ์์ (JOIN)์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์๊ฐ์ด ์๋ ํ๋์์(์๋ฅผ ๋ค์ด, ์๊ฐ์ด 1๋ถ ์ด์ ์ฐจ์ด๊ฐ ๋์ง ์๋ ๋ ์ฝ๋๋ฅผ ๊ฒฐํฉํ ์ ์์)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฉํ๋ฐ์ดํฐ์ ์ง์ฐ ๋ก๋ฉ์ด ๊ตฌํ๋์ด DBMS ์คํ ์๋๋ฅผ ์์ญ ๋ฐฐ ๋์ผ ์ ์์ต๋๋ค.
- Python์์ ์ฌ์ฉ์ ์ง์ ํจ์๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- Apache Arrow๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ADBC โโ(Arrow Database Connectivity) API์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- Swift ์ฝ๋์์ ํตํฉ์ ์ํด ๋ฐ์ธ๋ฉ์ ๊ตฌํํ์ต๋๋ค.
- ์ด์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ์ฐ์ฐ ๋์ ๋ถ๋ ์์์ ๊ณ์ฐ์ ์ํํ๋ ๋๋๊ธฐ("/") ์ฐ์ฐ์์ ๋์์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ ์ ๋๋์ ์ ์ํด ์๋ก์ด ์ฐ์ฐ์ "//"๊ฐ ์ ์๋์์ต๋๋ค. ์ด์ ๋์์ "SET integer_division=true;"๋ฅผ ์ค์ ํ์ฌ ๋ฐํํ ์ ์์ต๋๋ค.
- ์ ๋ ฌ ์ null ๋ ์ฝ๋๋ฅผ ์ค๋ช ํ๋ ๋ฐฉ๋ฒ์ด "NULLS FIRST"์์ "NULLS LAST"๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. NULL ๊ฐ์ ์ด์ ๋ชฉ๋ก์ ์์ ๋ถ๋ถ์ด ์๋ ๋์ ํ์๋ฉ๋๋ค. ์ด์ ๋์์ "SET default_null_order='nulls_first';"๋ฅผ ์ค์ ํ์ฌ ๋ณต์ํ ์ ์์ต๋๋ค.
๋ํ SQLite์ ํจ๊ป ์ ์ฅ ํ๋ก์์ ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ฝ๋ ์์ฑ๊ธฐ๋ฅผ ์ ๊ณตํ๋ Facebook์์ ๊ฐ๋ฐํ CG/SQL ํ๋ก์ ํธ๋ฅผ ์ธ๊ธํ ์ ์์ต๋๋ค. CG/SQL์ ์ฌ์ฉํ๋ฉด ํ์ค C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ํธ์ถํ๊ณ SQLite์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์๋ T-SQL(Transact-SQL)์ ํน์ ์ธ์ด๋ก ์ ์ฅ ํ๋ก์์ ๋ฅผ ์ค๊ณํ ์ ์์ต๋๋ค. ์์ฑ๋ ์ ์ฅ ํ๋ก์์ ๋ SQLite C API๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ ์์
์ ์ํํ๊ณ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ C ์ฝ๋๋ก ์ปดํ์ผ๋ฉ๋๋ค. ์ปดํ์ผ๋ ์ ์ฅ ํ๋ก์์ ๋ C, Java ๋ฐ Objective-C ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ C๋ก ์์ฑ๋์์ผ๋ฉฐ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru