私はMongoMapperを試しましたが、機能は完全です(ほとんどすべてのAR機能を提供しています)が、大きなデータセットを使用するときのパフォーマンスにはあまり満足していませんでした。モンゴイドと比較した人はいますか?パフォーマンスの向上はありますか?
私はしばらくMongoMapperを使用していましたが、MongoIdに移行することにしました。その理由は、隠れた問題に加えてユーザーに対するtowards慢さです。 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
演算子は、変更されたラベルのみを更新するための位置ロジックを備えています。
別の問題は、返すフィールドを選択することです。両方ともonly
基準をサポートしていますが、Mongoidはwithout
基準もサポートしています。これはMongoによってネイティブにサポートされています。
MongoidはAPIでより「丸みを帯びた」完全なものであるように思われますが、これはおそらくより大きなコードベースであることを説明しています。また、より適切に文書化されているようです。
Mongo_extをインストールしましたか?パフォーマンスは、マッパー自体よりもドライバーに関連していると思います。 mongoログを見ると、拡張子なしで、transerにいくつかの遅れがあるように見えます。
また、monogdbサイトで推奨されているように、必要なフィールドのみを選択します。
先週MongoMapperでいくつかのテストを行いましたが、安定していましたが、クエリインターフェイスが少し制限されていることがわかりました(また、ARロジックの一部が風変わりでした)。 ARへ.
まだ速度の結論はありません-しかし、切り替えは簡単でした-Rails 3でも動作します。
Rails3を使用している場合、Mongoidをお勧めします-継承 "<"の代わりに "include"を使用してクラスを永続化します-"include"を使用することは、Ruby MongoidはDeviseでうまく機能します。
パフォーマンスを改善するには、低レベルのアクセスを選択的に使用してみてください。モペット-これは最大10倍高速であることがわかりました
私は両方を使用しましたが、機能はほぼ同じですが、コードの統計を見てください
MongoMapperのコード品質ははるかに優れているようです(同じことを少ないコードで行った場合)。
この統計は自分で計算できます。アナライザーはこちらです https://github.com/alexeypetrushin/code_stats
Mongoidは設定とマッピングがはるかに優れていると思います。
DeviseはMongoMapperをサポートしていませんでした。私もRails3の方法で移動することを好みます。それで、私はモンゴイドに切り替えました。
MongoidはRails3を完全にサポートし、IDマップ機能を備えています。
詳細なドキュメントは http://mongoid.org にあります
ここでパフォーマンスを参照してください http://mongoid.org/performance.html
Sudo gem install mongo_ext
はパフォーマンスを得るための鍵です。
MongoDBは、未加工の速度の点でCouchDBを圧倒します。ただし、CDBには独自の利点があります。
下記のポイントが上記の回答に価値を加えることを願っています。
1.Mongoidは完全にRails 3と互換性があり、MongoMapperが引き続きRails 2検証に検証可能なgemを使用します。
2.Mongoidは公式にRuby 1.8.7、1.9.1、および1.9.2 head。
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スタイルファインダーを使用します。
前回MongoMapperにRails 3のサポートがないことを確認したとき)をチェックしたとき、パフォーマンスは同じになると予想されます。