Uscita di FerretDB 0.1, implementazione di MongoDB basata su PostgreSQL

È stata pubblicata la versione 0.1 del progetto FerretDB (ex MangoDB), che consente di sostituire il database MongoDB orientato ai documenti con PostgreSQL senza modificare il codice delle applicazioni. FerretDB è implementato come server proxy, che traduce le richieste a MangoDB in query SQL per PostgreSQL, permettendo così di utilizzare PostgreSQL come effettivo repository. Il codice è scritto in Go e distribuito sotto la licenza Apache 2.0.

La necessità di migrazione può sorgere a causa del passaggio di MongoDB a una licenza non libera SSPL, che si basa sulla licenza AGPLv3, ma non è aperta in quanto contiene un requisito discriminatorio di fornitura sotto la licenza SSPL non solo del codice dell'applicazione stessa, ma anche dei codici sorgente di tutti i componenti coinvolti nella fornitura del servizio cloud.

FerretDB si rivolge a quegli utenti che non utilizzano le funzionalità avanzate di MongoDB nelle loro applicazioni, ma desiderano utilizzare un stack software completamente open source. Attualmente, FerretDB supporta solo alcune delle funzionalità di MongoDB più comunemente usate nelle applicazioni standard. In futuro si prevede di raggiungere la piena compatibilità con i driver di MongoDB e di offrire la possibilità di utilizzare FerretDB come una sostituzione trasparente di MongoDB.

Ricordiamo che MongoDB occupa un'interfaccia tra sistemi rapidi e scalabili che gestiscono dati in formato chiave/valore e database relazionali, funzionali e facili da interrogare. MongoDB supporta la memorizzazione di documenti in un formato simile a JSON, possiede un linguaggio abbastanza flessibile per la creazione di query, può creare indici per vari attributi memorizzati, gestisce in modo efficiente la memorizzazione di grandi oggetti binari, supporta il logging delle operazioni relative a modifiche e aggiunte di dati nel database, può operare secondo la paradigma Map/Reduce, ed è in grado di supportare la replica e la creazione di configurazioni a prova di guasto.

Nella versione 0.1.0 di FerretDB è stato completamente ridisegnato il metodo di estrazione dei dati da PostgreSQL. In precedenza, per ogni richiesta in arrivo da MongoDB veniva generata una singola query SQL a PostgreSQL, utilizzando funzioni per lavorare con il formato JSON e filtrando i risultati sul lato di PostgreSQL. A causa delle differenze nella semantica delle funzioni json tra PostgreSQL e MongoDB, si riscontravano comportamenti incoerenti durante il confronto e l'ordinamento di diversi tipi. Per risolvere questo problema, ora viene estratto un set di dati sovrabbondante da PostgreSQL, mentre il filtering dei risultati avviene sul lato di FerretDB, il che ha permesso di replicare il comportamento di MongoDB nella maggior parte delle situazioni.

Il costo dell'aumento della compatibilità è stata una diminuzione delle prestazioni, che si prevede di compensare nelle future versioni attraverso un filtro selettivo su FerretDB solo per le query in cui si osserva un comportamento divergente. 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, mentre le prestazioni sono messe in secondo piano. Tra le modifiche funzionali nella nuova versione, si segnala il supporto per tutti gli operatori bitwise, l'operatore di confronto «$eq», nonché gli operatori «$elemMatch» e «$bitsAllClear».

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster