FerretDB

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 4, 2022 License: Apache-2.0

README

FerretDB

Go Integration Docker codecov

FerretDB (previously MangoDB) was founded to become the de-facto open-source substitute to MongoDB. FerretDB is an open-source proxy, converting the MongoDB wire protocol queries to SQL - using PostgreSQL as a database engine.

Why do we need FerretDB?

MongoDB was originally an eye-opening technology for many of us developers, empowering us to build applications faster than using relational databases. In its early days, its ease-to-use and well-documented drivers made MongoDB one of the simplest database solutions available. However, as time passed, MongoDB abandoned its open-source roots; changing the license to SSPL - making it unusable for many open source and early stage commercial projects.

Most MongoDB users are not in need of many advanced features offered by MongoDB; however, they are in need of an easy to use open-source database solution. Recognizing this, FerretDB is here to fill that gap.

Scope

FerretDB will be compatible with MongoDB drivers and will strive to serve as a drop-in replacement for MongoDB.

Current state

What you see here is a tech demo - intended to show a proof of concept. Over the next couple of months we will be adding more. See this example for a short demonstration.

FerretDB is in its very early stages and welcomes all contributors. See our CONTRIBUTING.md.

Quickstart

These steps describe a quick local setup. They are not suitable for most production use-cases because they keep all data inside containers.

  1. Store the following in the docker-compose.yml file:
version: "3"

services:
  postgres:
    image: postgres:14
    container_name: postgres
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=user
      - POSTGRES_DB=ferretdb
      - POSTGRES_HOST_AUTH_METHOD=trust

  postgres_setup:
    image: postgres:14
    container_name: postgres_setup
    restart: on-failure
    entrypoint: ["sh", "-c", "psql -h postgres -U user -d ferretdb -c 'CREATE SCHEMA IF NOT EXISTS test'"]

  ferretdb:
    image: ghcr.io/ferretdb/ferretdb:latest
    container_name: ferretdb
    restart: on-failure
    ports:
      - 27017:27017
    command: ["-listen-addr=:27017", "-postgresql-url=postgres://user@postgres:5432/ferretdb"]

networks:
  default:
    name: ferretdb
  • postgres container runs PostgreSQL 14 that would store data.
  • postgres_setup container creates a PostgreSQL schema test that would act like a FerretDB database of the same name.
  • ferretdb runs FerretDB.
  1. Start services with docker-compose up -d.

  2. If you have mongosh installed, just run it to connect to FerretDB database test. If not, run the following command to run mongosh inside the temporary MongoDB container, attaching to the same Docker network:

docker run --rm -it --network=ferretdb --entrypoint=mongosh mongo:5 mongodb://ferretdb/

Community

If you want to contact FerretDB Inc., please use this form.

Directories

Path Synopsis
cmd
envtool command
ferretdb command
fuzztool command
integration module
internal
bson
Package bson provides converters from/to BSON for built-in and `types` types.
Package bson provides converters from/to BSON for built-in and `types` types.
clientconn
Package clientconn provides client connection implementation.
Package clientconn provides client connection implementation.
fjson
Package fjson provides converters from/to FJSON (JSON with some extensions) for built-in and `types` types.
Package fjson provides converters from/to FJSON (JSON with some extensions) for built-in and `types` types.
handlers
Package handlers hosts wire protocol commands handlers.
Package handlers hosts wire protocol commands handlers.
handlers/common
Package common provides common code for all handlers.
Package common provides common code for all handlers.
handlers/dummy
Package dummy implements a dummy handler.
Package dummy implements a dummy handler.
handlers/pg
Package pg provides PostgreSQL handler.
Package pg provides PostgreSQL handler.
handlers/pg/pgdb
Package pgdb provides PostgreSQL connection utilities.
Package pgdb provides PostgreSQL connection utilities.
handlers/proxy
Package proxy sends requests to another wire protocol compatible service.
Package proxy sends requests to another wire protocol compatible service.
types
Package types provides Go types matching BSON types that don't have built-in Go equivalents.
Package types provides Go types matching BSON types that don't have built-in Go equivalents.
util/lazyerrors
Package lazyerrors provides temporary error wrapping for lazy developers.
Package lazyerrors provides temporary error wrapping for lazy developers.
util/must
Package must provides Do helper function.
Package must provides Do helper function.
util/testutil
Package testutil provides testing helpers.
Package testutil provides testing helpers.
wire
Package wire provides wire protocol implementation.
Package wire provides wire protocol implementation.
tools module
golangci module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL