MongoDB e CouchDB sono entrambi tipi di database NoSQL basati su documenti. Un database di documenti è anche chiamato mdocument store e viene solitamente utilizzato per archiviare il formato del documento dei dati semistrutturati e una descrizione dettagliata degli stessi. Consente la creazione e l'aggiornamento di programmi senza la necessità di fare riferimento allo schema master. La gestione dei contenuti e la gestione dei dati nell'applicazione mobile sono due dei campi in cui è possibile applicare l'archivio documenti.
Panoramica di MongoDB
MongoDB è stata l'avvio di 10gen, che ha avuto origine nel 2007. Proveniente dalla famiglia degli archivi di documenti, è uno dei tipici database NoSQL senza schema con prestazioni relativamente elevate, scalabilità ed è ricco nelle funzioni di elaborazione dati. Questo database open source è scritto in C++ e fa uso di schemi dinamici. L'architettura di MongoDB contiene documenti raggruppati in raccolte in base alla loro struttura. Questo database utilizza BSON. BSON è la rappresentazione binaria di JSON e supporta l'archiviazione di documenti e lo scambio di dati. In MongoDB, gli argomenti aziendali possono essere archiviati in un numero minimo di documenti, che possono essere indicizzati principalmente o secondariamente, senza dividerli in più documenti relazionali.
Oltre alle capacità sopra menzionate di MongoDB, fornisce anche un'ampia raccolta di set di repliche in cui ogni set può contenere più di una copia di dati. Nei set di replica, tutte le funzioni primarie (lettura e scrittura) vengono eseguite sul set primario mentre i set secondari vengono utilizzati in caso di guasto del primo. MongoDB incorpora lo sharding, che utilizza il processo di ridimensionamento orizzontalmente. La proprietà di bilanciamento del carico di questo database dell'archivio documenti è giustificata dal fatto che viene eseguito su più server, fornendo così la duplicazione dei dati e il bilanciamento del carico. In cambio, fornisce anche il backup durante l'errore hardware. Fa anche uso di un file system a griglia che divide il file particolare in parti diverse e le memorizza separatamente.
Le caratteristiche comuni di MongoDB:
- Il design del modello di dati riduce la necessità di join e fornisce una facile evoluzione dello schema.
- Prestazioni elevate, poiché non contiene né join né transazioni che forniscono un accesso rapido e quindi le prestazioni sono aumentate.
- Elevata disponibilità grazie all'incorporazione di set di repliche che sono in grado di fornire backup durante gli errori e sono anche estremamente robusti.
- Facile nella scalabilità.
- La proprietà di sharding di MongoDB gli consente di eseguire in modo rapido ed efficiente le funzioni distribuite. Questo è anche possibile poiché supporta il ridimensionamento orizzontale dei dati.
- La lingua è molto ricca nella query. MongoDB ha un proprio linguaggio di query chiamato linguaggio di query Mongo, che può sostituire quelli SQL. Allo stesso modo, le funzioni di utilità e la mappa o la riduzione possono sostituire complicate funzioni aggregate.
Panoramica di CouchDB
CouchDB, un prodotto Apache Software Foundation e ispirato a Lotus Notes, è anche un database NoSQL basato su documenti open source che si concentra principalmente sul facile utilizzo. È un database a nodo singolo, che funziona esattamente come gli altri database. In genere inizia con l'istanza del nodo singolo, ma può essere aggiornato senza problemi al cluster. Consente all'utente di eseguire un singolo database su molti server o macchine virtuali. Un cluster CouchDB offre capacità e disponibilità elevate rispetto a CouchDB a nodo singolo. Usa Erlang, un linguaggio generico. Come MongoDB, usa anche javascript e map/reduce. Memorizza i dati sotto forma di una raccolta di documenti anziché come tabelle. Il CouchDB aggiornato è senza blocco, il che significa che non è necessario bloccare il database durante le scritture. I documenti in questo database utilizzano anche il protocollo HTTP e JSON, oltre alla possibilità di allegare loro file non JSON. Quindi, CouchDB è compatibile con qualsiasi applicazione o software che supporti il formato JSON.
Le caratteristiche comuni di CouchDB
- Un server CouchDB ospita database denominati, che memorizzano documenti con un nome univoco nel database, e CouchDB fornisce un'API HTTP RESTful per leggere e aggiornare (aggiungere, modificare, eliminare) documenti di database
- CouchDB fornisce una GUI basata su browser per gestire i dati, i permessi e la configurazione.
- CouchDB fornisce la forma più semplice di replica.
- CouchDB facilita l'autenticazione e il supporto della sessione:per mantenere aperta l'autenticazione tramite un cookie di sessione come un'applicazione web.
- CouchDB fornisce sicurezza a livello di database in cui le autorizzazioni per database sono separate in lettori e amministratori. I lettori possono leggere e scrivere nel database di CouchDB.
- CouchDB convalida i dati inseriti nel database utilizzando l'autenticazione per verificare che il creatore e l'ID della sessione di accesso siano gli stessi.
L'API REST viene utilizzata per scrivere e interrogare i dati . Offre inoltre la lettura, l'aggiunta, la modifica e l'eliminazione di documenti. Utilizza il modello ACID anziché BASE mediante implementazione MVCC. Proprio come MongoDB supporta la replica dei dispositivi quando sono offline. Utilizza uno speciale modello di replica chiamato Eventual Consistency. CouchDB è altamente e seriamente affidabile in termini di dati. I database a nodo singolo utilizzano una struttura dati resistente agli arresti anomali di sola aggiunta e un database multimodale o cluster può salvare i dati in modo ridondante in modo che possano essere resi disponibili ogni volta che l'utente ne ha bisogno. CouchDB può essere scalato insieme a grandi cluster come cluster globali a piccoli come dispositivi mobili. La possibilità di funzionare su qualsiasi dispositivo Android o iOS fa risaltare CouchDB tra gli altri database.
L'architettura CouchDB è distribuita, che supporta la sincronizzazione bidirezionale. Non richiede alcuno schema in quanto utilizza un ID univoco. Sebbene CouchDB segua la caratteristica AP (availability and partition tolerant) del modello CAP, per superare la coerenza negoziata, in pratica segue il modello ACID.
Confronti tra CouchDB e MongoDB
Funzione di confronto | CouchDB | MongoDB |
Modello di dati | Segue il modello orientato al documento e i dati vengono presentati in formato JSON. | Segue il modello orientato al documento, ma i dati sono presentati in formato BSON. |
Interfaccia | CouchDB utilizza un'interfaccia basata su HTTP/REST. È molto intuitivo e molto ben progettato. | MongoDB utilizza il protocollo binario e il protocollo personalizzato su TCP/IP. |
Archiviazione oggetti | In CouchDB, il database contiene documenti. | In MongoDB, il database contiene raccolte e la raccolta contiene documenti. |
Velocità | La velocità di lettura è fondamentale per il database, MongoDB è più veloce di CouchDB | MongoDB offre velocità di lettura più elevate. |
Supporto mobile | CouchDB può essere eseguito su dispositivi Apple iOS e Android, offrendo supporto per dispositivi mobili. | Nessun supporto mobile fornito |
Taglia | Il database può crescere con CouchDB; MongoDB è più adatto per una rapida crescita quando la struttura non è chiaramente definita dall'inizio. | Se abbiamo un database in rapida crescita, MongoDB è la scelta migliore. |
Metodo di query | Le query utilizzano funzioni di riduzione della mappa. Sebbene possa essere una soluzione elegante, può essere più difficile da imparare per le persone con esperienza SQL tradizionale. | MongoDB segue Map/Reduce (JavaScript) creando raccolta + linguaggio di query basato su oggetti. Per gli utenti con conoscenza di SQL, MongoDB è più facile da imparare in quanto è più vicino nella sintassi. |
Replica | CouchDB supporta la replica master-master con funzioni di risoluzione dei conflitti personalizzate. | MongoDB supporta la replica master-slave. |
Concorrenza | Segue l'MVCC (Multi-Version Concurrency Control). | Aggiorna sul posto. |
Preferenze | CouchDB favorisce la disponibilità. | MongoDB favorisce la coerenza. |
Coerenza delle prestazioni | CouchDB è più sicuro di MongoDB. | MongoDB, il database contiene raccolte e la raccolta contiene documenti. |
Coerenza | CouchDB alla fine è coerente. | MongoDB è fortemente coerente. |
Scritto in | È scritto in erlang. | È scritto in C++. |
Analisi | Se abbiamo bisogno di un database funzionante, mobile, della replica master-master o della durabilità di un singolo server, allora CouchDB è un'ottima scelta. | Se stiamo cercando il massimo throughput o abbiamo un database in rapida crescita, MongoDB è la strada da percorrere. |
CouchDB e MongoDB:query molto diverse
CouchDB e MongDB sono archivi di dati orientati ai documenti che funzionano con documenti JSON ma quando si tratta di query, entrambi i database non potrebbero essere più diversi. CouchDB richiede viste predefinite (che sono essenzialmente funzioni JavaScript MapReduce) e MongoDB supporta le query dinamiche (fondamentalmente ciò a cui siamo abituati con le normali query SQL ad hoc RDBMS).
Ad esempio, per inserire alcuni dati in CouchDB utilizzando RESTClient di Groovy ed emettere un post RESTful come di seguito:
import static groovyx.net.http.ContentType.JSON
import groovyx.net.http.RESTClient
def client = new RESTClient("http://localhost:5498/")
response = client.put(path: "parking_tickets/1280002020",
contentType: JSON,
requestContentType: JSON,
body: [officer: "Micheal Jordan",
location: "189 Berkely Road",
vehicle_plate: "KL5800",
offense: "Parked in no parking zone",
date: "2020/02/01"])
Codice di esempio una funzione per interrogare qualsiasi documento la cui proprietà dell'ufficiale sia "Micheal Jordan":
function(doc) {
if(doc.officer == "Micheal Jordan"){
emit(null, doc);
}
}
Quando inviamo una richiesta HTTP GET al nome di quella vista, possiamo aspettarci almeno un documento come di seguito:
response = client.get(path: "parking_tickets/_view/by_name/officer_grey",
contentType: JSON, requestContentType: JSON)
assert response.data.total_rows == 1
response.data.rows.each{
assert it.value.officer == "Micheal Jordan"
}
MongoDB funziona in modo molto simile a quello a cui siamo abituati con i normali database:possiamo interrogare tutto ciò che il nostro cuore desidera in fase di esecuzione.
Inserimento della stessa istanza di un ticket di parcheggio utilizzando il driver Java nativo di MongoDB:
DBCollection coll = db.getCollection("parking_tickets");
BasicDBObject doc = new BasicDBObject();
doc.put("officer", "Micheal Jordan");
doc.put("location", "189 Berkely Road ");
doc.put("vehicle_plate", "KL5800");
//...
coll.insert(doc);
Per interrogare qualsiasi biglietto da MongoDB emesso dall'agente Micheal Jordan semplicemente emettendo una query sulla proprietà dell'ufficiale:
BasicDBObject query = new BasicDBObject();
query.put("officer", "Micheal Jordan");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}
Conclusione
In questo blog, abbiamo confrontato due database NoSQL basati su documenti:MongoDB e CouchDB. La tabella fornisce una panoramica dei principali confronti parametrici tra questi due database. Come abbiamo visto, la priorità del progetto determinerà la scelta del sistema. Le principali differenze includono il metodo di replica e il supporto della piattaforma. Inoltre, dai confronti, è chiaro che se l'applicazione richiede maggiore efficienza e velocità, MongoDB è una scelta migliore rispetto a CouchDB. Se l'utente ha bisogno di eseguire il suo database su dispositivi mobili e ha anche bisogno della replica multi-master, CouchDB è una scelta ovvia. Inoltre, MongoDB è più adatto di CouchDB se il database sta crescendo rapidamente. Il principale vantaggio dell'utilizzo di CouchDB è che è supportato su dispositivi mobili (Android e iOS) anziché su MongoDB. Quindi, in pratica, requisiti applicativi diversi richiederanno database diversi in base a scenari.
Abbiamo osservato che MongoDB è leggermente migliore di CouchDB poiché utilizza la struttura di query simile a SQL e lo stesso è più semplice nel primo. Inoltre, per l'utilizzo di query dinamiche, MongoDB è una scelta molto migliore. Per quanto riguarda la sicurezza in entrambi i database, la ricerca è ancora in corso ed è difficile dire quale di questi fornisca un ambiente migliore e sicuro.