SQLite ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ๋ก์ปฌ ํ์ผ์ด ์๋ ์ธ๋ถ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ ์ ์๋ ์คํ์ ์ธ CBS(Cloud Backed SQLite) VFS ๋ชจ๋์ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. ์คํ ๋ฆฌ์ง์ ๊ฒฝ์ฐ ์ธ๋ถ ์คํ ๋ฆฌ์ง์ ํน๋ณํ ์ต์ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์์ด ์ฌ์ฉ๋๋ฏ๋ก ๋จผ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ก์ปฌ ์์คํ ์ ๋ณต์ฌํ์ง ์๊ณ ๋ ํ์์ ๋ฐ๋ผ ์ธ๋ถ ์คํ ๋ฆฌ์ง์์ ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค. ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ์ค Azure Blob Storage์ Google Cloud Storage๊ฐ ํ์ฌ ์ง์๋ฉ๋๋ค. ์ผ๋ฐ SQLite๋ฅผ ์ง์ํ๋ ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ CBS๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณํํ ์ ์์ต๋๋ค.
VFS ๋ชจ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ ํ์ฑ ๋ชจ๋์์ ์๋ํ ์ ์์ต๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ ์์คํ ์์ ์ง์์ ์ผ๋ก ์คํ๋์ด ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋์์ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฉํ์ง๋ง ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ๊ณต์ ํ ์ ์๋ ๊ณต์ ์บ์๋ฅผ ์ ์งํฉ๋๋ค. ํ์ฑ ๋ชจ๋์์๋ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๊ฐ ํ์ฉ๋์ง๋ง ํ์ฌ ํ๋ก์ธ์ค์ ๋ก์ปฌ ์บ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ํ ๋ฒ์ ํ๋์ ํด๋ผ์ด์ธํธ๋ง ์ธ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์์ ๋ช ์์ ์ผ๋ก ์์ฒญํ ๋๊น์ง ๊ธฐ๋ก๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณผ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ฐ๊ธฐ ์์ฒญ์ ๋ถ๋ฆฌํ๊ธฐ ์ํด WAL ๋ก๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ผ๋ฐ์ ์ธ SQLite ์ ๊ธ ์์คํ ์ด ์ฌ์ฉ๋ฉ๋๋ค.
๊ฐ๋ฐ์๋ ์ธ๋ถ ์ ์ฅ์ ์์ฑ ๋ฐ ์ง์ฐ๊ธฐ, ์ธ๋ถ ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ก๋ ๋ฐ ์ธ๋ก๋, ์ธ๋ถ ์ ์ฅ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์ฌ๋ณธ ์์ฑ, ๋ชฉ๋ก ๋ณด๊ธฐ์ ๊ฐ์ ์์ ์ ์ํํ ์ ์๋ ํ์ฅ๋ C API ๋ฐ ๋ช ๋ น์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค. ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์์ ์ฌ์ฉํ์ง ์๋ ๋ธ๋ก์ ์ญ์ ํ๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค.
์ด์๋ ๋ณ๋๋ก libSQL ํ๋ก์ ํธ(SQLite์ ํ์ฅ ํฌํฌ) ๊ฐ๋ฐ์๋ SQLite์ ์๋ฒ ๋ฒ์ ์ธ sqld๋ฅผ ๋ฐํํ์ต๋๋ค. ์ด๋ฅผ ํตํด PostgreSQL ๋๋ HTTP๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋๋ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ์ธ ๊ณต์ DBMS์ ์์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๊ท์ฝ. ์๋ฅผ ๋ค์ด sqld์ ์ฐ๊ฒฐํ๋ ค๋ฉด PostgreSQL DBMS์ฉ์ผ๋ก ์์ฑ๋ ๊ธฐ์กด ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌด์๋ณด๋ค๋ psql CLI ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. sqld ์๋ฒ๋ HTTP ๊ธฐ๋ฐ API๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ธ์คํ ์๋ ์์ผ๋ฏ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๋ค. sqld ์ฝ๋๋ Rust๋ก ์์ฑ๋์์ผ๋ฉฐ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
sqld๋ ๋ฐฑ์ , ๋ค๋ฅธ ์์คํ ์ผ๋ก์ ๋ณต์ , ๊ทธ๋ฆฌ๊ณ ์๊ตฌ ์ ์ฅ ๊ณต๊ฐ์ด ๋ถ์กฑํ๊ณ ๋ก์ปฌ ํ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ง ๊ด๋ฆฌํ ์ ์๋ ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ์์ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฒ๋ฆฌ์ค ์์คํ ์์ sqld๊ฐ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ค๋ฅธ ์์คํ ์์ ๋ณต์ ํ ์ ์์ต๋๋ค. ์๋ฒ๊ณ ๊ฐ์ฉ์ฑ๊ณผ ๋ด๊ฒฐํจ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด FoundationDB ์์ ์คํ๋๋ ๋ถ์ฐํ SQLite ๋ณํ์ธ mvSQLite์์ ํตํฉ์ ์ง์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ์ ์ฃผ๊ธฐ์ ์ธ ์ค๋ ์ท ์์ฑ๊ณผ WAL ๋ก๊ทธ์ ๋ณ๊ฒฝ ์ฌํญ์ Amazon S3์ ํธํ๋๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง๋ก ๋ณต์ ํ๋ ๋ฐฉ์์ผ๋ก ๋ฅ๋ ๋ฐฑ์ ๋ชจ๋๋ฅผ ๊ตฌํํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ LD_PRELOAD๋ฅผ ํตํด ๋ก๋ํ์ฌ ๋ก์ปฌ ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์์ sqld๋ฅผ ํตํด ์์ ํ๋ ๊ฒ์ผ๋ก ์ ํํ ์ ์๋ SQLite ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณต๋ฉ๋๋ค. SQLite์ ๋ํ ํ์ฅ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ TypeScript, JavaScript, Rust, Go ๋ฐ Python์ฉ์ผ๋ก ์ค๋น๋์ด ์์ต๋๋ค. ํ์ค SQLite ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ sqld์ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์์ ํ ์ ์์ต๋๋ค. sqld๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ณต์ ๋ฐ ๋ฐฑ์ ์ ๋ํ ๋คํธ์ํฌ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ์ ๋์จ ์ญํ ์ ํฉ๋๋ค. ์: # SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค foo.db์ฉ ์๋ฒ ์์: sqld -d foo.db -p 127.0.0.1:5432 --http-listen-addr=127.0.0.1:8000 # PostgreSQL ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์ค: psql -q postgres ://127.0.0.1 # SQLite ํดํท์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก์ปฌ๋ก ์ฐ๊ฒฐ: sqlite3 foo.db # HTTP๋ฅผ ํตํ ์ก์ธ์ค: curl -s -d "{\"statements\": [\"SELECT * from databases; \"] } ยป\http://127.0.0.1:8000
๊ฒฐ๋ก ์ ์ผ๋ก Fly.io์์ ๊ฐ๋ฐํ LiteFS ํ๋ก์ ํธ๋ฅผ ์ธ๊ธํ ์ ์์ต๋๋ค. LiteFS๋ ์ฌ๋ฌ ํธ์คํธ์์ ํ๋์ ๊ณต์ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ๊ตฌ์ฑํ๊ธฐ ์ํ FUSE ๋ชจ๋์
๋๋ค. LiteFS๋ ์ผ์ข
์ ํธ๋์ญ์
๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๊ณ LTX ํ์์ ๋ณ๋ ํ์ผ์ ํธ๋์ญ์
์ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ์ผ์ ๋ํ ์ฐ๊ธฐ ์์
์ ๊ฐ๋ก์ฑ๊ณ ์ด๋ฌํ ์์
์ ๋ค๋ฅธ ์์คํ
์ ๋ธ๋ก๋์บ์คํธํจ์ผ๋ก์จ ์ฌ๋ฌ ์์คํ
๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ฅผ ๋ณต์ ํฉ๋๋ค. LiteFS ์ฝ๋๋ Go๋ก ์์ฑ๋์์ผ๋ฉฐ Apache 2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru
