2010-03-19 7 views
23

Ho una buona ragione per usare MongoDB per parte della mia app. Le persone generalmente lo descrivono come non adatto per applicazioni "transazionali" come una banca in cui le transazioni devono essere esatte/coerenti, ecc.Ha senso utilizzare BOTH mongodb e mysql nella stessa applicazione di rotaie?

Ha senso dividere i modelli in Rails e utilizzarne alcuni. MySql e altri mongo? O questo generalmente causerà più problemi di quanti ne valga?

io non sto costruendo un'applicazione bancaria o nulla, ma stava pensando potrebbe avere senso per la tabella o le transazioni tavolo di mio utente (entrate di registrazione) per fare quella parte in MySql.

risposta

23

Questo è ciò che facciamo con CouchDB e PostgreSQL.

tutti i nostri utenti e gruppi genere di cose sono nel database PostgreSQL.
Tutto il resto (nel nostro caso, alcuni record con dati statistici) si trovano nel database di couchdb.

Nel nostro caso, esso ci permette di avere un database CouchDB per client (l'applicazione si collega a uno o un altro a seconda del host dell'utente).
E solo un database postgresql che contiene tutti gli utenti.

Quindi sì penso che sia una buona idea avere uno SQL e un database NoSQL nella stessa applicazione.

+2

Grazie fantastici per l'esempio del mondo reale! –

+1

Utilizzate un connettore CouchDB o chiamate direttamente tramite REST direttamente? Ho uno scenario che ha senso usare entrambi, e non sono sicuro che un livello di record attivo nel mezzo sia utile dato che le chiamate saranno recuperate ed eseguite. – eddieroger

3

Sarei diffidente nei confronti di un approccio diviso, anche se non lo escluderei.

Se avete bisogno di MySQL + InnoDB e suona come si fa, mi presento solo MongoDB per le parti preferibilmente più isolati che hanno qualcosa di significativo da guadagnare i benefici che MongoDB porta, e hanno rapporti minimali alle tabelle di base di MySQL .

Attualmente sto lottando con lo stesso problema, un'applicazione Rails con 20ish tavoli su MySQL. Utilizzando MongoDB risolverebbe alcuni guai di progettazione di database (sotto-oggetti nidificati e le colonne di matrice indicizzabili soprattutto), ma è difficile da giustificare il sovraccarico di:

  • 2 differenti metodi di interrogazione
  • codice personalizzato Awkward lungo le cuciture di Oggetti MySQL/Mongo che si riferiscono l'un l'altro.
  • Una seconda piattaforma di database da supportare nella produzione.

Sono in procinto di implementare MongoDB per il nostro tavolo di registrazione, e ho intenzione di prenderlo da lì.

2

Direi che hai risposto alla tua domanda qui.

Ho un buon motivo per utilizzare MongoDB per una parte della mia app.

Supponendo che si abbia anche una buona ragione per tenere altre parti in MySQL, direi che la risposta è sì. La tua domanda implica (almeno per me) che tu abbia una comprensione buona e ben studiata delle varie opzioni e dei loro punti di forza e debolezza e hai quindi raggiunto una conclusione ragionevole in quanto la suddivisione dei tuoi modelli è fattibile.

Supponendo che le due metà non siano collegate in qualche modo (le relazioni tra i due suoni come una ricetta per il dolore in seguito), suggerirei di provarci e utilizzare ogni strumento per ciò che è meglio.

È possibile affrontare alcune delle preoccupazioni che Michael solleva con questo approccio. poiché ti stai concentrando sull'uso di Rails, puoi utilizzare ActiveRecord per i tuoi modelli basati su MySQL e utilizzare MongoMapper per i tuoi modelli basati su MongoDb. In questo modo, non dovrai affrontare due metodi di interrogazione completamente diversi poiché MongoMapper fornisce un approccio molto ActiveRecordish. Ovviamente, puoi facilmente passare alle query specifiche di Mongo come e quando è necessario.

La preoccupazione per le relazioni cross-DB è valida a mio parere e se questo è qualcosa che si finisce per avere un sacco di, consiglierei sicuramente di esaminare la situazione per assicurarsi che questo è qualcosa che sei felice di vivere con. Immagino che potresti risparmiare un sacco di dolore per dopo in quel particolare caso.

Nel complesso, suggerirei che finché le due metà sono relativamente disconnesse l'una dall'altra, un livello di persistenza della personalità diviso funzionerà bene per voi.

5

Non c'è motivo per cui non sia possibile mantenere la tabella degli utenti in MongoDB. Se si decide di mantenere una tabella delle transazioni in MongoDB è un'altra domanda. Se sono necessarie transazioni con più oggetti, è necessario utilizzare un database relazionale che supporti le transazioni. Se non hai bisogno di questo stile di transazione, allora usare MongoDB per questo può essere comunque una buona idea.

Ricordare che se si utilizza MongoDB, si consiglia di eseguire la replica per il failover.

La cosa da tenere a mente è che se si utilizza un database relazionale a causa delle garanzie di coerenza, è comunque necessario assicurarsi che l'hardware sia configurato per sfruttare tali funzionalità. Vedere la nota di cautela qui:

http://dev.mysql.com/doc/refman/4.1/en/innodb-configuration.html

Se non stai prendendo queste precauzioni, allora non c'è una grande differenza tra la durata di MongoDB e quello di un database relazionale.

+0

Wow - non aveva idea che fosse il caso su MySql. grazie per le informazioni! –

Problemi correlati