Rilascio di FerretDB 0.1, un'implementazione di MongoDB basata sul DBMS PostgreSQL

È stato pubblicato il rilascio del progetto FerretDB 0.1 (ex MangoDB) che consente di sostituire il DBMS document-based MongoDB con PostgreSQL senza apportare modifiche al codice dell'applicazione. FerretDB è implementato come un server proxy che traduce le chiamate a MangoDB in query SQL a PostgreSQL, consentendo di utilizzare PostgreSQL come archivio effettivo. Il codice è scritto in Go e distribuito sotto la licenza Apache 2.0.

La necessità di migrazione potrebbe sorgere a causa del passaggio di MongoDB a una licenza SSPL proprietaria, che si basa sulla licenza AGPLv3, ma non è aperta, poiché contiene un requisito discriminatorio di fornire sotto la licenza SSPL non solo il codice dell'applicazione stessa, ma anche il codice sorgente di tutti i componenti coinvolti nella fornitura del servizio cloud.

Il pubblico target di FerretDB sono gli utenti che non utilizzano le funzionalità avanzate di MongoDB nelle loro applicazioni, ma desiderano utilizzare uno stack software completamente aperto. Allo stadio attuale di sviluppo, FerretDB supporta ancora solo una parte delle funzionalità MongoDB che vengono spesso utilizzate nelle applicazioni tipiche. In futuro, intendono raggiungere la piena compatibilità con i driver per MongoDB e fornire la possibilità di utilizzare FerretDB come sostituto trasparente di MongoDB.

Ricordiamo che MongoDB occupa una nicchia tra i sistemi veloci e scalabili che gestiscono i dati in formato chiave/valore e i DBMS relazionali che sono funzionali e facili da formulare query. MongoDB supporta l'archiviazione di documenti in un formato simile a JSON, ha un linguaggio abbastanza flessibile per generare query, può creare indici per vari attributi archiviati, fornisce in modo efficiente l'archiviazione di oggetti binari di grandi dimensioni, supporta la registrazione di operazioni per la modifica e l'aggiunta di dati al database, può funziona secondo il paradigma Map/Reduce, supporta la replica e la costruzione di configurazioni tolleranti agli errori.

Il rilascio di FerretDB 0.1.0 ha completamente ridisegnato il metodo di recupero dei dati da PostgreSQL. In precedenza, per ogni richiesta MongoDB in entrata, veniva generata una query SQL su PostgreSQL, utilizzando funzioni per lavorare con il formato JSON e filtrare i risultati sul lato PostgreSQL. A causa delle differenze nella semantica delle funzioni json PostgreSQL e MongoDB, si è verificata una discrepanza nel comportamento durante il confronto e l'ordinamento di tipi diversi. Per risolvere questo problema, i dati vengono ora recuperati in modo ridondante da PostgreSQL e il risultato viene filtrato sul lato FerretDB, il che ha reso possibile replicare il comportamento di MongoDB nella maggior parte delle situazioni.

Il prezzo della maggiore compatibilità è stato un calo delle prestazioni, che nelle versioni future si prevede di compensare filtrando selettivamente sul lato FerretDB solo le query per le quali esiste una discrepanza nel comportamento. Ad esempio, la query "db.collection.find({_id: 'some-id-value'})" può essere elaborata interamente in PostgreSQL. L'obiettivo principale del progetto in questa fase di sviluppo è raggiungere la compatibilità con MongoDB e per ora le prestazioni sono relegate in secondo piano. Tra le modifiche funzionali della nuova versione si segnala il supporto per tutti gli operatori bit, l'operatore di confronto “$eq”, nonché gli operatori “$elemMatch” e “$bitsAllClear”.

Fonte: opennet.ru

Aggiungi un commento