Mongodb: Que savoir avant d'utiliser? [fermé]

93

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

Rappelez-vous quand vous avez commencé à utiliser Mongodb. Quelles techniques avez-vous apprises plus tard qui vous ont fait dire: "Si seulement je savais cela 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?

Wayne Conrad
la source

Réponses:

63

Je soutiendrais certainement la recommandation de MongoMapper si vous allez utiliser MongoDB avec Rails. Je vous préviendrai, cependant, qu'il n'y a (pour l'instant) aucune documentation autre que quelques articles de blog. Si vous n'êtes pas à l'aise de fouiller 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 à l'écart de MongoMapper. Parce que cela transforme MongoDB dans quelque chose de similaire à ce que nous attendons d'un ORM basé sur SQL, cela ne vous donne pas vraiment une bonne idée de la puissance et de la réflexion différente derrière MongoDB. Passez du temps à jouer avec le pilote ruby ​​de niveau inférieur, 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 de ne pas considérer MongoDB comme une base de données pour le moment. 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 pour stocker et récupérer les hachages Ruby. Vous pouvez faire des choses relationnelles avec MongoDB, mais je vous recommande de vous en tenir uniquement à des documents autonomes pendant que vous essayez de comprendre NoSQL.

En ce qui concerne les liens à consulter, je vous recommande vivement 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 , aux index multikey et à MapReduce pour avoir une idée de certains des avantages et des points forts uniques d'une base de données NoSQL.

Emilie
la source
26

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, la release candidate pour une nouvelle version majeure de mongoid sortira. Cela va apporter beaucoup de choses utiles.

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

gem 'mongoïde', "~> 2.0.0.beta"

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

Je vous suggère également de rejoindre le groupe Google. Le trafic est faible et les gens sont prêts à répondre à toutes les questions. Par exemple, je leur ai montré ma première conception de modèle DB 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: une grande communauté.

Il existe 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 Faux avec Machinist. Mélange génial.

https://github.com/sevenwire/forgery

Une autre chose que je veux dire. Je viens d'un monde de base de données de relations, 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. Ceci 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. Ainsi, vous pouvez servir un fichier à partir de nombreux ordinateurs, chacun en envoyant une partie. Il évolue très bien :)

Ceci est fait en utilisant 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

Nerian
la source
8

1. La requête n'est pas sensible à la casse

eq

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

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

2. ID de la dernière insertion:

$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'];

De plus, _id n'est unique que 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

Donc, lorsque vous écrivez des données, utilisez (string) ou vérifiez is_array

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

6. Disque dur DOS

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

7. Il y avait quelques problèmes dans le passé avec MongoDb, mais pour le moment, la version 3.0 est assez impressionnante et stable.

user956584
la source
3

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

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

Mike Dirolf est interrogé ... 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'à des groupes de rencontre à New York, Londres, Washington DC et San Francisco.

Kris Krause
la source
2

Vous devriez définitivement jeter un œil sur les junemakers mongo-mapper: http://github.com/jnunemaker/mongomapper Mais je vous recommande aussi de jouer un peu avec le pilote pur Ruby Mongo pour voir comment mongo-mapper fonctionne 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 didacticiel Ruby Mongo. Juste au cas où vous ne l'auriez pas fait, voici le lien: http://www.mongodb.org/display/DOCS/Ruby+Tutorial

t6d
la source
Croyez-le ou non, ce n'était pas dans les liens que j'ai fait la queue pour lire, et cela ressemble à un bon. Merci.
Wayne Conrad