FerretDB:一個真正開源的 MongoDB 選擇

今天在 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 的選擇。