Mongodb: cosa sapere prima dell'uso? [chiuso]


93

Sto iniziando un progetto hobby (senza entrate) usando Ruby on Rails. Ho fatto una discreta quantità di sviluppo in Rails usando Postgresql, e posso fare una buona imitazione dello schema normalizzato. Tuttavia, Mongrodb sembra nuovo e brillante. Cosa c'è di meglio per provare qualcosa di nuovo di un progetto hobby?

Ripensa a quando hai iniziato a usare Mongodb. Quali tecniche hai imparato in seguito che ti hanno fatto dire: "Se solo lo sapessi quando ho iniziato!" Quali plug-in hai scoperto che avresti utilizzato fin dall'inizio, se solo lo avessi saputo? Quali riferimenti vorresti che fossero stati aggiunti ai segnalibri?

Risposte:


63

Sicuramente sosterrei la raccomandazione di MongoMapper se utilizzerai MongoDB con Rails. Ti avverto, tuttavia, che non c'è (finora) altra documentazione oltre a un paio di post sul blog. Se non ti senti a tuo agio a scavare nel codice sorgente per vedere come funzionano le cose, probabilmente non è ancora per te.

Se lavori al di fuori di Rails, ti consiglio di stare lontano da MongoMapper. Poiché sta lavorando MongoDB in qualcosa di simile a quello che ci aspettiamo da un ORM supportato da SQL, non ti dà una buona idea della potenza e del diverso modo di pensare dietro MongoDB. Passa un po 'di tempo a giocare con il driver ruby ​​di livello inferiore e persino nella console javascript.

L'altra cosa che consiglierei, soprattutto visto che hai menzionato di saper normalizzare uno schema, è di non pensare a MongoDB come a un database per ora. Il modo in cui organizzi i tuoi dati in MongoDB è molto diverso da quello con un database relazionale. Prova a pensarlo più come un luogo in cui archiviare e recuperare gli hash di Ruby. Puoi fare alcune cose relazionali con MongoDB, ma ti consiglio di restare solo con documenti autonomi mentre cerchi di capire NoSQL.

Per quanto riguarda i collegamenti che dovresti guardare, ti consiglio vivamente di leggere tutto ciò che puoi sul sito MongoDB. La loro documentazione è molto buona. In particolare, dai un'occhiata alle query avanzate , agli indici multikey e a MapReduce per avere un'idea di alcuni dei vantaggi e dei punti di forza unici di un database NoSQL.


26

Sono quasi allo stesso livello in cui sei tu. Avvio di un nuovo progetto con MongoDB. Ho circa 7 settimane di esperienza. Questo è quello che ho trovato molto utile:

Usa Mongoid invece di Mongomapper

http://mongoid.org/

La documentazione è eccellente. Sul serio, eccellente. Dovrebbero volerci circa 15 minuti per leggere tutta la documentazione e avrai un'idea molto precisa di cosa puoi e non puoi fare con Mongoid.

Domani verrà rilasciata la release candidate per una nuova versione principale di mongoid. Porterà molte cose utili.

Sto usando Rails 3. Per installare la versione di sviluppo aggiungilo al tuo file gem:

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

L'attuale beta è 20, ma come ho detto, domani c'è la release candidate.

Inoltre ti consiglio di unirti anche al gruppo Google. Ha poco traffico e le persone sono molto disponibili a rispondere a qualsiasi domanda. Ad esempio, ho mostrato loro il mio primo progetto di modello di DB e mi hanno dato molti modi per migliorarlo. Anche il creatore di Mongoid risponde alle tue domande.

In due parole: grande comunità.

C'è questo plugin che ti permette di usare Machinist con mongo:

https://github.com/nmerouze/machinist_mongo

Funziona abbastanza bene.

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

Puoi usare la contraffazione con Machinist. Fantastico mix.

https://github.com/sevenwire/forgery

Un'altra cosa che voglio dire. Vengo da un mondo di database di relazioni, quindi all'inizio sembrava davvero strano: puoi salvare i file in un database mongo.

In effetti, potrebbe essere più veloce che gestirli come eravamo soliti fare. Ciò è dovuto al supporto di mongo per lo sharding. Sharding significa che puoi utilizzare un cluster di computer per servire il database Mongo. È senza soluzione di continuità. Master-slave. Quindi puoi servire un file da molti computer, ognuno dei quali ne invia una parte. Si adatta molto bene :)

Questo viene fatto usando GridFS. http://www.mongodb.org/display/DOCS/GridFS

Mongoid supporta quella configurazione master-slave.

Chiedimi se hai bisogno di maggiori informazioni.

Modificare:

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


8

1. La query non fa distinzione tra maiuscole e minuscole

eq

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

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

2. ID ultimo inserimento:

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

3. _id è un oggetto MongoId

Trova per ID:

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

Mostra _id:

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

Inoltre, _id è univoco per raccolta, può essere diverso su un altro server

4. MongoDB supporta LIMIT, OFFSET, ORDER

per un ordinamento avanzato è possibile utilizzare Aggregation Framework.

5. In SQL è Sql injection in MongoDB è Array injection

Quindi quando scrivi dei dati usa (stringa) o controlla is_array

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

6. HDD DOS

la dimensione predefinita di _POST è 8 MB in PHP, IN Mongo c'è un limite di 16 MB per documento. Quindi immagina che un utente falsifichi l'equazione USER_AGENT STRING nel tuo script analitico e poi invii 16 MB per singolo inserto.

7. Ci sono stati alcuni problemi in passato con MongoDb, ma al momento la 3.0 è piuttosto impressionante e stabile.


3

Ecco un ottimo principiante / introduzione al podcast MongoDb di .NET Rocks -

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

Mike Dirolf è intervistato ... lavora al progetto MongoDb. Oh, e la qualità del suono è eccellente.

Mike Dirolf è un ingegnere del software presso 10gen, dove lavora al progetto MongoDB. Lavora principalmente sui driver client per Python e Ruby, ma si prende anche del tempo per parlare di MongoDB - ha presentato a EuroPython, Strange Loop Conf, RubyEnRails, RuPy e RubyConf, nonché a gruppi di incontro a New York City, Londra, Washington DC e San Francisco.


2

Dovresti assolutamente dare un'occhiata a junemakers mongo-mapper: http://github.com/jnunemaker/mongomapper Ma ti consiglio anche di giocare un po 'con il puro driver Ruby Mongo per vedere come funziona mongo-mapper sotto il cofano. Non è molto difficile inserire alcuni dati in un database Mongo utilizzando Ruby.

Immagino che tu abbia già trovato il tutorial di Ruby Mongo. Nel caso non lo avessi fatto, ecco il link: http://www.mongodb.org/display/DOCS/Ruby+Tutorial


Che ci crediate o no, non era nei link che ho messo in coda per leggere, e sembra buono. Grazie.
Wayne Conrad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.