FerretDB

module
v1.21.0 Latest Latest
Warning

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

Go to latest
Published: Mar 20, 2024 License: Apache-2.0

README

FerretDB

Go Reference

Go codecov

Security Packages Docs

FerretDB was founded to become the de-facto open-source substitute to MongoDB. FerretDB is an open-source proxy, converting the MongoDB 5.0+ wire protocol queries to SQL - using PostgreSQL or SQLite as a database engine.

flowchart LR
  A["Any application\nAny MongoDB driver"]
  F{{FerretDB}}
  P[(PostgreSQL)]
  S[("SQLite")]

  A -- "MongoDB protocol\nBSON" --> F
  F -- "PostgreSQL protocol\nSQL" --> P
  F -. "SQLite library\nSQL" .-> S

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 do not require any advanced features offered by MongoDB; however, they need an easy-to-use open-source document database solution. Recognizing this, FerretDB is here to fill that gap.

Scope and current state

FerretDB is compatible with MongoDB drivers and popular MongoDB tools. It functions as a drop-in replacement for MongoDB 5.0+ in many cases. Features are constantly being added to further increase compatibility and performance.

We welcome all contributors. See our public roadmap, a list of known differences with MongoDB, and contributing guidelines.

Quickstart

Run this command to start FerretDB with PostgreSQL backend:

docker run -d --rm --name ferretdb -p 27017:27017 ghcr.io/ferretdb/all-in-one

Alternatively, run this command to start FerretDB with SQLite backend:

docker run -d --rm --name ferretdb -p 27017:27017 -e FERRETDB_HANDLER=sqlite ghcr.io/ferretdb/all-in-one

This command will start a container with FerretDB, PostgreSQL/SQLite, and MongoDB Shell for quick testing and experiments. However, it is unsuitable for production use cases because it keeps all data inside and loses it on shutdown. See our Docker quickstart guide for instructions that don't have those problems.

With that container running, you can:

  • Connect to it with any MongoDB client application using MongoDB URI mongodb://127.0.0.1:27017/.
  • Connect to it using MongoDB Shell by just running mongosh. If you don't have it installed locally, you can run docker exec -it ferretdb mongosh.
  • For the PostgreSQL backend, connect to it by running docker exec -it ferretdb psql -U username ferretdb. FerretDB uses PostgreSQL schemas for MongoDB databases. So, if you created some collections in the test database using any MongoDB client, you can switch to it by running SET search_path = 'test'; query and see a list of PostgreSQL tables by running \d psql command.
  • For the SQLite backend, connect to it by running docker exec -it ferretdb sqlite3 /state/<database>.sqlite. So, if you created some collections in the test database using any MongoDB client, run docker exec -it ferretdb sqlite3 /state/test.sqlite and see a list of SQLite tables by running .tables command.

You can stop the container with docker stop ferretdb.

We also provide binaries and packages for various Linux distributions, as well as Go library package that embeds FerretDB into your application. See our documentation for more details.

Building and packaging

[!NOTE] We strongly advise users not to build FerretDB themselves. Instead, use binaries, Docker images, or packages provided by us.

FerretDB could be built as any other Go program, but a few generated files and build tags could affect it. See there for more details.

Managed FerretDB at cloud providers

Documentation

Community

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

Directories

Path Synopsis
build
version
Package version provides information about FerretDB version and build configuration.
Package version provides information about FerretDB version and build configuration.
cmd
Package ferretdb provides embeddable FerretDB implementation.
Package ferretdb provides embeddable FerretDB implementation.
integration module
internal
backends
Package backends provides common interfaces ([Backend], [Database], and [Collection]) and code for all backend implementations.
Package backends provides common interfaces ([Backend], [Database], and [Collection]) and code for all backend implementations.
backends/decorators/dummy
Package dummy provides decorators that delegate all methods to wrapped objects.
Package dummy provides decorators that delegate all methods to wrapped objects.
backends/decorators/oplog
Package oplog provides decorators that add OpLog functionality to the backend.
Package oplog provides decorators that add OpLog functionality to the backend.
backends/hana
Package hana provides backend for SAP HANA.
Package hana provides backend for SAP HANA.
backends/mysql
Package mysql provides backend for MySQL and compatible databases.
Package mysql provides backend for MySQL and compatible databases.
backends/mysql/metadata
Package metadata provides access to databases and collections information.
Package metadata provides access to databases and collections information.
backends/mysql/metadata/pool
Package pool provides access to MySQL connections.
Package pool provides access to MySQL connections.
backends/postgresql
Package postgresql provides backend for PostgreSQL and compatible databases.
Package postgresql provides backend for PostgreSQL and compatible databases.
backends/postgresql/metadata
Package metadata provides access to databases and collections information.
Package metadata provides access to databases and collections information.
backends/postgresql/metadata/pool
Package pool provides access to PostgreSQL connections.
Package pool provides access to PostgreSQL connections.
backends/sqlite
Package sqlite provides SQLite backend.
Package sqlite provides SQLite backend.
backends/sqlite/metadata
Package metadata provides access to databases and collections information.
Package metadata provides access to databases and collections information.
backends/sqlite/metadata/pool
Package pool provides access to SQLite databases and their connections.
Package pool provides access to SQLite databases and their connections.
bson
Package bson implements encoding and decoding of BSON as defined by https://bsonspec.org/spec.html.
Package bson implements encoding and decoding of BSON as defined by https://bsonspec.org/spec.html.
bson/oldbson
Package oldbson contains old implementation of BSON that is used for cross-testing only.
Package oldbson contains old implementation of BSON that is used for cross-testing only.
clientconn
Package clientconn provides client connection implementation.
Package clientconn provides client connection implementation.
clientconn/conninfo
Package conninfo provides access to connection-specific information.
Package conninfo provides access to connection-specific information.
clientconn/connmetrics
Package connmetrics provides listener and connection metrics.
Package connmetrics provides listener and connection metrics.
clientconn/cursor
Package cursor provides access to cursor registry.
Package cursor provides access to cursor registry.
driver
Package driver provides low-level wire protocol driver for testing.
Package driver provides low-level wire protocol driver for testing.
handler
Package handler provides a universal handler implementation for all backends.
Package handler provides a universal handler implementation for all backends.
handler/common
Package common contains code used to be shared by different handlers.
Package common contains code used to be shared by different handlers.
handler/common/aggregations
Package aggregations provides aggregation pipelines.
Package aggregations provides aggregation pipelines.
handler/common/aggregations/operators
Package operators provides aggregation operators.
Package operators provides aggregation operators.
handler/common/aggregations/operators/accumulators
Package accumulators provides aggregation accumulator operators.
Package accumulators provides aggregation accumulator operators.
handler/common/aggregations/stages
Package stages provides aggregation stages.
Package stages provides aggregation stages.
handler/common/aggregations/stages/projection
Package projection provides projection for aggregations.
Package projection provides projection for aggregations.
handler/commonpath
Package commonpath contains functions used for path.
Package commonpath contains functions used for path.
handler/handlererrors
Package handlererrors provides handlers errors.
Package handlererrors provides handlers errors.
handler/handlerparams
Package handlerparams provides functions for parsing handlers parameters.
Package handlerparams provides functions for parsing handlers parameters.
handler/proxy
Package proxy sends requests to another wire protocol compatible service.
Package proxy sends requests to another wire protocol compatible service.
handler/registry
Package registry provides a registry of handlers.
Package registry provides a registry of handlers.
handler/sjson
Package sjson provides converters from/to jsonb with some extensions for built-in and `types` types.
Package sjson provides converters from/to jsonb with some extensions for built-in and `types` types.
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/ctxutil
Package ctxutil provides context helpers.
Package ctxutil provides context helpers.
util/debug
Package debug provides debug facilities.
Package debug provides debug facilities.
util/debugbuild
Package debugbuild provides information about whatever this is a debug build or not.
Package debugbuild provides information about whatever this is a debug build or not.
util/fsql
Package fsql provides database/sql utilities.
Package fsql provides database/sql utilities.
util/hex
Package hex provides helpers for working with hex dumps.
Package hex provides helpers for working with hex dumps.
util/iterator
Package iterator describes a generic Iterator interface and related utilities.
Package iterator describes a generic Iterator interface and related utilities.
util/iterator/testiterator
Package testiterator provides a helper for checking iterator implementations.
Package testiterator provides a helper for checking iterator implementations.
util/lazyerrors
Package lazyerrors provides error wrapping with file location.
Package lazyerrors provides error wrapping with file location.
util/logging
Package logging provides logging helpers.
Package logging provides logging helpers.
util/must
Package must provides helper functions that panic on error.
Package must provides helper functions that panic on error.
util/observability
Package observability provides abstractions for tracing, metrics, etc.
Package observability provides abstractions for tracing, metrics, etc.
util/password
Package password provides utilities for password hashing and verification.
Package password provides utilities for password hashing and verification.
util/resource
Package resource provides utilities for tracking resource lifetimes.
Package resource provides utilities for tracking resource lifetimes.
util/state
Package state stores FerretDB process state.
Package state stores FerretDB process state.
util/telemetry
Package telemetry provides basic telemetry facilities.
Package telemetry provides basic telemetry facilities.
util/testutil
Package testutil provides testing helpers.
Package testutil provides testing helpers.
util/testutil/testfail
Package testfail provides testing helpers for expected tests failures.
Package testfail provides testing helpers for expected tests failures.
util/testutil/teststress
Package teststress provides a helper for stress testing.
Package teststress provides a helper for stress testing.
util/testutil/testtb
Package testtb provides a common testing interface.
Package testtb provides a common testing interface.
util/tlsutil
Package tlsutil provides TLS utilities.
Package tlsutil provides TLS utilities.
wire
Package wire provides wire protocol implementation.
Package wire provides wire protocol implementation.
tools module

Jump to

Keyboard shortcuts

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