web-dev-qa-db-fra.com

Mongodb: Que savoir avant d'utiliser?

Je démarre un projet hobby (non-revenue) en utilisant Ruby on Rails. J'ai fait pas mal de développement en Rails using Postgresql, et Je peux faire une assez bonne imitation du schéma normalisé. Cependant, Mongrodb a l'air brillant et nouveau. Quoi de mieux pour essayer quelque chose de nouveau qu'un projet de loisir?

Pensez à quand vous avez commencé à utiliser Mongodb. Quelles techniques avez-vous appris plus tard qui vous ont fait dire: "Si seulement je le savais quand j'ai commencé!" Quels plug-ins avez-vous découvert que vous auriez utilisés dès le départ, si seulement vous l'aviez su? Quelles références aimeriez-vous avoir mises en signet?

92
Wayne Conrad

J'appuierais certainement la recommandation de MongoMapper si vous prévoyez d'utiliser MongoDB avec Rails. Je vous préviens cependant qu'il n'y a (jusqu'à présent) aucune documentation autre que quelques articles de blog. Si vous n'êtes pas à l'aise de creuser dans le code source pour voir comment les choses fonctionnent, ce n'est probablement pas encore pour vous.

Si vous travaillez en dehors de Rails, je vous recommande de rester loin de MongoMapper. Parce que cela fait de MongoDB quelque chose de similaire à ce que nous attendons d'un ORM soutenu par SQL, cela ne vous donne pas vraiment une bonne idée de la puissance et de la pensée différente derrière MongoDB. Passez du temps à jouer avec le pilote de niveau inférieur Ruby, et même dans la console javascript.

L'autre chose que je recommanderais, d'autant plus que vous avez mentionné savoir comment normaliser un schéma, est pas de 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érente de celle d'une base de données relationnelle. Essayez de penser davantage à un endroit où stocker et récupérer Ruby hachages. Vous pouvez faire des choses relationnelles avec MongoDB, mais je vous recommande de ne conserver que des documents autonomes pendant que vous êtes essayer d'envelopper votre tête autour de NoSQL.

Quant aux liens à consulter, je vous recommande fortement de lire tout ce que vous pouvez sur le site MongoDB. Leur documentation est très bonne. En particulier, jetez un œil aux requêtes avancées , index multikey , et MapReduce pour avoir une idée de certains des avantages et des forces uniques d'un Base de données NoSQL.

63
Emily

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

Utilisez Mongoid au lieu de Mongomapper

http://mongoid.org/

La documentation est excellente. Sérieusement, excellent. Cela devrait vous prendre environ 15 minutes pour lire toute la documentation et vous aurez une idée très précise de ce que vous pouvez et ne pouvez pas faire avec Mongoid.

Demain, le candidat à la sortie d'une nouvelle version majeure de mongoid sera publié. Cela va apporter beaucoup de choses utiles.

J'utilise Rails 3. Pour installer la version de développement, ajoutez ceci à votre fichier gem:

gem 'mongoid', "~> 2.0.0.beta"

La version bêta actuelle est de 20, mais comme je l'ai dit, demain, il y a le candidat à la sortie.

Je vous suggère également de rejoindre le groupe Google également. Le trafic est faible et les gens sont très disposés à répondre à toutes les questions. Par exemple, je leur ai montré ma première conception de modèle de base de données et ils m'ont donné de nombreuses façons d'améliorer cela. Le créateur de Mongoid répond également à vos questions.

En deux mots: Grande communauté.

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

https://github.com/nmerouze/machinist_mongo

Fonctionne plutôt bien.

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

Vous pouvez utiliser la contrefaçon avec Machinist. Mélange génial.

https://github.com/sevenwire/forgery

Une autre chose que je veux dire. Je viens d'un monde de bases de données relationnelles, donc cela semblait vraiment bizarre au début: vous pouvez enregistrer des fichiers dans une base de données mongo.

En fait, cela pourrait être plus rapide que de les gérer comme nous le faisions auparavant. Cela est dû au support de mongo pour le sharding. Le partage signifie que vous pouvez utiliser un cluster d'ordinateurs pour servir la base de données Mongo. C'est transparent. Maître d'esclave. Vous pouvez donc servir un fichier à partir de plusieurs ordinateurs, chacun envoyant une partie. Il évolue très bien :)

Cela se fait à l'aide de GridFS. http://www.mongodb.org/display/DOCS/GridFS

Mongoid prend en charge cette configuration maître-esclave.

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

Éditer:

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

26
Nerian

1. Interrogez ce n'est pas sensible à la casse

eq

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

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

2. ID du dernier insert:

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

3. _id est un objet MongoId

Rechercher par identifiant:

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

Afficher _id:

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

_Id est également unique par collection, peut être différent sur un autre serveur

4. MongoDB prend en charge LIMIT, OFFSET, ORDER

pour un tri avancé, vous pouvez utiliser Aggregation Framework.

5. En SQL, l'injection Sql dans MongoDB est l'injection Array

Ainsi, lorsque vous écrivez des données, utilisez (chaîne) ou vérifiez is_array

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

6. HDD DOS

la taille par défaut de _POST est de 8 Mo en PHP, IN Mongo il y a une limite par document de 16 Mo. Imaginez donc un utilisateur usurpant l'eq USER_AGENT STRING dans votre script analytique, puis envoyez 16 Mo par insert unique.

7. Il y a eu quelques problèmes dans le passé avec MongoDb mais en ce moment 3.0 est assez génial et stable.

8
user956584

Voici un excellent débutant/introduction au podcast MongoDb de .NET Rocks -

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

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

Mike Dirolf est ingénieur logiciel chez 10gen, où il travaille sur le projet MongoDB. Il travaille principalement sur les pilotes clients pour Python et Ruby, mais prend également le temps de parler de MongoDB - il a présenté à EuroPython, Strange Loop Conf, RubyEnRails, RuPy et RubyConf ainsi qu'à Meetup à New York, Londres, Washington DC et San Francisco.

3
Kris Krause

Vous devriez définitivement jeter un œil au mongo-mapper des junemakers: http://github.com/jnunemaker/mongomapper Mais je vous recommande également de jouer un peu avec le pur Ruby Pilote Mongo pour voir comment fonctionne mongo-mapper sous le capot. Il n'est pas très difficile de mettre des données dans une base de données Mongo en utilisant Ruby.

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

2
t6d