È stato rilasciato il progetto FerretDB 0.3, che consente di sostituire il database orientato ai documenti MongoDB con PostgreSQL senza modificare il codice delle applicazioni. FerretDB è implementato come server proxy, che traduce le richieste a MongoDB in query SQL a PostgreSQL, permettendo quindi di utilizzare PostgreSQL come effettivo sistema di archiviazione. Il codice è scritto in linguaggio Go ed è distribuito con 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, poiché contiene un requisito discriminatorio di fornitura sotto licenza SSPL non solo del codice dell'applicazione stessa, ma anche dei sorgenti di tutti i componenti coinvolti nella fornitura del servizio cloud.
Il principale pubblico target di FerretDB sono gli utenti che non utilizzano nelle loro applicazioni le funzionalità avanzate di MongoDB, ma desiderano utilizzare un'intera stack software open source. Attualmente, FerretDB supporta solo una parte delle funzionalità di MongoDB, quelle più frequentemente utilizzate nelle applicazioni standard. In futuro, è previsto di raggiungere la piena compatibilità con i driver per MongoDB e di fornire la possibilità di utilizzare FerretDB come sostituto trasparente di MongoDB.
MongoDB occupa una posizione intermedia tra sistemi rapidi e scalabili che gestiscono dati in formato chiave/valore e i database relazionali, funzionali e facili da interrogare. MongoDB supporta la memorizzazione di documenti in formato simile a JSON, ha un linguaggio sufficientemente flessibile per la creazione di query, può creare indici per vari attributi memorizzati, gestisce efficacemente la memorizzazione di grandi oggetti binari, supporta il logging delle operazioni di modifica e aggiunta dei dati nel database, può operare secondo la paradigma Map/Reduce, supporta la replica e costruzioni di configurazioni ad alta disponibilità.
Nella versione di FerretDB 0.3 è stata implementata la comando findAndModify che modifica un documento, restituendo però la sua versione originale. Sono stati implementati gli operatori di aggiornamento dei campi — $inc e $set. È stato aggiunto il supporto per l'ordinamento dei tipi di dati scalari.
Fonte: opennet.ru
