私はMongoMapperを試しましたが、機能は完全です(ほぼすべてのAR機能を提供します)が、大きなデータセットを使用した場合のパフォーマンスにはあまり満足していませんでした。モンゴイドと比較した人はいますか?パフォーマンスが向上しますか?
回答:
しばらくMongoMapperを使用していましたが、MongoIdに移行することにしました。その理由は、隠れた問題とユーザーに対する傲慢さです。MongoMapperをCucumberで動作させ(最終的に成功)、プロジェクトが単純であってもいくつかのパッチを適用するために、フープを飛び越えなければなりませんでしたが、それは重要ではありません。(ActiveRecordとの非互換性のために)バグ修正を提出しようとしたとき、彼らは私が問題を見つけたことに腹を立てているようで、私は押しのけられました。テスト中に、テストに合格するようにテストが調整されているときに、クエリの実装に大きなバグが発生しました。私の以前の経験の後、それを提出することをあえてしませんでした。
プルリクエストとバグ/機能の送信数はMongoIdよりも大幅に少ないため、コミュニティへの参加ははるかに少なくなっています。私と同じ経験?
現在、どちらがより多くの機能を備えているかはわかりませんが、MongoMapperの将来はあまりわかりません。自分で問題を修正したり機能を追加したりしてもかまいませんが、バグが修正されない状況は気になります。
私は過去数週間両方を使用しています。Mongomapperは、リレーショナルアソシエーション(非埋め込み)のサポートが強化されており、サードパーティのサポートも強化されています。Mongoidは、より優れたクエリサポート、はるかに優れたドキュメント(MMはほとんどありませんが、Webサイトは現在機能していると思われます)、Rail 3サポート(したがってDeviseサポート)、およびGoogleグループの少し活発なコミュニティを備えています。
結局モンゴイドに行きました。
違い
MongoMapper
モンゴイド
類似点
構成
MongoMapper
defaults: &defaults
host: 127.0.0.1
port: 27017
development:
database: database_name
モンゴイド
development:
sessions:
default:
database: database_name
hosts:
- 127.0.0.1:27017
サードパーティライブラリ
双方は、より良いサードパーティのサポートがあると主張しています。Githubは次のことを明らかにしています。
特に、DeviseはMongoMapperをサポートしていません。
コミットアクティビティ
昨年、MongoidはMongoMapperよりも定期的に保守および更新されているようです。
MongoMapper
モンゴイド
私が見つけた違いはupdate_attribute
、MongoMapperでは、実際にどの属性が変更されたかに関係なく、ドキュメント全体を書き込んでいるように見えることです。Mongoidでは、変更された属性のみを書き込みます。これは、大きなレコードの場合、重大なパフォーマンスの問題になる可能性があります。これは、埋め込まれたドキュメント(ここlabels
)に特に当てはまります。
profile = Profile.find(params[:id])
label = profile.labels.find_or_create_by(idx: params[:idx])
# MongoMapper doesn't have find_or_create_by for embedded docs
# -- you'll have to write custom code
profile.save
でsave
、MongoMapperはprofile
レコード全体を保存しますが、MongoIdは$set
位置ロジックを持つ演算子を使用して、変更されたラベルのみを更新します。
もう1つの問題は、返すフィールドの選択です。どちらもonly
基準をサポートしていますが、Mongoidwithout
はMongoによってネイティブにサポートされている基準もサポートしています。
Mongoidは、APIがより「丸みを帯びて」完全であるように見えます。これは、おそらく、Mongoidがより大きなコードベースであることを説明しています。また、より適切に文書化されているようです。
mongo_extをインストールしましたか?パフォーマンスは、マッパー自体よりもドライバーに関連していると思います。モンゴログを見ると、拡張子がないので、トランサーに多少の遅れがあるようです。
また、monogdbサイトで推奨されているように、必要なフィールドのみを選択してください。
mongo_ext
もはや必要ではなく、基本的なmongo
宝石に組み込まれています。
私はそれらの両方を使用しました、そしてそれらは機能的にほぼ同等です、しかしそれのコード統計を見てください
MongoMapperのコード品質ははるかに優れているようです(同じことをより少ないもので行う場合)。
この統計は自分で計算できます。これがアナライザーですhttps://github.com/alexeypetrushin/code_stats
Mongoidは、構成とマッピングがはるかに優れていると思います。
mongo_ext
もはや必要ではなく、基本的なmongo
宝石に組み込まれています。
DeviseはMongoMapperをサポートしていなかったので、私もRails3の方法で移動することを好みます。そこでモンゴイドに切り替えました。
Mongoidは、Rails3を完全にサポートし、IDマップ機能を備えています。
その他のドキュメントはhttp://mongoid.orgにあります
ここでパフォーマンスを参照してくださいhttp://mongoid.org/performance.html
以下の点が上記の答えに価値を加えることを願っています。
1.Mongoidは完全にRails3と互換性があり、あらゆる場所(検証、シリアル化など)でActiveModelを使用しますが、MongoMapperは引き続きRails 2に焦点を当てており、検証に検証可能なgemを使用しています。
2.Mongoidは、Ruby 1.8.7、1.9.1、および1.9.2ヘッドを公式にサポートし、動作します。
3.Mongoidは、埋め込みドキュメントをより堅牢にサポートし、階層の任意の領域でMongoDBアトミック操作を内部的に実行します。($ set、$ push、$ pullなど)。MMでは、これらの操作を実行するように明示的に指示する必要があります。
4.MongoMapperは、より優れたリレーショナルアソシエーションのサポートを備えており、デフォルトでこのように機能します。
5.MongoMapperはより拡張性が高く、プラグインアーキテクチャにより、ユーザーが独自のライブラリを使用して拡張するのが非常に簡単になります。Mongoidにはこれがありません。
6.MMはIDマップをサポートしますが、Mongoidはサポートしません。
7.MMには、より大きなコミュニティがあり、おそらくより多くのサードパーティライブラリサポートがあります。私はドキュメンテーションとrdocに夢中になりました。
8.Mongoidはマスター/スレーブレプリケーションクラスターをサポートします。(マスターへの書き込み、スレーブへのラウンドロビン読み取り)MMは行いません。
9.Mongoidには非常に豊富なARelスタイル基準APIがあり、MMはAR2スタイルファインダーを使用します。