の打ち上げ FerretDB 1.0 プロジェクトの新しいバージョンこれにより、アプリケーション コードを変更することなく、MongoDB のドキュメント指向 DBMS を PostgreSQL に置き換えることができます。 FerretDB は、SQL クエリでの MongoDB 呼び出しを PostgreSQL に変換するプロキシ サーバーとして実装されているため、PostgreSQL を実際のストレージとして使用できます。
バージョン 1.0 は、一般に使用できる最初の安定版リリースとしてマークされています。 FerretDB の主なターゲット ユーザーは、アプリケーションで MongoDB の高度な機能を使用していないが、完全にオープンなソフトウェア スタックを使用したいユーザーです。
現在の開発段階では、 FerretDB は MongoDB 機能のサブセットをサポートします 典型的なアプリケーションで最も一般的に使用されます。 FerretDB を実装する必要性は、MongoDB が AGPLv3 ライセンスに基づくフリーでない SSPL ライセンスに移行することに関連して発生する可能性がありますが、オープン ソースではありません。アプリケーション コード自体だけでなく、クラウド サービスの提供に関連するすべてのコンポーネントのソース コードも含まれます。
MongoDBの キー/値データと DBMS で動作する高速でスケーラブルなシステムの間のニッチを占めています。 機能的でクエリが簡単なリレーショナル データベース。 MongoDB は、JSON に似た形式でのドキュメントの保存をサポートし、クエリを作成するためのかなり柔軟な言語を備え、さまざまな保存された属性のインデックスを作成でき、バイナリ ラージ オブジェクトの効率的なストレージを提供し、データベースへのデータの変更および追加のためのログ操作をサポートし、機能します。 Map/Reduce パラダイムに従って、レプリケーションとフォールト トレラント構成の構築をサポートします。
FerretDB1.0の主な新規性
提示されるこの新しいバージョンでは、次のことが強調されています。 createIndexes および dropIndexes コマンドが実装されました コマンドに加えて、コレクションに XNUMX つ以上のインデックスを作成して配置する getMore は、フェッチされた結果の新しいスライスを表示するために実装されました find や add など、カーソルを返すコマンドの実行から。
新しいバージョンから際立っているもうXNUMXつの変更点 $sum 集計演算子のサポートが追加されました グループ値の合計と追加されたものを計算する $limit および $skip 演算子のサポート 数を制限し、追加時にドキュメントをスキップし、追加時にドキュメントをカウントするために $count 演算子のサポートが追加されました。
これに加えて、 $unwind 演算子のサポートが追加され、入力ドキュメントの配列フィールドを解析し、配列の要素ごとに個別のドキュメントを含むリストを形成し、コマンド collStats の部分的なサポートも追加されたことにも注意してください。 dbStats 、および dataSize を使用して、コレクションとデータベースの統計、およびデータのサイズを取得します。
の 目立つ他の変更 新しいバージョンの:
- `sort`、`limit`、`skip`、`projection` にイテレータが使用されるようになりました
- バンプの依存関係
- リソース追跡の機能強化
- `find` と `count` の `skip` 引数のテストを追加しました
- イテレータを適切に閉じる
- テスト データの多数の初期化の改善
最後に あなたがそれについてもっと知りたいなら、詳細を確認できます 次のリンクで。
このコードに興味がある人は、このコードが Go で書かれており、Apache 2.0 ライセンスの下で配布されていることを知っておく必要があります。
そして、彼らはそれを知っている必要があります FerretDB をテストする最善の方法は、それを変更してホスト上で実行することです (Linux、macOS、または Windows) で、PostgreSQL およびその他の依存関係が Docker Compose を介して Docker コンテナー内で実行されます。
Linux では、docker をホストにインストールする必要があります。 macOS と Windows では Docker Desktop を使用する必要がありますが、Windows ではディストリビューションなしで WSL 2 を使用するように構成する必要があります。 すべてのコマンドはホスト上で実行する必要があります。