Frage

Ich habe versucht, MongoMapper und es ist Funktion komplett (bietet fast all AR-Funktionalität), aber ich war nicht sehr zufrieden mit der Leistung, wenn große Datenmengen verwendet wird. Hat jemand mit Mongoid verglichen? Jegliche Performance-Gewinne?

War es hilfreich?

Lösung

Ich habe MongoMapper für eine Weile verwendet, aber beschlossen, MongoId zu migrieren. Der Grund dafür ist versteckt Fragen und Arroganz gegenüber den Benutzern. Ich hatte durch Reifen zu springen MongoMapper Arbeit mit Gurke (gelang am Ende) und setzt ein paar Patches auch das Projekt war einfach, aber es ist nicht der Punkt. Als ich versuchte, einen Bug-Fix (wegen Inkompatibilität mit Active) einreichen, haben sie sich scheinbar sauer, dass ich ein Problem gefunden, und ich wurde herumgeschubst. Während ich testen, habe ich auch einen großen Fehler mit ihrer Abfrage Implementierung auftreten, während ihre Tests in einer Art und Weise abgestimmt wurde, dass die Tests bestanden. Nach meiner Erfahrung, wagte nicht, es zu unterwerfen.

Sie haben eine deutlich geringere Anzahl von Pull-Anfragen und Bug / Feature Einreichungen als MongoId, das heißt die Beteiligung der Gemeinschaft ist viel geringer. Gleiche Erfahrung wie meine?

Ich weiß nicht, was man hat mehr jetzt verfügt, aber ich sehe nicht viel Zukunft in MongoMapper. Ich habe nichts dagegen Probleme beheben und das Hinzufügen von Funktionalität mich, aber ich habe Situationen Sinn, wenn sie nicht Fehler beheben.

Andere Tipps

Ich habe in den letzten paar Wochen sowohl im Einsatz. Mongomapper hat eine bessere Unterstützung für relationale Verbände (nicht-embedded) und hat eine größere Unterstützung durch Dritte. Mongoid hat eine bessere Abfrage Unterstützung, viele bessere Dokumentation (MM nah an keinen hat, obwohl eine Website in den Werken angeblich), Schiene 3-Unterstützung (und damit Devise Unterstützung) und eine etwas aktivere Community auf Google Groups.

Ich landete mit Mongoid gehen.

Unterschiede

MongoMapper

  • Beansprucht eine bessere Unterstützung für relationale Assoziationen haben.
  • Beansprucht mehr erweiterbar zu sein, weil es Architektur-Plugin.
  • Verwendet eine DSL für anfragende.
  • Many-to-many-Verbände werden nur aktualisiert, einseitig in MongoMapper.
  • Weniger robuste Unterstützung für eingebettete Dokumente. Aktualisiert das gesamte Modell, auch wenn nur wenige Attribute geändert werden.

Mongoid

  • Empfohlene schneller zu sein als MongoMapper durch anekdotische Evidenz.
  • Stabilere Unterstützung für eingebettete Dokumente, mit MongoDB atomaren Operationen ($ Satz, $ Push, $ Pull usw.) verschachtelte Dokumente an Ort und Stelle zu aktualisieren.
  • Unterstützt bidirektionale many-to-many-Assoziationen.
  • Verwendet eine verkettbar Arel-ähnliche Syntax für die Abfrage.

Similarities

  • MongoMapper und Mongoid haben Websites mit guter Dokumentation. MongoMapper wurde lange behauptet, schlechte Dokumentation zu haben, aber ihre neue Website scheint die Lücke zu schließen.
  • Beide können durch eine YAML-Datei konfiguriert werden, und beide haben einen Generator Schienen für diese Datei.
  • Beide sind Rails voll 3 kompatibel.

Konfiguration

MongoMapper

defaults: &defaults
  host: 127.0.0.1
  port: 27017

development:
  database: database_name

Mongoid

development:
  sessions:
    default:
      database: database_name
      hosts:
        - 127.0.0.1:27017

3rd Party Bibliotheken

haben beide Seiten beansprucht besser 3rd-Party-Unterstützung zu haben. Github zeigt die folgende:

  • Die Suche nach "Mongoid" Erträge 12.671 Ergebnisse.
  • Die Suche nach "MongoMapper" Erträge 4708 Ergebnisse.

Insbesondere Devise nicht MongoMapper unterstützen.

Commit Aktivität

Im letzten Jahr, es sieht aus wie Mongoid mehr regelmäßig gepflegt wurden und aktualisiert als MongoMapper.

MongoMapper

MongoMapper

Mongoid

Mongoid

Ein Unterschied, den ich gefunden, dass update_attribute in MongoMapper erscheint das gesamte Dokument zu schreiben, und zwar unabhängig von dem, was tatsächlich geändert Attributen. In Mongoid schreibt es nur die geänderten Attribute. Dies kann ein erhebliches Performance-Problem für großen Datensätze sein. Dies gilt insbesondere für eingebettete Dokumente (hier labels), z.

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

Auf save, MongoMapper wird den ganzen profile Datensatz speichern, aber MongoId den $set Operator mit Positionslogik nur das Etikett aktualisieren verwendet das geändert.

Ein weiteres Problem ist die Auswahl, welche Felder zurückzukehren. Beide unterstützen ein only Kriterium, aber Mongoid unterstützt auch eine without Kriterium, das von Mongo nativ unterstützt wird.

Es scheint mir, dass Mongoid nur mehr „abgerundet“ ist und vollständig in seiner API, was wahrscheinlich erklärt, dass es eine größere Code-Basis ist. Es scheint auch besser dokumentiert.

Haben installieren Sie mongo_ext? Ich denke, die Leistung für den Fahrer als der Mapper selbst mehr verwandt ist. Wenn im Mongo Protokoll suchen, kann ich ohne die Erweiterung sehen, dass die transer einige Lags zu haben scheint.

Auch tun, wie sie auf der monogdb Seite empfehlen, wählen Sie nur die Felder, die Sie benötigen.

habe einige Tests mit MongoMapper letzte Woche, es war stabil, aber ich fand die Abfrage-Schnittstelle ein wenig begrenzt (auch einige der AR-Logik war schrullig), wechselte heute Mongoid und es fühlt sich viel besser zu nutzen - und intuitiver, wenn Sie sind AR verwendet.

Keine Geschwindigkeit Schlussfolgerungen noch - aber der Schalter war über schmerzlos -. Es funktioniert mit Rails 3 zu

Wenn Sie Rails3 ich verwenden Mongoid würde empfehlen - es nutzt auch „include“ anstelle der Vererbung „<“ Klassen bestehen bleiben - mit „include“ ist das bessere Paradigma in Ruby für die Persistenz hinzufügen. Mongoid funktioniert gut für mich mit Devise.

Leistung zu verbessern, versuchen Sie selektiv die untere Ebene Zugang zu verwenden, z.B. Moped - Ich habe dies zu 10x schneller zu sein, bis gesehen

habe ich sie beide und sie sind darüber equals in der Funktionalität, sondern betrachte es Code stats Mongoid vs MongoMapper

Es sieht aus wie MongoMapper viel bessere Codequalität hat (wenn es das gleiche mit weniger).

Sie können diese Statistiken berechnen, indem Sie sich, hier ist der Analysator https://github.com/alexeypetrushin/code_stats

Ich denke, Mongoid ist viel besser bei der Konfiguration und Zuordnung.

Ich würde die Leistung erwarten das gleiche, das letzte Mal sein, die ich überprüft MongoMapper fehlte Rails 3 Unterstützung -. So dass ich bei Mongoid jetzt bin auf der Suche

sudo gem install mongo_ext ist der Schlüssel, um die Leistung zu bekommen.

bläst MongoDB weg CouchDB in Bezug auf die rohe Geschwindigkeit - obwohl CDB hat seine eigene Reihe von Vorteilen.

Benchmark: http://www.snailinaturtleneck.com/blog/?p=74

Devise hat unterstützen MongoMapper nicht, und ich ziehe auch in der Rails3 Weise zu bewegen. Also wechselte ich mongoid.

Mongoid wird mit einer vollen Unterstützung mit Rails3 und mit Identitätskarte Funktion.

Weitere Dokument ist unter http://mongoid.org

die Leistung Sehen Sie hier http://mongoid.org/performance.html

Ich hoffe Im Folgenden Punkte hinzufügen Werte über Antworten.

1.Mongoid vollständig Rails 3 kompatibel und verwendet ActiveModel alle über den Ort (Validierungen, Serialisierung, usw.), wo MongoMapper noch auf Rails 2 fokussiert und nutzt die validierbares Juwel für seine Validierungen.

2.Mongoid offiziell unterstützt und Arbeiten zum Ruby 1.8.7, 1.9.1 und 1.9.2 Kopf.

3.Mongoid unterstützt Dokumente eingebettet robuste, Durchführen der MongoDB atomaren Operationen auf einem beliebigen Bereich der intern Hierarchie. ($ Satz, $ Push, $ Pull, etc). Mit MM müssen Sie es explizit sagen, diese Operationen zu tun.

4.MongoMapper hat eine bessere relationale Verein Unterstützung und funktioniert so als Standard.

ist 5.MongoMapper mehr erweiterbar, mit Plugin-Architektur, die es ziemlich einfach macht für die Menschen es mit ihren eigenen Bibliotheken zu erweitern. Mongoid dies nicht haben.

6.MM unterstützt Identität abbildet, Mongoid nicht.

7.MM hat eine größere Gemeinschaft, und wahrscheinlich mehr 3rd-Party-Bibliothek zu unterstützen. Ich ging verrückt auf Dokumentation und rdoc.

8.Mongoid unterstützt Master / Slave-Replikation Cluster. (Writes zu meistern, Round-Robin liest Slaves) MM nicht.

9.Mongoid hat eine extrem reich Arel Stil Kriterien API, MM Verwendung AR2 Stil Findern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top