Mongodb: Was vor der Verwendung zu wissen? [geschlossen]

93

Ich starte ein Hobby-Projekt (ohne Einnahmen) mit Ruby on Rails. Ich habe mit Postgresql ziemlich viel in Rails entwickelt, und ich kann das normalisierte Schema ziemlich gut imitieren. Mongrodb sieht jedoch glänzend und neu aus. Was gibt es Schöneres, als etwas Neues auszuprobieren als ein Hobbyprojekt?

Denken Sie an die Zeit zurück, als Sie Mongodb verwendet haben. Welche Techniken haben Sie später gelernt, die Sie dazu gebracht haben zu sagen: "Wenn ich das nur wüsste, als ich anfing!" Welche Plug-Ins haben Sie entdeckt, die Sie von Anfang an verwendet hätten, wenn Sie es nur gewusst hätten? Welche Referenzen hätten Sie gerne mit einem Lesezeichen versehen?

Wayne Conrad
quelle

Antworten:

63

Ich würde definitiv die Empfehlung von MongoMapper unterstützen, wenn Sie MongoDB mit Rails verwenden. Ich werde Sie jedoch warnen, dass es (bisher) keine andere Dokumentation als ein paar Blog-Beiträge gibt. Wenn Sie nicht gerne im Quellcode stöbern, um zu sehen, wie die Dinge funktionieren, ist es wahrscheinlich noch nichts für Sie.

Wenn Sie außerhalb von Rails arbeiten, würde ich empfehlen, sich von MongoMapper fernzuhalten. Da MongoDB zu etwas ähnlichem verarbeitet wird, wie wir es von einem SQL-gestützten ORM erwarten, gibt es Ihnen keine gute Vorstellung von der Leistungsfähigkeit und dem unterschiedlichen Denken hinter MongoDB. Verbringen Sie einige Zeit damit, mit dem Ruby-Treiber der unteren Ebene und sogar in der Javascript-Konsole herumzuspielen.

Das andere , was ich empfehlen würde, vor allem , da Sie wissen , wie erwähnt , ein Schema zu normalisieren, ist nicht für jetzt von MongoDB als Datenbank zu denken. Die Art und Weise, wie Sie Ihre Daten in MongoDB organisieren, unterscheidet sich stark von der einer relationalen Datenbank. Versuchen Sie, es sich eher als einen Ort zum Speichern und Abrufen von Ruby-Hashes vorzustellen. Sie können mit MongoDB einige relationale Dinge tun, aber ich würde empfehlen, sich nur an in sich geschlossene Dokumente zu halten, während Sie versuchen, sich mit NoSQL zu beschäftigen.

Ich würde Ihnen wärmstens empfehlen, die Links auf der MongoDB-Website zu lesen. Ihre Dokumentation ist sehr gut. Schauen Sie sich insbesondere die erweiterten Abfragen , Multikey-Indizes und MapReduce an, um sich ein Bild von den einzigartigen Vorteilen und Stärken einer NoSQL-Datenbank zu machen.

Emily
quelle
26

Ich bin fast im selben Stadium wie Sie. Starten eines neuen Projekts mit MongoDB. Ich habe ungefähr 7 Wochen Erfahrung. Das habe ich sehr nützlich gefunden:

Verwenden Sie Mongoid anstelle von Mongomapper

http://mongoid.org/

Die Dokumentation ist hervorragend. Im Ernst, ausgezeichnet. Das Lesen der gesamten Dokumentation sollte ungefähr 15 Minuten dauern, und Sie haben eine sehr genaue Vorstellung davon, was Sie mit Mongoid tun können und was nicht.

Morgen wird der Release-Kandidat für eine neue Hauptversion von Mongoid veröffentlicht. Es wird viele nützliche Dinge bringen.

Ich verwende Rails 3. Um die Entwicklungsversion zu installieren, fügen Sie diese Ihrer Gem-Datei hinzu:

Edelstein 'Mongoid', "~> 2.0.0.beta"

Die aktuelle Beta ist 20, aber wie gesagt, morgen gibt es den Release Candidate.

Außerdem empfehle ich Ihnen, sich ebenfalls der Google-Gruppe anzuschließen. Es hat wenig Verkehr und die Leute sind sehr bereit, jede Frage zu beantworten. Zum Beispiel habe ich ihnen mein erstes DB-Modell gezeigt und sie haben mir viele Möglichkeiten gegeben, dies zu verbessern. Der Schöpfer von Mongoid beantwortet auch Ihre Fragen.

In zwei Worten: Großartige Gemeinschaft.

Es gibt dieses Plugin, mit dem Sie Machinist mit Mongo verwenden können:

https://github.com/nmerouze/machinist_mongo

Funktioniert ziemlich gut.

gem 'machinist_mongo', :require => 'machinist/mongoid', 
:git => 'http://github.com/nmerouze/machinist_mongo.git',
:branch => 'machinist2'

Sie können Fälschung mit Maschinist verwenden. Tolle Mischung.

https://github.com/sevenwire/forgery

Eine andere Sache, die ich sagen möchte. Ich komme aus einer Beziehungsdatenbankwelt, daher klang das am Anfang wirklich komisch: Sie können Dateien in einer Mongo-Datenbank speichern.

Tatsächlich könnte es schneller sein, als sie früher zu verwalten. Dies liegt an Mongos Unterstützung für das Splittern. Sharding bedeutet, dass Sie einen Cluster von Computern verwenden können, um die Mongo-Datenbank bereitzustellen. Es ist nahtlos. Master-Slave. Sie können also eine Datei von vielen Computern aus bereitstellen, von denen jeder einen Teil sendet. Es skaliert sehr gut :)

Dies erfolgt mit GridFS. http://www.mongodb.org/display/DOCS/GridFS

Mongoid unterstützt diese Master-Slave-Konfiguration.

Fragen Sie mich, wenn Sie weitere Informationen benötigen.

Bearbeiten:

Außerdem: http://railscasts.com/episodes/238-mongoid

Nerian
quelle
8

1. Fragen Sie nicht zwischen Groß- und Kleinschreibung ab

Gl

"_id": "1da259c70fe3392c3b000002",
"name": "Dany"

array('name' => 'dany') :: results 0
array('name' => 'Dany') :: results 1

2. Letzte Einfügungs-ID:

$coll->insert($user, true);
echo (string) $user['_id'];

3. _id ist ein MongoId-Objekt

Suche nach ID:

$p->findOne(array('_id' => new MongoId( $UID  )), array('proj'));

Show _id:

$coll['_id'] = ( string ) $coll['_id'];

Außerdem ist _id nur pro Sammlung eindeutig und kann auf anderen Servern unterschiedlich sein

4. MongoDB unterstützt LIMIT, OFFSET, ORDER

Für eine erweiterte Sortierung können Sie das Aggregation Framework verwenden.

5. In SQL ist SQL-Injection in MongoDB Array-Injection

Wenn Sie also Daten schreiben, verwenden Sie (Zeichenfolge) oder überprüfen Sie is_array

$req = (string) $range['name'];

6. HDD DOS

Die Standardgröße für _POST beträgt 8 MB in PHP. In Mongo gibt es ein Limit pro Dokument von 16 MB. Stellen Sie sich also vor, einige Benutzer fälschen die Gleichung USER_AGENT STRING in Ihrem Analyseskript und senden dann 16 MB pro einzelne Einfügung.

7. In der Vergangenheit gab es einige Probleme mit MongoDb, aber im Moment ist 3.0 ziemlich fantastisch und stabil.

user956584
quelle
3

Hier ist eine großartige Einführung in den MongoDb-Podcast von .NET Rocks -

http://www.dotnetrocks.com/default.aspx?ShowNum=507

Mike Dirolf wird interviewt ... er arbeitet am MongoDb-Projekt. Oh, und die Klangqualität ist ausgezeichnet.

Mike Dirolf ist Software Engineer bei 10gen, wo er am MongoDB-Projekt arbeitet. Er arbeitet hauptsächlich an Client-Treibern für Python und Ruby, nimmt sich aber auch Zeit, um über MongoDB zu sprechen - er hat auf EuroPython, Strange Loop Conf, RubyEnRails, RuPy und RubyConf sowie in Meetup-Gruppen in New York City, London, Washington, vorgestellt DC und San Francisco.

Kris Krause
quelle
2

Sie sollten sich unbedingt den Junoaker Mongo-Mapper ansehen: http://github.com/jnunemaker/mongomapper. Ich empfehle Ihnen jedoch auch, ein wenig mit dem reinen Ruby Mongo-Treiber zu spielen, um zu sehen, wie Mongo-Mapper unter der Haube funktioniert. Es ist nicht sehr schwer, mit Ruby Daten in eine Mongo-Datenbank zu stellen.

Ich denke, Sie haben das Ruby Mongo Tutorial bereits gefunden. Nur für den Fall, dass Sie es nicht getan haben, hier ist der Link: http://www.mongodb.org/display/DOCS/Ruby+Tutorial

t6d
quelle
Ob Sie es glauben oder nicht, das war nicht in den Links, die ich zum Lesen in die Warteschlange gestellt habe, und es sieht nach einem guten aus. Vielen Dank.
Wayne Conrad