UtgÄvan av projektet FerretDB 0.1 (tidigare MangoDB) har publicerats, vilket gör det möjligt att ersÀtta den dokumentorienterade databasen MongoDB med PostgreSQL utan att göra nÄgra Àndringar i applikationens kod. FerretDB implementeras som en proxyserver som översÀtter anrop till MangoDB till SQL-frÄgor till PostgreSQL, vilket gör att PostgreSQL kan anvÀndas som den faktiska lagringslösningen. Koden Àr skriven i Go och distribueras under Apache 2.0-licensen.
Behovet av att migrera kan uppstÄ pÄ grund av att MongoDB övergÄr till den icke-fria SSPL-licensen, som Àr baserad pÄ AGPLv3-licensen men inte Àr öppen, eftersom den innehÄller ett diskriminerande krav pÄ leverans under SSPL-licensen inte bara av koden för sjÀlva applikationen, utan Àven av kÀllkoden för alla komponenter som Àr involverade i tillhandahÄllandet av molntjÀnsten.
FerretDB riktar sig till anvÀndare som inte anvÀnder de avancerade funktionerna i MongoDB, men som vill anvÀnda en helt öppen programvarustack. I det nuvarande utvecklingssteget stöder FerretDB bara en del av MongoDB:s funktioner som oftast anvÀnds i typiska applikationer. I framtiden planerar de att uppnÄ full kompatibilitet med drivrutiner för MongoDB och erbjuda möjligheten att anvÀnda FerretDB som en transparent ersÀttning för MongoDB.
LÄt oss pÄminna om att MongoDB fyller en nisch mellan snabba och skalbara system som hanterar data i nyckel/vÀrde-format och relationsdatabaser som Àr funktionella och anvÀndarvÀnliga nÀr det gÀller att formulera frÄgor. MongoDB stödjer lagring av dokument i JSON-liknande format, har ett tillrÀckligt flexibelt sprÄk för att formulera frÄgor, kan skapa index för olika lagrade attribut, effektivt lagra stora binÀra objekt, stödjer loggning av operationer som Àndrar och lÀgger till data i databasen, kan arbeta enligt Map/Reduce-paradigmet, stödjer replikering och uppbyggnad av redundanta konfigurationer.
I utgÄvan av FerretDB 0.1.0 har metoden för att hÀmta data frÄn PostgreSQL helt omarbetats. Tidigare skapades en SQL-frÄga till PostgreSQL för varje inkommande MongoDB-förfrÄgan, som anvÀnde funktioner för att arbeta med JSON-format och utförde filtrering av resultaten pÄ PostgreSQL-sidan. PÄ grund av skillnader i semantiken mellan JSON-funktioner i PostgreSQL och MongoDB observerades oenighet i beteendet vid jÀmförelse och sortering av olika typer. För att lösa detta problem hÀmtas nu en överflödig mÀngd data frÄn PostgreSQL, och filtreringen av resultatet görs pÄ FerretDB:s sida, vilket har möjliggjort att Äterskapa MongoDB:s beteende i de flesta situationer.
Kostnaden för ökad kompatibilitet har blivit en minskad prestanda, som i framtida versioner planeras att kompenseras genom selektiv filtrering pÄ FerretDB:s sida av endast de förfrÄgningar dÀr beteendet avviker. Till exempel kan förfrÄgan "db.collection.find({_id: 'some-id-value'})" helt hanteras i PostgreSQL. Projektets primÀra uppgift i detta utvecklingsstadium Àr att uppnÄ kompatibilitet med MongoDB, medan prestanda för nÀrvarande skjuts Ät sidan. Bland de funktionella förÀndringar som noteras i den nya versionen finns stöd för alla bitoperatörer, jÀmförelseoperatorn "$eq" och dessutom operatorerna "$elemMatch" och "$bitsAllClear."
KĂ€lla: opennet.ru
