Non puoi mai parlare del cosiddetto database "NoSQL" senza portare il teorema CAP (Consistenza, disponibilità, partizione: scegli due). Se devi scegliere di dire, tra MongoDB (Partition, Consistency) e CouchDB (Availability, Partition), il primo a cui devi pensare è "Ho bisogno di dati corretti o ho bisogno di accedere sempre?".
Questi nuovi database sono stati fatti per essere partizionati. Ma cosa succede se non ? Cosa succede se penso che sia piuttosto interessante avere una chiave / valore, una colonna, un documento, qualunque database invece di uno relazionale, e basta creare un'istanza del server e non dividerla mai? In tal caso, non avrei sia disponibilità e coerenza? MongoDB non avrebbe bisogno di replicare nulla, quindi sarebbe disponibile. E CouchDB avrebbe solo una fonte di dati, quindi sarebbe piuttosto coerente.
Quindi ciò significherebbe che, in quel caso, MongoDB e CouchDB avrebbero poca differenza in termini di casi d'uso? Beh, eccetto ovviamente performance, API e al, ma sarebbe più come scegliere tra PostgreSQL e MySQL che avere due serie di requisiti fondamentalmente differenti.
Sono qui? Posso cambiare un database AP o CP in uno AC non creando più di un'istanza? O c'è qualcosa che mi manca?
Facciamo la domanda al contrario. Cosa succede se prendo un database relazionale, diciamo MySQL, e lo metto in una configurazione master / slave. Non utilizzo le transazioni ACID Se richiedo che qualsiasi scrittura sia sincronizzata immediatamente con lo slave, non dovrebbe essere un database CP? E se lo sincronizzo con intervalli predefiniti, e non importa se un client legge dati obsoleti da uno slave. Non lo renderebbe un database AP? Non significherebbe che se rinuncio alla conformità ACID posso ancora usare il modello relazionale per un database partionato?
In sostanza: la scalabilità di ciò che sei disposto a rinunciare nel teorema CAP, più del modello di dati sottostante? Avere colonna, documento, valore chiave, qualunque cosa dia una spinta alla scalabilità su un modello relazionale? Potremmo progettare un database relazionale progettato da zero per la tolleranza delle partizioni? (Forse esiste già). Potremmo rendere compatibile l'ACID del database NoSQL?
Ci scusiamo, ci sono un sacco di domande, ma ho letto molto sul database NoSQL di recente e mi sembra che il più grande vantaggio di usarle sia che si adattano meglio alla "forma" dei tuoi dati, piuttosto che al semplice partizione, CAP e rinuncia alla conformità ACID. Dopotutto, non tutti hanno così tanti dati di cui hanno bisogno per partizionarlo. Esiste un vantaggio in termini di prestazioni / scalabilità nel non utilizzare il modello relazionale prima ancora di pensare al partizionamento dei miei dati?