MongoidまたはMongoMapper?[閉まっている]


83

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

回答:


49

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

プルリクエストとバグ/機能の送信数はMongoIdよりも大幅に少ないため、コミュニティへの参加ははるかに少なくなっています。私と同じ経験?

現在、どちらがより多くの機能を備えているかはわかりませんが、MongoMapperの将来はあまりわかりません。自分で問題を修正したり機能を追加したりしてもかまいませんが、バグが修正されない状況は気になります。


クエリの実装における主なバグは何でしたか。以前のプロジェクトでmongomapperを使用しましたが、mongoに初めて触れたのもこれでした。あなたが持っていたmongomapperの特定の問題に関する情報は素晴らしいでしょう。ありがとう
Red

5
ソートせずにfirst()を取得すると、代わりにlast()として機能します(またはその逆)。ただし、単体テストは順序を指定する方法で記述されているため、合格します。今では修正されているかもしれませんが、MongoMapperはもう使用していません。しかし、私はそれを疑っています、私はそれがどのように実装されているかを見ました、そしてそれは悪いデザインです。
Aynat 2012年

こんにちは、モンゴマッパーからモンゴイドにスムーズに移行する方法についての情報へのリンクを送信できますか?
Chen Kinnrot 2012

1
@Aynat修正したことはありませんが、試してみたところ、同じ結果が得られました
Viren 2012年

神に感謝します。この会話が私の次の大きなプロジェクトでmongomapperまたはmongoidを使用することを決定しているのを見ました。モンゴイドが勝つと思います。
aliirz 2013

39

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

結局モンゴイドに行きました。


27
私が最初にこの回答を書いたときから、Mongoidは多くのサードパーティのサポートを受けており、コミュニティの違いはさらに大きくなっています。私の意見では、Mongoidは今日より明確な選択です。パフォーマンスは、両方ともRubyドライバーを経由するため、比較的同じである必要があります。恐ろしい文書を作成しないようにOMに注意する必要がありますが。
Nader 2011

MongoMapperの多対多が壊れている:github.com/jnunemaker/mongomapper/pull/259github.com/jnunemaker/mongomapper/issues/488 Mongoidのための1
たYevgeniy

37

違い

MongoMapper

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

モンゴイド

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

類似点

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

構成

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

モンゴイド

モンゴイド


1
Mongoidは現在、アイデンティティマップをサポートしています。
user2503775 2013年

9

私が見つけた違いは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がより大きなコードベースであることを説明しています。また、より適切に文書化されているようです。


7

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

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


ルビードライバーは特に1.8ほど高速ではありませんが、1.9はパフォーマンスを向上させるだけです!モンゴイドがより最適化されているのか、それともモンゴイドが提供する唯一のものは、クアリングへの異なるアプローチであり、当面の間、モンゴマッパーはほぼすべてのARシュガーを提供するほぼ完全な機能です
PanosJee 2009

1
1年以上後にこれを読んでいる人への注意:mongo_extもはや必要ではなく、基本的なmongo宝石に組み込まれています。
tkrajcar 2011年

4

先週MongoMapperでいくつかのテストを行いましたが、安定していましたが、クエリインターフェイスが少し制限されており(ARロジックの一部も風変わりでした)、今日はMongoidに切り替えられており、使用する方がはるかに快適です。 ARへ。

速度に関する結論はまだありませんが、切り替えは簡単でしたが、Rails3でも機能します。


4

Rails3を使用している場合は、Mongoidをお勧めします。クラスを永続化するために継承「<」の代わりに「include」も使用します。永続性を追加するには、Rubyで「include」を使用する方が優れたパラダイムです。Mongoidは、Deviseで問題なく動作します。

パフォーマンスを向上させるには、Mopedなどの低レベルのアクセスを選択的に使用してみてください。これは最大10倍高速であることがわかりました。


3

私はそれらの両方を使用しました、そしてそれらは機能的にほぼ同等です、しかしそれのコード統計を見てください モンゴイドvsモンゴマッパー

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

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


12
キーポイント: '少ない場合でも同じことを行う場合' ...
tkrajcar 2011年

10
これは完全に根拠がないようです。
ジムミッチェナー2012年

14
プロジェクトのコード品質をコードサイズで比較することは、重量を測定して2台の車の品質を比較するようなものです。
Patrizio Rullo

3
実際、車の重量を比較することは完全に有効です-あなたは多くの判断を下すことができます-それがどれくらい速いか、どれくらいガソリンがかかるかなど。そして、実際には科学的な観点からは理にかなっています。「コルモゴロフの複雑さ」を見てください。
アレックスクラフト

1
それでも、mongomapperの速度を大幅に改善したものもありますが(coffeepowered.net/2013/07/29/…)、モンゴイドの方が速いことは今でも知られており、受け入れられています。
Adit Saxena 2013

3

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


1
私もそう思います。それに加えて、MongoMapperよりもNoSQLに近いと感じ、ActiveRecord、つまりSQLの観点から考えるようになります。もう1つの
利点

うん!MongoidのWebサイトは、ドキュメントでロックされています。
rodrigoalvesvieira 2010

0

前回MongoMapperにRails3のサポートがないことを確認したときは、パフォーマンスは同じだと思います。そのため、今はMongoidを調べています。


0

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

MongoDBは、生の速度の点でCouchDBを吹き飛ばしますが、CDBには独自の利点があります。

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


彼はmongoidx mongo_mapperについて話しています。これは、mongodb x couchdbではなく、mongoにアクセスするためのより高速なrubygemです。
ビクターロドリゲス

8
1年以上後にこれを読んでいる人への注意:mongo_extもはや必要ではなく、基本的なmongo宝石に組み込まれています。
tkrajcar 2011年

0

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


MMは現在それをサポートしていると思います。
user2503775 2013年


0

以下の点が上記の答えに価値を加えることを願っています。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.