ΠΠ±ΡΠ°Π²Π΅Π½ΠΎ Π΅ ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ FerretDB 1.0, ΠΊΠΎΡ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ΠΈΠΎΡ DBMS MongoDB ΡΠΎ PostgreSQL Π±Π΅Π· Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°. FerretDB Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅Ρ ΠΊΠΎΡ Π³ΠΈ ΠΏΡΠ΅Π²Π΅Π΄ΡΠ²Π° ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ Π΄ΠΎ MongoDB Π²ΠΎ SQL ΠΏΡΠ°ΡΠ°ΡΠ° Π΄ΠΎ PostgreSQL, ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ PostgreSQL ΠΊΠ°ΠΊΠΎ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅. ΠΠ΅ΡΠ·ΠΈΡΠ°ΡΠ° 1.0 Π΅ ΠΎΠ·Π½Π°ΡΠ΅Π½Π° ΠΊΠ°ΠΊΠΎ ΠΏΡΠ²ΠΎ ΡΡΠ°Π±ΠΈΠ»Π½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΎ Π·Π° ΠΎΠΏΡΡΠ° ΡΠΏΠΎΡΡΠ΅Π±Π°. ΠΠΎΠ΄ΠΎΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π²ΠΎ Go ΠΈ ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° Apache 2.0.
ΠΡΠΈΠΌΠ°ΡΠ½Π°ΡΠ° ΡΠ΅Π»Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΠ° Π½Π° FerretDB ΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ ΠΊΠΎΠΈ Π½Π΅ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π½Π°ΠΏΡΠ΅Π΄Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π½Π° MongoDB Π²ΠΎ Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, ΡΡΠΊΡ ΡΠ°ΠΊΠ°Π°Ρ Π΄Π° ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΈ ΡΡΠ΅ΠΊ. ΠΠΎ ΡΠ΅Π³Π°ΡΠ½Π°ΡΠ° ΡΠ°Π·Π° Π½Π° ΡΠ°Π·Π²ΠΎΡ, FerretDB ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π½Π° MongoDB ΠΊΠΎΠΈ Π½Π°ΡΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΡΠΈΠΏΠΈΡΠ½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠΎΡΡΠ΅Π±Π°ΡΠ° Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° FerretDB ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈ Π²ΠΎ Π²ΡΡΠΊΠ° ΡΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½ΠΎΡ Π½Π° MongoDB Π½Π° ΠΊΠΎΠΌΠ΅ΡΡΠΈΡΠ°Π»Π½Π°ΡΠ° SSPL Π»ΠΈΡΠ΅Π½ΡΠ°, ΠΊΠΎΡΠ° ΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π° Π½Π° Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° AGPLv3, Π½ΠΎ Π½Π΅ Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½Π°, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠΎΠ΄ΡΠΆΠΈ Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°ΡΠΎΡΡΠΊΠΈ ΡΡΠ»ΠΎΠ² Π΄Π° ΡΠ΅ ΠΈΡΠΏΠΎΡΠ°ΡΠ° ΡΠΏΠΎΡΠ΅Π΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° SSPL Π½Π΅ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ΄ΠΎΡ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ°ΠΌΠΈΠΎΡ, Π½ΠΎ ΠΈ ΠΈΠ·Π²ΠΎΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π½Π° ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΎΠ±Π»Π°ΠΊ.
MongoDB Π·Π°Π·Π΅ΠΌΠ° Π½ΠΈΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ Π±ΡΠ·ΠΈ ΠΈ ΡΠΊΠ°Π»Π°Π±ΠΈΠ»Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π° ΠΊΠ»ΡΡΠ½ΠΈ/Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ ΡΠ΅Π»Π°ΡΠΈΠΎΠ½ΠΈ DBMS ΠΊΠΎΠΈ ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΈ Π»Π΅ΡΠ½ΠΈ Π·Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅. MongoDB ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ ΡΠ»ΠΈΡΠ΅Π½ Π½Π° JSON, ΠΈΠΌΠ° ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π΅Π½ ΡΠ°Π·ΠΈΠΊ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ° ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°Π½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ, Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ, ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° ΠΏΡΠΎΠΌΠ΅Π½Π° ΠΈ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΌΠΎΠΆΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π²ΠΎ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎΡΡ ΡΠΎ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°ΡΠ° Map/Reduce, ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΈ Π³ΡΠ°Π΄Π΅ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ»Π΅ΡΠ°Π½ΡΠ½ΠΈ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ΅ΡΡ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΠΎ FerretDB 1.0:
- ΠΠ°ΡΠ΅Π΄Π±ΠΈΡΠ΅ createIndexes ΠΈ dropIndexes ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΈ Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΈ Π±ΡΠΈΡΠ΅ΡΠ΅ Π½Π° Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡΠ°ΡΠ°.
- ΠΠΎΠΌΠ°Π½Π΄Π°ΡΠ° getMore Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π° Π·Π° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ Π½Π° Π½ΠΎΠ² Π΄Π΅Π» ΠΎΠ΄ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΎΡ Π΄ΠΎΠ±ΠΈΠ΅Π½ ΠΎΠ΄ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΊΠΎΠΈ Π²ΡΠ°ΡΠ°Π°Ρ ΠΊΡΡΡΠΎΡ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ Π½Π°ΠΎΡΠ°ΡΠ΅ ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΡ Π·Π° ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅ $sum Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΠΌΠ΅ΡΠ° Π·Π±ΠΈΡΠΎΡ Π½Π° Π³ΡΡΠΏΠ½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° $limit ΠΈ $skip ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° Π±ΡΠΎΡΠΎΡ ΠΈ ΠΏΡΠ΅ΡΠΊΠΎΠΊΠ½ΡΠ²Π°ΡΠ΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΡ $count Π·Π° Π±ΡΠΎΠ΅ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ ΠΏΡΠΈ ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΡ $unwind Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΠΎΠ»ΠΈΡΠ°ΡΠ° Π½Π° Π½ΠΈΠ·Π°ΡΠ° Π²ΠΎ Π΄ΠΎΡΠ΄ΠΎΠ²Π½ΠΈΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ ΠΈ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° Π»ΠΈΡΡΠ° ΡΠΎ ΠΏΠΎΡΠ΅Π±Π΅Π½ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π·Π° ΡΠ΅ΠΊΠΎΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ΄ Π½ΠΈΠ·Π°ΡΠ°.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ Π΄Π΅Π»ΡΠΌΠ½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ collStats, dbStats ΠΈ dataSize Π·Π° Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π·Π° ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΈ Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅.
ΠΠ·Π²ΠΎΡ: opennet.ru