Release av FerretDB 0.1, en implementering av MongoDB baserad på PostgreSQL DBMS

Utgivningen av FerretDB 0.1-projektet (tidigare MangoDB) har publicerats, vilket gör att du kan ersätta det dokumentorienterade DBMS MongoDB med PostgreSQL utan att göra ändringar i applikationskoden. FerretDB är implementerad 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 lagringen. Koden är skriven i Go och distribueras under Apache 2.0-licensen.

Behovet av migrering kan uppstå på grund av MongoDB:s övergång till en proprietär SSPL-licens, som är baserad på AGPLv3-licensen, men som inte är öppen, eftersom den innehåller ett diskriminerande krav att leverera under SSPL-licensen inte bara själva applikationskoden utan också källkoden för alla komponenter som är involverade i tillhandahållandet av molntjänsten.

FerretDBs målgrupp är användare som inte använder de avancerade funktionerna hos MongoDB i sina applikationer, utan vill använda en helt öppen mjukvarustack. I det nuvarande utvecklingsstadiet stöder FerretDB fortfarande bara en del av MongoDB-funktionerna som oftast används i typiska applikationer. I framtiden planerar de att uppnå full kompatibilitet med drivrutiner för MongoDB och ge möjligheten att använda FerretDB som en transparent ersättning för MongoDB.

Låt oss komma ihåg att MongoDB upptar en nisch mellan snabba och skalbara system som använder data i nyckel-/värdeformat och relationella DBMS:er som är funktionella och lätta att formulera frågor. MongoDB stöder lagring av dokument i ett JSON-liknande format, har ett ganska flexibelt språk för att generera frågor, kan skapa index för olika lagrade attribut, tillhandahåller effektivt lagring av stora binära objekt, stöder loggning av operationer för att ändra och lägga till data i databasen, kan arbeta i enlighet med paradigmet Map/Reduce, stödjer replikering och konstruktion av feltoleranta konfigurationer.

Utgivningen av FerretDB 0.1.0 gjorde helt om metoden för att hämta data från PostgreSQL. Tidigare, för varje inkommande MongoDB-förfrågan, genererades en SQL-fråga till PostgreSQL, med funktioner för att arbeta med JSON-formatet och filtrera resultaten på PostgreSQL-sidan. På grund av skillnader i semantiken för PostgreSQL- och MongoDB json-funktioner, fanns det en diskrepans i beteende när man jämförde och sorterade olika typer. För att lösa detta problem hämtas nu data redundant från PostgreSQL, och resultatet filtreras på FerretDB-sidan, vilket gjorde det möjligt att replikera beteendet hos MongoDB i de flesta situationer.

Priset för ökad kompatibilitet var en minskning av prestanda, vilket de i framtida utgåvor förväntar sig att kompensera genom att selektivt filtrera på FerretDB-sidan endast frågor för vilka det finns en diskrepans i beteende. Till exempel kan frågan "db.collection.find({_id: 'some-id-value'})" bearbetas helt i PostgreSQL. Det primära målet med projektet i det här utvecklingsstadiet är att uppnå kompatibilitet med MongoDB, och prestandan är förpassad till bakgrunden för nu. Bland funktionsförändringarna i den nya versionen noteras stöd för alla bitoperatorer, jämförelseoperatorn "$eq" samt operatorerna "$elemMatch" och "$bitsAllClear".

Källa: opennet.ru

Lägg en kommentar