92 votes

Mongodb: Que savoir avant d'utiliser?

Je suis à partir d'un hobby (non payants) projet à l'aide de Ruby on Rails. J'ai fait une bonne quantité de développement dans les Rails à l'aide de Postgresql, et je peux faire une assez bonne imitation de schéma normalisé. Cependant, Mongrodb semble brillant et nouveau. Quoi de mieux pour essayer quelque chose de nouveau qu'un projet de loisirs?

Pensez à quand vous avez commencé à utiliser Mongodb. Quelles sont les techniques que vous apprendrez plus tard que fait vous dites, "Si seulement je savais que quand j'ai commencé!" Quels sont les plugins ne vous découvrez que vous avez utilisé dès le début, uniquement si vous l'avez connu? Quelles sont les références aimeriez-vous avoir eu un signet?

63voto

Emily Points 9231

Je le ferais certainement la deuxième recommandation de MongoMapper si vous allez être en utilisant MongoDB avec des Rails. Je vous préviens, cependant, qu'il n'est (pour l'instant) aucune documentation n'est autre qu'un couple de billets de blog. Si vous n'êtes pas à l'aise de creuser dans le code source pour voir comment les choses fonctionnent, c'est probablement pas pour vous encore.

Si vous travaillez à l'extérieur des Rails, je vous recommande de rester loin de MongoMapper. Parce que c'est de travailler MongoDB en quelque chose de semblable à ce que nous attendons de SQL adossés à des ORM, il n'a pas vraiment vous donner une bonne idée de la puissance et de la les différentes pensées derrière MongoDB. Passer du temps à jouer avec le niveau inférieur ruby pilote, et même dans la console javascript.

L'autre chose que je vous recommande, surtout depuis que vous avez mentionné savoir comment normaliser un schéma, est de ne pas penser à MongoDB comme une base de données pour l'instant. La façon dont vous organisez vos données dans MongoDB est très différent qu'avec une base de données relationnelle. Essayez d'y penser plus comme un endroit pour stocker et récupérer des Rubis hachages. Vous pouvez faire un peu de relationnel choses avec MongoDB, mais je vous conseille de coller avec seulement autonome documents pendant que vous essayez d'envelopper votre tête autour de NoSQL.

Quant à ce que les liens que vous devriez regarder, je recommande vivement la lecture à travers tout ce que vous pouvez sur la MongoDB site. Leur documentation est très bon. En particulier, jetez un oeil à l' avancée des requêtes, multikey index, et MapReduce pour avoir une idée de certains des avantages uniques et des points forts d'une base de données NoSQL.

26voto

Nerian Points 6733

Je suis à peu près au même stade que vous. Démarrage d'un nouveau projet avec MongoDB. Je suis autour de 7 semaines de l'expérience. C'est ce que j'ai trouvé très utile:

Utilisation Mongoid au lieu de Mongomapper

http://mongoid.org/

La documentation est excellente. Sérieusement, excellent. Il devrait vous prendre environ 15 min de la lecture de l'ensemble de la documentation et vous aurez une idée très exacte de ce que vous pouvez faire et ne pas faire avec Mongoid.

Demain, la version release candidate pour une nouvelle version majeure de mongoid sera libéré. Il va apporte beaucoup de choses utiles.

Je suis à l'aide de Rails 3. Pour installer la version de développement ajouter ceci à votre fichier gem:

gem 'mongoid', "~>2.0.0.bêta"

Bêta actuelle est de 20, mais comme je l'ai dit, demain il y a la version release candidate.

Aussi, je vous suggérons de rejoindre le groupe google. Il a un faible trafic et les gens sont prêts à répondre à toute question. Par exemple, je leur ai montré mon premier DB de conception de Modèle et ils m'ont donné de nombreuses façons de l'améliorer. Le créateur de Mongoid répondre à vos questions.

En deux mots: une Grande communauté.

Il y a ce plugin qui vous permet d'utiliser Machiniste avec mongo:

https://github.com/nmerouze/machinist_mongo

Fonctionne assez bien.

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

Vous pouvez utiliser la Contrefaçon avec le métier de Machiniste. Impressionnant mélange.

https://github.com/sevenwire/forgery

Une autre chose que je veux dire. Je viens d'un rapport de base de données, ce qui sonnait vraiment bizarre au début: Vous pouvez enregistrer des fichiers dans une base de données mongo.

En fait, il pourrait être plus rapide que de les gérer comme nous avons l'habitude de faire. C'est à cause de mongo soutien de la fragmentation. La fragmentation signifie que vous pouvez utiliser un cluster d'ordinateurs pour servir de la Base de données Mongo. C'est sans couture. Maître-esclave. Vous pouvez donc vous servir d'un fichier à partir de plusieurs ordinateurs, chacun envoyant une partie. Elle s'adapte très bien :)

Ceci est fait en utilisant GridFS. http://www.mongodb.org/display/DOCS/GridFS

Mongoid prend en charge que le maître-esclave config.

Demandez-moi si vous avez besoin de plus d'informations.

Edit:

Aussi: http://railscasts.com/episodes/238-mongoid

8voto

Userpassword Points 982

1. LORS de la requête de ses pas sensible à la casse

eq

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

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

2. Le dernier ID inséré:

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

3. _id est un MongoId objet

Recherche par id:

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

Montrer _id:

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

4. Commande par Groupe par la, partie est le Cerveau, f*ck les comparer à de simples sql

Donc, si vous n'avez pas eu le temps, de mieux le faire en PHP en utilisant la fonction array_distinct

array_unique for multidimensional arrays. similar to the DISTINCT 
in SQL function.
the function can group, sum and count keys

http://docs.php.net/manual/sr/function.array-unique.php#57006

5. Dans le langage Sql injection Sql dans Mongodb est la Matrice de l'injection

Alors, quand d'écrire les données d'utilisation ( string ) ou vérifier is_array

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

6. Pas de support pour les $, ou dans la Géo-localisation de la requête

Trouver tous les coffee shop $à près de 20Km + $ou d'une autre affection == non pris en charge

Et de plus:

http://www.zopyx.de/blog/goodbye-mongodb

http://blog.engineering.kiip.me/post/20988881092/a-year-with-mongodb

http://pastebin.com/raw.php?i=FD3xe6Jt

http://svs.io/post/31724990463/why-i-migrated-away-from-mongodb

3voto

Kris Krause Points 4704

Voici un grand débutant/introduction à MongoDb podcast .NET Roches -

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

Mike Dirolf est intereviewed... il travaille sur la MongoDb projet. Oh, et la qualité sonore est excellente.

Mike Dirolf est un Ingénieur Logiciel chez 10gen, où il travaille sur la MongoDB projet. Il travaille essentiellement sur les pilotes pour Python et Ruby, mais prend aussi du temps pour parler d'MongoDB - il a présenté à EuroPython, Étrange Boucle Conf, RubyEnRails, RuPy et RubyConf ainsi qu'à des groupes meetup dans la Ville de New York, Londres, Washington et San Francisco.

2voto

t6d Points 1090

Vous devriez prendre un coup d'oeil dans junemakers mongo-mapper: http://github.com/jnunemaker/mongomapper Mais moi aussi je vous recommande de jouer un peu avec le pur Ruby Mongo pilote pour voir comment mongo-mappeur fonctionne sous le capot. Il n'est pas très difficile de mettre des données dans une base de données Mongo à l'aide de Ruby.

Je suppose que vous avez déjà trouvé le Rubis Mongo Tutoriel. Juste au cas où vous ne l'avez pas, voici le lien: http://www.mongodb.org/display/DOCS/Ruby+Tutoriel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X