今天在 Hacker News 看到一篇討論 FerretDB: A truly open-source MongoDB alternative 覺得很有趣就看了一下。
FerretDB
FerretDB 看起來是為了 MongoDB 衍生出來的新資料庫,而為什麼會有這個資料庫呢?
MongoDB 在演進的過程中把 License 改成了 Server Side Public License (SSPL) v1,大家其實對這個 License 有一些聲音,這邊就不討論它。
而 FerretDB 改善了它使用了 Apache License 2.0 來開發可以看到在 GitHub 上的 License 聲明 https://github.com/FerretDB/FerretDB/blob/main/LICENSE
所以就官網的說法 “A truly Open Source MongoDB alternative” 感覺它想要成為真正開源的 MongoDB

FerretDB 使用 docker-compose 啟動
在啟動上可以看一下它的 docker-compose 文件
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"]
使用 PostgreSQL 引擎
它底層用了 PostgreSQL 引擎在上層實作一個 proxy 介面來介接讓 mongosh 指令可以使用,我覺得這個做法滿有趣的不過在實際使用上 NoSQL 通常是為了改善效能所使用的,今天在底層又使用了 RDBMS 作為引擎這邊就讓我覺得不太理解,但是用起來好不好用或是效能如何的詳細資訊可能要真正使用才會知道,這邊就以一個新專案的角度來看它可能可以成為一個 MongoDB 的選擇。