Jump toUpdate content

Managed Document Databases Overview

FerretDB is an open-source database engine that provides a MongoDB®-compatible API layer over a PostgreSQL engine to store and retrieve data.

The engine allows the query of document data through a NoSQL, JSON-structured query language.

FerretDB relies on a modular architecture built on top of PostgreSQL. Documents are stored in binary JSON format using the corresponding PostgreSQL column type. FerretDB also uses several tables in PostgreSQL to store database structure information such as database names, collection names, and user access management.

FerretDB translates MongoDB® wire protocol queries to SQL to be remain compatible with existing software and tools built on MongoDB®.

The image above depicts a common use-case of Scaleway Managed Document Databases. Managed Document Databases are hosted on Instances running a PostgreSQL Agent and a FerretDB container.

In this example, the Database Instance is attached to a Private Network. High Availability is also activated, meaning that data is streamed continuously from the Database Instance to a secondary node. In the example, Database Instance configuration is stored on a specific distributed storage, and heartbeats are continuously performed to monitor the Instance’s status and redirect traffic automatically if an incident is detected on the primary Database Instance. Finally, the Database Instance data is stored on Block Storage.

Contributing to FerretDB

During the Public Beta phase of Managed Document Databases, you can contribute to FerretDB’s open-source project by anonymously sharing the telemetry data of your FerretDB Database Instances.

Collected data

The data that is collected is anonymous, and is restrained to:

  • FerretDB version
  • random instance UUID
  • autonomous system number, cloud provider region, or country derived from IP address (but the not IP address itself)
  • uptime
  • backend (PostgreSQL or SQLite) version
  • installation type (Docker, package, cloud provider marketplace, self-built)
  • build configuration (Go version, build flags and tags)
  • command statistics:
    • protocol operation codes (e.g. OP_MSG, OP_QUERY);
    • command names (e.g. find, aggregate);
    • standard arguments (e.g. sort, $count (stage), but not parameters values or response contents);
    • error codes (e.g. NotImplemented, InternalError; or ok).

You can find the list above and more information in the Ferret DB Telemetry reporting documentation page.