最近s日プロジェクトの立ち上げのニュースが発表されました FerretDB(以前のMangoDB)。これにより、アプリケーションコードを変更せずに、MongoDBのドキュメント指向DBMSをPostgreSQLに置き換えることができます。
FerretDBは、MongoDBへの呼び出しをPostgreSQLへのSQLクエリに変換するプロキシサーバーとして実装されているため、PostgreSQLを実際のストレージとして使用できます。
FerretDB(以前のMangoDB)は、MongoDBの事実上のオープンソースの代替品となるために設立されました。 FerretDBは、データベースエンジンとしてPostgreSQLを使用して、MongoDBワイヤープロトコルクエリをSQLに変換するオープンソースプロキシです。
移行の必要性は、MongoDBがAGPLv3ライセンスに基づく非フリーSSPLライセンスに移行するために発生する可能性がありますが、アプリケーションだけでなくSSPLライセンスの下で提供する差別的な要件が含まれているため、オープンソースではありません。コード自体だけでなく、クラウドサービスの提供に関係するすべてのコンポーネントのソースコードも含まれます。
FerretDBの対象読者は、MongoDBの高度な機能を使用しないユーザーです。 アプリケーションでは、完全にオープンなソフトウェアスタックを使用したい。
開発の現段階では、FerretDB それでもMongoDB機能の一部のみをサポートします これは、一般的なアプリケーションで最も頻繁に使用されます。 将来的には、MongoDBの完全なドライバーサポートを実現し、FerretDBをMongoDBの透過的な代替として使用する機能を提供する予定です。
覚えておく必要があります MongoDBは、高速でスケーラブルなシステムの中でニッチを占めています キー/値形式のデータとリレーショナルDBMSを操作し、クエリの生成に機能的で便利です。
ほとんどのMongoDBユーザーは、MongoDBが提供する高度な機能の多くを必要としません。 ただし、使いやすいオープンソースデータベースソリューションが必要です。 これを認識して、FerretDBはそのギャップを埋めるためにここにいます。
MongoDBの JSONのような形式でのドキュメントの保存をサポート、クエリを生成するためのかなり柔軟な言語があり、さまざまな格納された属性のインデックスを作成でき、効率的なバイナリラージオブジェクトストレージを提供します。 データを変更および追加する操作のログ記録をサポート データベースに対しては、Map / Reduceパラダイムに従って機能し、レプリケーションとフォールトトレラント構成の構築をサポートします。
FerretDB 0.1.0のリリースでは、次のことに注意してください。 PostgreSQLデータの取得方法を完全に再設計しました。 以前は、着信MongoDBリクエストごとに、SQLからPostgreSQLへのクエリが生成され、関数を使用してJSON形式で動作し、PostgreSQL側で結果をフィルタリングしていました。
違いのため PostgreSQLおよびMongoDBjson関数のセマンティクスでは、 食い違いがありました 異なるタイプを比較および注文するときの動作。 この問題を解決するために、冗長データのサンプルがPostgreSQLから抽出され、結果のフィルタリングがFerretDB側で行われるようになりました。これにより、ほとんどの状況でMongoDBの動作を繰り返すことができます。
互換性の向上の代償は、パフォーマンスの低下でした。 将来のリリースでは、動作の相違があるクエリのみのFerretDB側での選択的フィルタリングによって相殺されると予想されます。
たとえば、クエリ「db.collection.find({_ id:'some-id-value'})」はPostgreSQLで完全に処理できます。 開発のこの段階でのプロジェクトの主な目標は、MongoDBとの互換性を実現することであり、パフォーマンスは依然としてバックグラウンドに追いやられています。
新しいバージョンでの機能変更のうち、すべてのビット演算子、「$ e」比較演算子、および「$elemMatch」および「$bitsAllClear」演算子がサポートされています。
最後に それについてもっと知りたい人のために、コードがGoで記述されており、Apache2.0ライセンスの下で配布されていることを知っておく必要があります。 次のリンクでそのコードを確認できます。