์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ฌธ์ ์งํฅ DBMS MongoDB๋ฅผ PostgreSQL๋ก ๋์ฒดํ ์ ์๋ FerretDB 1.0 ํ๋ก์ ํธ์ ๋ฆด๋ฆฌ์ค๊ฐ ๊ฒ์๋์์ต๋๋ค. FerretDB๋ MongoDB์ ๋ํ ํธ์ถ์ PostgreSQL์ ๋ํ SQL ์ฟผ๋ฆฌ๋ก ๋ณํํ๋ ํ๋ก์ ์๋ฒ๋ก ๊ตฌํ๋์ด PostgreSQL์ ์ค์ ์ ์ฅ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฒ์ 1.0์ ์ผ๋ฐ์ฉ์ผ๋ก ์ค๋น๋ ์ฒซ ๋ฒ์งธ ์์ ๋ฆด๋ฆฌ์ค๋ก ํ์๋ฉ๋๋ค. ์ฝ๋๋ Go๋ก ์์ฑ๋์์ผ๋ฉฐ Apache 2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
FerretDB์ ์ฃผ์ ๋์ ๊ณ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ MongoDB ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์ง๋ง ์์ ํ ๊ฐ๋ฐฉ๋ ์ํํธ์จ์ด ์คํ์ ์ฌ์ฉํ๋ ค๋ ์ฌ์ฉ์์ ๋๋ค. ํ์ฌ ๊ฐ๋ฐ ๋จ๊ณ์์ FerretDB๋ ์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ MongoDB ๊ธฐ๋ฅ์ ํ์ ์งํฉ์ ์ง์ํฉ๋๋ค. FerretDB๋ฅผ ๊ตฌํํด์ผ ํ ํ์์ฑ์ MongoDB๋ฅผ AGPLv3 ๋ผ์ด์ ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง ๊ฐ๋ฐฉ๋์ง ์์ ๋น์์ SSPL ๋ผ์ด์ ์ค๋ก ์ ํํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์์ฒด๋ฟ๋ง ์๋๋ผ ํด๋ผ์ฐ๋ ์๋น์ค ์ ๊ณต๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ์์ค ์ฝ๋๋ ํฌํจํฉ๋๋ค.
MongoDB๋ ํค/๊ฐ ๋ฐ์ดํฐ์์ ์๋ํ๋ ๋น ๋ฅด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์์คํ ๊ณผ ๊ธฐ๋ฅ์ ์ด๊ณ ์ฟผ๋ฆฌํ๊ธฐ ์ฌ์ด ๊ด๊ณํ DBMS ์ฌ์ด์ ํ์๋ฅผ ์ฐจ์งํฉ๋๋ค. MongoDB๋ JSON๊ณผ ๊ฐ์ ํ์์ผ๋ก ๋ฌธ์ ์ ์ฅ์ ์ง์ํ๊ณ , ์ฟผ๋ฆฌ ์์ฑ์ ์ํ ์๋นํ ์ ์ฐํ ์ธ์ด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ค์ํ ์ ์ฅ๋ ์์ฑ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์๊ณ , ๋์ฉ๋ ์ด์ง ๊ฐ์ฒด์ ์คํ ๋ฆฌ์ง๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๊ณตํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๊ฐํ๋ ์์ ๋ก๊น ์ ์ง์ํ๊ณ , ๋ค์์ ์ํํ ์ ์์ต๋๋ค. ํจ๋ฌ๋ค์ Map/Reduce์ ๋ฐ๋ผ ์์ ํ๊ณ ๋ณต์ ๋ฅผ ์ง์ํ๊ณ ๋ด๊ฒฐํจ์ฑ ๊ตฌ์ฑ์ ๊ตฌ์ถํฉ๋๋ค.
FerretDB 1.0์ ๋ณ๊ฒฝ ์ฌํญ:
- ์ปฌ๋ ์ ์ ํ๋ ์ด์์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ณ ์ญ์ ํ๊ธฐ ์ํ createIndexes ๋ฐ dropIndexes ๋ช ๋ น์ ๊ตฌํํ์ต๋๋ค.
- getMore ๋ช ๋ น์ ์ฐพ๊ธฐ ๋ฐ ์ง๊ณ์ ๊ฐ์ด ์ปค์๋ฅผ ๋ฐํํ๋ ๋ช ๋ น ์คํ์์ ์ป์ ๊ฒฐ๊ณผ์ ์๋ก์ด ๋ถ๋ถ์ ํ์ํ๋๋ก ๊ตฌํ๋์์ต๋๋ค.
- ๊ทธ๋ฃน ๊ฐ์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด $sum ์ง๊ณ ์ฐ์ฐ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- $limit ๋ฐ $skip ์ฐ์ฐ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์ด ์ง๊ณ ์ ๋ฌธ์ ์๋ฅผ ์ ํํ๊ณ ๊ฑด๋๋๋๋ค.
- ์ง๊ณ ์ ๋ฌธ์ ๊ณ์ฐ์ ์ํ $count ์ฐ์ฐ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ค์ด์ค๋ ๋ฌธ์์ ๋ฐฐ์ด ํ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ๊ฐ ๋ฐฐ์ด ์์์ ๋ํ ๋ณ๋์ ๋ฌธ์๋ก ๋ชฉ๋ก์ ํ์ฑํ๋ $unwind ์ฐ์ฐ์์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์์ง ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํต๊ณ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด collStats, dbStats ๋ฐ dataSize ๋ช ๋ น์ ๋ํ ๋ถ๋ถ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru