A FerretDB 0.1 kiadása, a MongoDB PostgreSQL DBMS-en alapuló megvalósítása

Megjelent a FerretDB 0.1 projekt (korábban MangoDB) kiadása, amely lehetővé teszi a dokumentum-orientált DBMS MongoDB lecserélését PostgreSQL-re anélkül, hogy az alkalmazás kódját módosítaná. A FerretDB proxyszerverként van megvalósítva, amely a MangoDB-hívásokat SQL-lekérdezésekké fordítja PostgreSQL-be, lehetővé téve a PostgreSQL tényleges tárolóként való használatát. A kód Go nyelven íródott, és az Apache 2.0 licenc alatt terjeszthető.

A migráció szükségessége a MongoDB saját SSPL licencre való átállása miatt merülhet fel, amely AGPLv3 licencen alapul, de nem nyitott, mivel diszkriminatív előírást tartalmaz, hogy az SSPL licenc alatt nemcsak magát az alkalmazás kódját, hanem a felhőszolgáltatás nyújtásában részt vevő összes összetevő forráskódja.

A FerretDB célközönsége azok a felhasználók, akik nem a MongoDB fejlett képességeit használják alkalmazásaikban, hanem egy teljesen nyílt szoftvercsomagot szeretnének használni. A fejlesztés jelenlegi szakaszában a FerretDB még mindig csak egy részét támogatja a MongoDB képességeinek, amelyeket leggyakrabban használnak a tipikus alkalmazásokban. A jövőben azt tervezik, hogy teljes kompatibilitást érnek el a MongoDB illesztőprogramjaival, és lehetőséget biztosítanak arra, hogy a FerretDB-t a MongoDB átlátszó helyettesítőjeként használják.

Emlékezzünk vissza, hogy a MongoDB egy rést foglal el a kulcs/érték formátumú adatokkal működő gyors és méretezhető rendszerek és a relációs DBMS között, amelyek funkcionálisak és kényelmesek a lekérdezések generálásához. A MongoDB támogatja a dokumentumok JSON-szerű formátumban való tárolását, meglehetősen rugalmas nyelve van a lekérdezések generálásához, képes indexeket létrehozni a különféle tárolt attribútumokhoz, hatékonyan biztosítja a nagy bináris objektumok tárolását, támogatja a műveletek naplózását az adatok megváltoztatásához és hozzáadásához, a Map/Reduce paradigma szerint működik, támogatja a replikációt és a hibatűrő konfigurációk építését.

A FerretDB 0.1.0 kiadása teljesen újratervezte az adatok PostgreSQL-ből való lekérésének módszerét. Korábban minden bejövő MongoDB-kéréshez egy SQL-lekérdezést generáltak a PostgreSQL-hez, a JSON-formátummal való munkavégzésre és az eredmények PostgreSQL-oldali szűrésére szolgáló függvények segítségével. A PostgreSQL és a MongoDB json függvények szemantikája közötti különbségek miatt eltérés mutatkozott a viselkedésben a különböző típusok összehasonlításakor és rendezésekor. A probléma megoldása érdekében a rendszer redundánsan kéri le az adatokat a PostgreSQL-ből, és az eredményt a FerretDB oldalon szűrik, ami lehetővé tette a MongoDB viselkedésének replikálását a legtöbb helyzetben.

A megnövekedett kompatibilitás ára a teljesítmény csökkenése volt, amit a jövőbeni kiadásokban kompenzálni fognak azzal, hogy a FerretDB oldalon szelektíven szűrik csak azokat a lekérdezéseket, amelyek viselkedésében eltérés mutatkozik. Például a "db.collection.find({_id: 'some-id-value'})" lekérdezés teljes egészében feldolgozható a PostgreSQL-ben. A projekt elsődleges célja a fejlesztés ezen szakaszában a MongoDB-vel való kompatibilitás elérése, a teljesítmény pedig egyelőre háttérbe szorul. Az új verzió funkcionális változásai között szerepel az összes bitoperátor, a „$eq” összehasonlító operátor, valamint a „$elemMatch” és „$bitsAllClear” operátorok támogatása.

Forrás: opennet.ru

Hozzászólás