PostgreSQL DBMS に基づく MongoDB の実装である FerretDB 0.1 のリリース

FerretDB 0.1 プロジェクト (旧 MangoDB) のリリースが公開され、アプリケーション コードを変更せずにドキュメント指向 DBMS MongoDB を PostgreSQL に置き換えることができます。 FerretDB は、MangoDB への呼び出しを PostgreSQL への SQL クエリに変換するプロキシ サーバーとして実装されており、PostgreSQL を実際のストレージとして使用できるようにします。 コードは Go で書かれており、Apache 2.0 ライセンスに基づいて配布されています。

MongoDB が独自の SSPL ライセンスに移行するために移行の必要性が生じる可能性があります。このライセンスは AGPLv3 ライセンスに基づいていますが、アプリケーション コード自体だけでなく、SSPL ライセンスの下で提供するという差別的な要件が含まれているためオープンではありません。プロビジョニング クラウド サービスに関与するすべてのコンポーネントのソース コード。

FerretDB の対象ユーザーは、アプリケーションで MongoDB の高度な機能を使用していないが、完全にオープンなソフトウェア スタックを使用したいと考えているユーザーです。 開発の現段階では、FerretDB はまだ、一般的なアプリケーションで最も頻繁に使用される MongoDB 機能の一部のみをサポートしています。 将来的には、MongoDB のドライバーとの完全な互換性を実現し、MongoDB の透過的な代替として FerretDB を使用できる機能を提供する予定です。

MongoDB は、キー/値形式でデータを操作する高速でスケーラブルなシステムと、機能的でクエリの作成が簡単なリレーショナル DBMS の間のニッチを占めていることを思い出してください。 MongoDB は、JSON のような形式でのドキュメントの保存をサポートし、クエリを生成するためのかなり柔軟な言語を備え、保存されたさまざまな属性のインデックスを作成でき、大きなバイナリ オブジェクトのストレージを効率的に提供し、データベースへのデータの変更および追加のための操作のログをサポートします。 Map/Reduce パラダイムに従って動作し、フォールト トレラント構成のレプリケーションと構築をサポートします。

FerretDB 0.1.0 のリリースでは、PostgreSQL からデータを取得する方法が完全に再設計されました。 以前は、受信する MongoDB リクエストごとに、JSON 形式を操作し、PostgreSQL 側で結果をフィルタリングする関数を使用して、PostgreSQL に対して XNUMX つの SQL クエリが生成されていました。 PostgreSQL と MongoDB の json 関数のセマンティクスの違いにより、異なる型を比較および並べ替える際の動作に不一致がありました。 この問題を解決するために、PostgreSQL からデータを冗長に取得し、その結果を FerretDB 側でフィルタリングすることで、ほとんどの状況で MongoDB の動作を再現できるようになりました。

互換性の向上の代償としてパフォーマンスの低下が発生しましたが、将来のリリースでは、動作に矛盾があるクエリのみを FerretDB 側で選択的にフィルタリングすることでこれを補うことが期待されています。 たとえば、クエリ「db.collection.find({_id: 'some-id-value'})」は、すべて PostgreSQL で処理できます。 開発のこの段階でのプロジェクトの主な目標は、MongoDB との互換性を実現することであり、今のところパフォーマンスは背景に追いやられています。 新しいバージョンの機能変更の中で、全ビット演算子、「$eq」比較演算子、および「$elemMatch」および「$bitsAllClear」演算子のサポートが注目されます。

出所: オープンネット.ru

コメントを追加します