Domanda

In questo momento sto sviluppando il prototipo di un'applicazione web che aggregati gran numero di voci di testo da un gran numero di utenti. Questi dati devono essere frequentemente esposti indietro e spesso aggiornati. Al momento posso conservare il contenuto all'interno di un database MySQL e Usa livello NHibernate ORM per interagire con il DB. Ho una tabella definita per utenti, ruoli, osservazioni, tag, notifiche, ecc mi piace questa soluzione perché funziona bene e il mio codice sembra bello e sano di mente, ma sono anche preoccupato per come MySQL si esibirà una volta le dimensioni del nostro database raggiunge un numero significativo. Sento che può lottare eseguire operazioni di join abbastanza veloce.

Questo mi ha fatto pensare a sistema di database non relazionale come MongoDB , CouchDB , Cassandra Hadoop . Purtroppo non ho alcuna esperienza con entrambi. Ho letto alcune recensioni positive su MongoDB e sembra interessante. Sono felice di trascorrere il tempo e imparare se si risulta essere la strada da percorrere. Mi piacerebbe molto apprezzato tutti i punti un'offerta o problemi da considerare quando si va con nessuno DBMS relazionale?

È stato utile?

Soluzione

Le altre risposte qui si sono concentrati principalmente sugli aspetti tecnici, ma penso che ci sono importanti punti da effettuare che si concentrano sul società di avvio aspetto delle cose:

  • Availabililty di talento. MySQL è molto comune e probabilmente troverete più facile (e più importante, più economico) per trovare gli sviluppatori per questo, rispetto ai sistemi di database più rarefatti. Questa base di sviluppatori più ampia significherà anche altri tutorial, una comunità di supporto più attivo, ecc.
  • facilità di sviluppo. Anche in questo caso, perché MySQL è così comune, troverete che è il db di scelta per grandi sistemi molti / servizi. Questo terreno comune può fare qualsiasi integrazione esterna un po 'più facile.
  • si stanno preparando per una situazione che non può mai esistere, ed è gestibile se lo fa. Pochissime imprese (Nevermind start-up) si avvicinano ai limiti di MySQL, e con tutto il rispetto (e io sono solo indovinare qui); la probabilità che la vostra partenza sarà mai colpito il tipo di dati di un throughput di paralizzare un ben strutturato, db MySQL dotati di risorse è quasi zero.

In sostanza, non spendere il vostro tempo (== denaro) preoccuparsi di quale db uso, come MySQL può gestire molto di dati, è ben collaudato e ben supportato.

Tornando al lato tecnico delle cose ... qualcosa che avrà un molto maggiore impatto sulla velocità della vostra applicazione di scelta di db, è come in modo efficiente i dati possono essere Copia cache . Una cache efficace può avere effetti drammatici sulla riduzione del carico db e accelerare la responsivness generale di un app. Vorrei trascorrere il vostro tempo indagando le soluzioni di caching e fare in modo si sta sviluppando la tua applicazione in modo tale che si può fare il miglior uso di queste soluzioni.

Cordiali saluti, la mia soluzione di caching di scelta è memcached .

Altri suggerimenti

Finora nessuno ha menzionato PostgreSQL come alternativa a MySQL sul lato relazionale. Essere consapevoli del fatto che le librerie di MySQL sono puri GPL, non LGPL. Che si potrebbe costringere a rilasciare il codice se ci si collega a loro, anche se forse qualcuno con più esperienza legale potrebbe dirvi meglio le implicazioni. D'altra parte, il collegamento a una libreria di MySQL non è lo stesso che appena si collega ai comandi server e problema, è possibile farlo con closed source.

PostreSQL solito è la migliore sostituzione gratuita di Oracle e la licenza BSD dovrebbe essere più favorevole alle imprese.

Dal momento che si preferisce un database non relazionale, ritengono che la transizione sarà più drammatico. Se hai bisogno di personalizzare il database, si dovrebbe anche prendere in considerazione il fattore tipo di licenza.

Ci sono tre cose che realmente hanno un impatto profondo su cui uno è la scelta migliore del database e non si menzionano:

  1. Le dimensioni dei vostri dati o se è necessario memorizzare i file all'interno del database.
  2. Un enorme numero di letture e pochissimi scrive (anche con restrizioni). In questo caso più di un database è necessario una directory come LDAP
  3. L'importanza della di distribuzione e / o la replica dei dati. La maggior parte dei database relazionali possono essere più o meno ben replicati, ma a causa della loro concetto / disegno non occuperà della distribuzione dei dati, nonché ... ma pensate di gestire come dati tanto che non rientra in un server o avere diritti di accesso che ha bisogno di particolare a parte / server in più?

Tuttavia la maggior parte delle persone andrà per un database non relazionale solo perché non lo fanno come imparare SQL

Cosa pensi sia una notevole quantità di dati? MySQL , e motori di database relazionali in fondo la maggior parte, in grado di gestire piuttosto grande quantità di dati, con gli indici corretti e sani di mente di database schema.

Perché non si tenta Come si comporta MySQL con quantità di dati più grandi nella configurazione? Fare alcuni script che generano dati realistici per database di test MySQL e e generare un certo carico sul sistema e vedere se è abbastanza veloce.

Solo quando non è abbastanza veloce, primo inizio considerando l'ottimizzazione del database e la modifica al motore di database diverso.

Fare attenzione con NHibernate , è facile per ottenere una soluzione che è bello e facile da codice con, ma ha prestazioni male con grandi quantità di dati. Per esempio se utilizzare il recupero pigri o ansiosi con le associazioni devono essere considerati con attenzione. Non voglio dire che non si deve usare NHibernate, ma assicuratevi di aver capito come funziona NHibernate, ad esempio quello "n + 1 seleziona" mezzi -Problema.

Misura, non date per scontato.

I database relazionali e database NoSQL possono entrambi scala enormemente, se l'applicazione è scritta a destra in ogni caso, e se il sistema funziona su è sintonizzata correttamente.

Quindi, se si dispone di un caso d'uso per NoSQL, il codice ad esso. Oppure, se siete più comodi con relazionale, il codice a quello. Poi, misura quanto bene si comporta e come scale, e se va bene, andare con lui, se non, analizzare il perché.

Solo una volta capito il tuo problema di prestazioni si deve andare alla ricerca di tecnologie esotiche, a meno che non sei a tuo agio con la tecnologia o vogliono provare per qualche altra ragione.

Io suggerirei di provare ogni db e scegliere quello che lo rende più semplice per sviluppare l'applicazione. Vai a http://try.mongodb.org provare MongoDB con un semplice tutorial. Non si preoccupi tanto di velocità dato che al sviluppatore all'inizio tempo è più prezioso di tempo di CPU.

So che molti utenti MongoDB sono stati in grado di fosso loro ORM ed il loro livello di cache. modello di dati di Mongo è molto più vicino agli oggetti con cui lavori di tabelle relazionali, in modo da poter solito solo memorizzare direttamente gli oggetti così com'è, anche se contengono elenchi di oggetti nidificati, come ad esempio un post con i commenti. Inoltre, poiché Mongo è abbastanza veloce per la maggior parte dei siti così com'è, si può evitare di trattare la complessità di caching e generalmente consegnare un sito più in tempo reale. Ad esempio, Wordnik.com riportato 250.000 letture / sec e 100.000 inserti / sec con un 1,2 TB / 5 miliardi oggetto di DB.

Ci sono alcuni modi per connettersi a MongoDB da Net, ma non ho abbastanza esperienza con quella piattaforma di sapere che è meglio:

. Disclaimer: lavoro che per 10gen su MongoDB quindi sono un po 'prevenuto

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