Release FerretdB 0.1, implementing MongoDB protocol on top of POSTGRESQL DBMS

Published Project Issue Ferretdb 0.1 (former ManGODB), which allows you to replace the MongoDB document-oriented DBMS on PostgreSQL without making changes to application code. Ferretdb is implemented as a proxy server that translates access to the ManGODB to SQL requests to PostgreSQL, which allows you to use PostgreSQL as the actual storage. The code is written in GO and distributed under the Apache 2.0 license.

The migration need may arise due to the MongoDB transition to a non-free license. SSPL, which is based on the AGPLV3 license, but is not open, as it contains a discriminatory delivery requirement under the SSPL license not only the code of the application itself, but also the source texts of all components involved in the provision of cloud service.

The FerretdB target audience is called users who do not apply advanced Mongodb capabilities in their applications, but wish to use a fully open software stack. At the current stage of development, FerretdB has been supporting only a part of the MongoDB capabilities most frequently used in typical applications. In the future, it is planned to achieve full compatibility with drivers for MongoDB and provide the ability to use FerretdB as a transparent replacement of Mongodb.

Recall that Mongodb occupies a niche between the fast and scalable systems that operate in key / value data, and relational DBMS, functional and convenient in the formation of requests. MONGODB supports the storage of documents in a JSON-like format, has a fairly flexible language to generate queries, can create indexes for various stored attributes, effectively ensures the storage of large binary objects, supports logging operations to change and add data to the database, can operate in accordance with the paradigm MAP / REDUCE, supports replication and construct failover configurations.

The release of FerretdB 0.1.0 is completely redesigned by the method of extracting data from PostgreSQL. Previously, one SQL request to PostgreSQL has been formed for each incoming MONGODB request using functions with JSON format and filtering results on the side.
PostgreSQL. Due to the differences in the semantics of JSON functions PostgreSQL and MONGODB there was a non-compliance of behavior when comparing and sorting different types. To solve this problem from PostgreSQL, a redundant data sample is now retrieved, and the result filtering is performed on the FerretDB side, which made it possible to repeat the MongoDB behavior in most situations.

/Media reports.