Quando usare altri sistemi di database di documenti orientati MongoDB o? [chiuso]

StackOverflow https://stackoverflow.com/questions/1476295

  •  16-09-2019
  •  | 
  •  

Domanda

Offriamo una piattaforma per video e audio-clip, foto e vettori grafics. Abbiamo iniziato con MySQL come database backend e recentemente inserito MongoDB per la memorizzazione di tutti i meta-dati di i file, perché MongoDB meglio si adatta alle esigenze. Per esempio: le foto possono avere Exif informazioni, i video possono avere tracce audio in cui dobbiamo vogliamo memorizzare il meta-informazioni di, anche. Video e grafica vettoriale non condividono alcuna meta-informazioni comuni, ecc quindi so, che MongoDB è perfetto per memorizzare questi dati non strutturati e tenerlo ricercabile.

Tuttavia, continuiamo a sviluppare la nostra piattaforma e l'aggiunta di funzionalità. Ora uno dei prossimi passi sarà fornire un forum per i nostri utenti. La domanda che ora si pone è: utilizzare il database MySQL, che sarebbe una buona scelta per la memorizzazione di forum e forum-messaggi, ecc o utilizzare MongoDB per questo, anche

Quindi la domanda è: quando utilizzare MongoDB e quando utilizzare un RDBMS. Cosa vorresti fare, MongoDB o MySQL, se si ha la scelta e perché si dovrebbe prendere?

È stato utile?

Soluzione

Nel NoSQL: Se solo fosse così facile , l'autore scrive di MongoDB:

  

MongoDB non è un negozio chiave / valore, è un po 'più. Non è sicuramente un RDBMS sia. Non ho usato MongoDB in produzione, ma ho usato un po 'la costruzione di un'applicazione di test ed è un pezzo molto fresco del kit. Sembra essere molto performante e uno ha, o avrà presto, la tolleranza ai guasti e auto-sharding (aka sarà in scala). Penso Mongo potrebbe essere la cosa più vicina ad una sostituzione RDBMS che ho visto finora. Non funzionerà per tutti i set di dati e modelli di accesso, ma è costruita per la vostra roba tipica CRUD. Memorizzazione di ciò che è essenzialmente un enorme hash, e di essere in grado di selezionare su uno di questi tasti, è ciò che la maggior parte delle persone utilizzano un database relazionale per. Se il DB è 3NF e non si fa alcun join (sei solo la selezione di un gruppo di tabelle e mettere insieme tutti gli oggetti, AKA cosa maggior parte delle persone in una web app), MongoDB probabilmente calci in culo per te.

Quindi, in conclusione:

  

La vera cosa da sottolineare è che se si è trattenuto dal fare qualcosa di super impressionante perché non è possibile scegliere un database, che si sta facendo male. Se si conosce mysql, solo usarlo. Ottimizzare quando è effettivamente necessario. Usalo come un k / v negozio, usarlo come un RDBMS, ma per amor di Dio, costruire il tuo killer application! Niente di tutto questo avrà importanza per la maggior parte delle applicazioni. Facebook utilizza ancora MySQL, un sacco. Wikipedia utilizza MySQL, un sacco. FriendFeed utilizza MySQL, un sacco. NoSQL è un grande strumento, ma non è certamente sarà il vostro vantaggio competitivo, non sta andando a fare la vostra applicazione a caldo, e soprattutto, gli utenti non si cura di nulla di tutto questo.

     

Che cosa sto andando a costruire la mia prossima app? Postgres Probabilmente. Dovrò usare NoSQL? Può essere. Potrei anche usare Hadoop Hive e. Potrei tenere tutto in file flat. Forse inizierò l'hacking su Maglev. userò ciò che è meglio per il lavoro. Se ho bisogno di segnalazione, non sarò utilizzando qualsiasi NoSQL. Se ho bisogno di caching, io probabilmente uso di Tokyo Tiranno. Se ho bisogno di acidità, non userò NoSQL. Se ho bisogno di un sacco di contatori, userò Redis. Se ho bisogno di transazioni, userò Postgres. Se ho un sacco di un unico tipo di documenti, io probabilmente usare Mongo. Se ho bisogno di scrivere 1 miliardo di oggetti al giorno, probabilmente sarei uso Voldemort. Se ho bisogno di ricerca a testo integrale, probabilmente sarei uso Solr. Se ho bisogno di ricerca a testo pieno di dati volatili, probabilmente sarei uso Sfinge.

Mi piace questo articolo, lo trovo molto istruttivo, dà una buona panoramica del paesaggio NoSQL e la campagna pubblicitaria. Ma, e questa è la parte più importante, in realtà aiuta a porsi le domande giuste quando si tratta di scegliere tra RDBMS e NoSQL. Vale la pena di IMHO lettura.

collegamento alternativo dell'articolo

Altri suggerimenti

Dopo due anni utilizzando MongoDb per un'applicazione sociale, sono stato testimone di cosa significhi veramente vivere senza un RDBMS SQL.

  1. Si finisce per lavori di scrittura di fare le cose come entrare dati provenienti da diverse tabelle / collezioni, qualcosa che un RDBMS farebbe per voi automaticamente.
  2. I tuoi funzionalità di query con NoSQL sono drasticamente paralizzato. MongoDb può essere la cosa più vicina a SQL ma è ancora estremamente molto indietro. Fidati di me. query SQL sono super intuitiva, flessibile e potente. query MongoDB non lo sono.
  3. query MongoDB in grado di recuperare i dati da una sola raccolta e approfittare di un solo indice. E MongoDb è probabilmente uno dei database NoSQL più flessibili. In molti scenari, questo significa più di andata e ritorno al server per trovare i record correlati. E poi si inizia i dati de-normalizzante -. Il che significa che i processi in background
  4. Il fatto che non è un database relazionale significa che non avrete (pensato da alcuni di essere cattivi performanti) vincoli di chiave esterna per garantire che i dati siano coerenti. Vi assicuro che questo è alla fine andando a creare incongruenze di dati nel database. Essere preparato. Molto probabilmente si inizierà a scrivere i processi o controlli per mantenere il vostro database coerente, che non sarà probabilmente un rendimento migliore che lasciare che gli RDBMS farlo per voi.
  5. Dimenticatevi di quadri maturi come Hibernate.

Io credo che il 98% di tutti i progetti sono probabilmente il modo migliore con una tipica RDBMS SQL che con NoSQL.

  

per memorizzare questi dati non strutturati

Come hai detto, MongoDB calza meglio per memorizzare i dati non strutturati. E questo può organizzare i dati in formato di documento. Questi RDBMS altenatives chiamato NoSQL gli archivi di dati ( MongoDB , CouchDB , Voldemort ) sono molto utili per le applicazioni in grado di scalare in maniera massiccia e richiedono l'accesso ai dati più velocemente da questi grandi archivi di dati.

E l'attuazione di queste banche dati sono più semplici rispetto al RDBMS regolare. Poiché si tratta di semplice chiave-valore o oggetti binari di stile documento direttamente serializzato nel disco. Questi archivi di dati non applicano le ACID proprietà e eventuali schemi . Questo non fornisce alcuna operazione capacità. Quindi questo può scalare grande e possiamo ottenere un accesso più rapido (lettura e scrittura).

Ma al contrario, impone RDBM ACID e schemi su dati. Se si voleva lavorare con dati strutturati che si può andare avanti con RDBM.

Vorrei scegliere MySQL per la creazione di Forum per questo genere di cose. Perché questo non è andare a scalare grande. E questo è molto semplice (comune) applicazione che ha strutturato le relazioni tra i dati.

Si noti che Mongo memorizza essenzialmente JSON. Se la tua applicazione si occupa di un sacco di JS oggetti (con nesting) e si vuole persistere questi oggetti poi c'è un argomento molto forte per l'utilizzo di Mongo. Rende il vostro DAL e strati MVC ultra sottile, perché non sono un-imballaggio tutte le proprietà dell'oggetto JS e cercando di costringerli-inserirsi in una struttura (schema) che non si adattano naturalmente in.

Abbiamo un sistema che ha diversi oggetti JS complesse al suo cuore, e ci piace Mongo, perché siamo in grado di persistere tutto molto, molto facilmente. I nostri oggetti sono anche piuttosto amorfo e destrutturato e Mongo assorbe che complicazione senza lampeggiare. Abbiamo un livello di reporting personalizzato che decifra i dati amorfi per il consumo umano, e che non era poi così difficile da sviluppare.

Direi che l'uso di un RDBMS se avete bisogno di operazioni complesse. In caso contrario, vorrei andare con MongoDB - più flessibile con cui lavorare e si sa che può scalare quando è necessario. (Io sono di parte però - io lavoro sul progetto MongoDB)

Chi ha bisogno distribuito, forum sharded? Forse Facebook, ma a meno che non si sta creando un Facebook-concorrente, basta usare Mysql, Postgres o qualsiasi altra cosa si sta più bene con. Se volete provare MongoDB, ok, ma non aspettatevi di fare la magia per voi. Avrà le sue stranezze e cattiveria generale, proprio come tutto il resto, come sono sicuro che hai già scoperto, se davvero avete lavorato su di esso già.

Certo, MongoDB può essere pubblicizzato e sembra facile sulla superficie, ma si incorrerà in problemi quali prodotti più maturi hanno già superato. Non essere attirati così facilmente, ma piuttosto attendere che "NoSQL" matura, o muore.

Personalmente, penso che "NoSQL" sarà appassire e morire dalla frammentazione, come non ci sono standard prefissati (quasi per definizione). Così non personalmente scommettere su di esso per eventuali progetti a lungo termine.

L'unica cosa che può salvare "NoSQL" nel mio libro, è se si può integrare in Ruby o lingue simili senza soluzione di continuità, e rendere il linguaggio "persistenti", quasi senza alcun overhead nella codifica e design. Che possono venire a passare, ma io aspetterò fino a quel momento, non ora, e ha bisogno di essere più maturo, naturalmente.

A proposito, perché stai creando un forum da zero? Ci sono tonnellate di forum open source che può essere ottimizzato per soddisfare la maggior parte delle esigenze, a meno che realmente sta creando la prossima generazione di Forum (cosa di cui dubito).

Ho visto in molte aziende stanno usando MongoDB per l'analisi in tempo reale provenienti da registri delle applicazioni. Il suo schema-freeness adatta veramente per registri delle applicazioni, in cui lo schema di registrazione tende a cambiare il time-to-tempo. Inoltre, la sua funzione Capped Collection è utile perché elimina automaticamente i vecchi dati per mantenere i dati si inseriscono nella memoria.

Questa è una zona Credo davvero che MongoDB adatta per, ma MySQL / PostgreSQL è più consigliabile in generale. Ci sono un sacco di documentazione e risorse di sviluppo sul web, così come la loro funzionalità e robustezza.

Il 2 motivo principale per cui si potrebbe desiderare di preferire Mongo sono

  • La flessibilità nella progettazione dello schema (tipo di archivio di documento JSON).
  • Scalabilità -. Basta aggiungere i nodi ed è in grado di scalare orizzontalmente abbastanza bene

E 'adatto per le grandi applicazioni dati. RDBMS non è un bene per i grandi dati.

Sai, tutta questa roba circa la raggiunge e le 'operazioni complesse' - ma è stato lui che Monty, molti anni fa, ha spiegato via il "bisogno" di COMMIT / ROLLBACK, dicendo che 'tutto ciò che è fatto in le classi di logica (e non il database) in ogni caso' - quindi è la stessa cosa di nuovo. Ciò che è necessario è un motore / recupero muto ma incredibilmente ordinata e veloce archiviazione dei dati, per il 99% di ciò che le applicazioni web fanno.

Come detto in precedenza, si può scegliere tra un sacco di scelte, dare un'occhiata a tutte quelle scelte: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb -Vs-Redis

Quello che suggerisco è quello di trovare la vostra migliore combinazione: MySQL + Memcache è davvero grande se avete bisogno di ACID e si desidera partecipare alcune tabelle MongoDB + Redis è perfetto per memorizzare documenti Neo4j è perfetto per database grafico

Quello che faccio: mi metto con MySQL + Memcache perché sono uso a, allora comincio con altri framework del database. In un singolo progetto, è possibile combinare MySQL e MongoDB per esempio!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top