web-dev-qa-db-ja.com

MongoidまたはMongoMapper?

私はMongoMapperを試しましたが、機能は完全です(ほとんどすべてのAR機能を提供しています)が、大きなデータセットを使用するときのパフォーマンスにはあまり満足していませんでした。モンゴイドと比較した人はいますか?パフォーマンスの向上はありますか?

83
PanosJee

私はしばらくMongoMapperを使用していましたが、MongoIdに移行することにしました。その理由は、隠れた問題に加えてユーザーに対するtowards慢さです。 MongoMapperをCucumber(最終的には成功しました)で動作させ、プロジェクトが単純であってもいくつかのパッチを適用するために、フープを飛び越えなければなりませんでしたが、それはポイントではありません。バグ修正(ActiveRecordとの非互換性のため)を送信しようとすると、問題を発見したことに腹を立てているように見えたので、私は押しのけられました。テスト中に、クエリの実装に大きなバグが発生しましたが、テストが合格するようにテストが調整されました。私の前の経験の後、それを提出することを敢えてしませんでした。

プルリクエストとバグ/機能のサブミッションの数は、MongoIdよりも大幅に少なくなっています。つまり、コミュニティへの参加はずっと少なくなっています。私と同じ経験ですか?

どれが今より多くの機能を持っているのかわかりませんが、MongoMapperにはあまり将来はありません。私は自分で問題を修正し、機能を追加することを気にしませんが、バグが修正されない状況を気にします。

48
Aynat

私は過去数週間両方を使用しています。 Mongomapperは、リレーショナルアソシエーション(埋め込みなし)のサポートが強化されており、サードパーティのサポートが強化されています。 Mongoidには、クエリサポートの改善、ドキュメントの改善(MMはほとんどありませんが、Webサイトは機能していると思われます)、Rail 3のサポート(およびDeviseのサポート)、およびGoogleグループのやや活発なコミュニティがあります。

私はモンゴイドに行きました。

39
Nader

違い

MongoMapper

  • リレーショナルアソシエーションのより良いサポートがあると主張。
  • プラグインアーキテクチャのため、より拡張性があると主張されています。
  • クエリにDSLを使用します。
  • 多対多の関連付けは、MongoMapperで一方的にのみ更新されます。
  • 埋め込みドキュメントの堅牢性の低いサポート。少数の属性のみが変更された場合でも、モデル全体を更新します。

モンゴイド

  • 事例証拠により、MongoMapperよりも高速であることが示唆されています。
  • MongoDBアトミック操作($ set、$ Push、$ pullなど)を使用してネストされたドキュメントをインプレースで更新する、埋め込みドキュメントのより強力なサポート。
  • 双方向の多対多の関連付けをサポートします。
  • クエリにチェーン可能なARelのような構文を使用します。

類似性

  • MongoMapperMongoid の両方に、優れたドキュメントのあるWebサイトがあります。 MongoMapperは長らく悪いドキュメントがあると主張されていましたが、彼らの新しいWebサイトはギャップを埋めているようです。
  • 両方ともYAMLファイルで設定でき、両方ともそのファイル用のRailsジェネレーターを持っています。
  • 両方とも完全にRails 3と互換性があります。

構成

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は次のことを明らかにします。

  • 「Mongoid」を検索すると、12671の結果が得られます。
  • 「MongoMapper」を検索すると、4708の結果が得られます。

特に、DeviseはMongoMapperをサポートしていません。

コミットアクティビティ

昨年、MongoidはMongoMapperよりも定期的に保守および更新されているようです。

MongoMapper

MongoMapper

モンゴイド

Mongoid

37
user2398029

私が見つけた違いは、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でより「丸みを帯びた」完全なものであるように思われますが、これはおそらくより大きなコードベースであることを説明しています。また、より適切に文書化されているようです。

9
Wolfram Arnold

Mongo_extをインストールしましたか?パフォーマンスは、マッパー自体よりもドライバーに関連していると思います。 mongoログを見ると、拡張子なしで、transerにいくつかの遅れがあるように見えます。

また、monogdbサイトで推奨されているように、必要なフィールドのみを選択します。

7
Piotr Zolnierek

先週MongoMapperでいくつかのテストを行いましたが、安定していましたが、クエリインターフェイスが少し制限されていることがわかりました(また、ARロジックの一部が風変わりでした)。 ARへ.

まだ速度の結論はありません-しかし、切り替えは簡単でした-Rails 3でも動作します。

4
mtkd

Rails3を使用している場合、Mongoidをお勧めします-継承 "<"の代わりに "include"を使用してクラスを永続化します-"include"を使用することは、Ruby MongoidはDeviseでうまく機能します。

パフォーマンスを改善するには、低レベルのアクセスを選択的に使用してみてください。モペット-これは最大10倍高速であることがわかりました

4
Tilo

私は両方を使用しましたが、機能はほぼ同じですが、コードの統計を見てください Mongoid vs MongoMapper

MongoMapperのコード品質ははるかに優れているようです(同じことを少ないコードで行った場合)。

この統計は自分で計算できます。アナライザーはこちらです https://github.com/alexeypetrushin/code_stats

3

Mongoidは設定とマッピングがはるかに優れていると思います。

3
rodrigoalves

DeviseはMongoMapperをサポートしていませんでした。私もRails3の方法で移動することを好みます。それで、私はモンゴイドに切り替えました。

0
reddragon

MongoidはRails3を完全にサポートし、IDマップ機能を備えています。

詳細なドキュメントは http://mongoid.org にあります

ここでパフォーマンスを参照してください http://mongoid.org/performance.html

0
arunagw

Sudo gem install mongo_extはパフォーマンスを得るための鍵です。

MongoDBは、未加工の速度の点でCouchDBを圧倒します。ただし、CDBには独自の利点があります。

ベンチマーク: http://www.snailinaturtleneck.com/blog/?p=74

0
Isaac

下記のポイントが上記の回答に価値を加えることを願っています。

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スタイルファインダーを使用します。

0
Pravin Mishra

前回MongoMapperにRails 3のサポートがないことを確認したとき)をチェックしたとき、パフォーマンスは同じになると予想されます。

0
Omar Qureshi