MongoDB en CouchDB zijn beide typen op documenten gebaseerde NoSQL-databases. Een documentdatabase wordt ook wel mdocument store genoemd en wordt meestal gebruikt om het documentformaat van de semi-gestructureerde gegevens en een gedetailleerde beschrijving ervan op te slaan. Hiermee kunnen programma's worden gemaakt en bijgewerkt zonder dat u naar het hoofdschema hoeft te verwijzen. Contentbeheer en verwerking van gegevens in de mobiele applicatie zijn twee van de velden waar de documentopslag kan worden toegepast.
Overzicht van MongoDB
MongoDB was de start-up van 10gen, die ontstond in 2007. Afkomstig uit de familie van Document-stores, is het een van de typische NoSQL, schemavrije databases met relatief hoge prestaties, schaalbaarheid en rijk in gegevensverwerkingsfuncties. Deze open source database is geschreven in C++ en maakt gebruik van dynamische schema's. De architectuur van MongoDB bevat documenten die zijn gegroepeerd in collecties op basis van hun structuur. Deze database maakt gebruik van BSON. BSON is de binaire weergave van JSON en ondersteunt documentopslag en gegevensuitwisseling. In MongoDB kunnen zakelijke onderwerpen worden opgeslagen in een minimaal aantal documenten, die primair of secundair kunnen worden geïndexeerd, zonder ze in meerdere relationele documenten te splitsen.
Samen met de bovengenoemde mogelijkheden van MongoDB, biedt het ook een grote verzameling replicasets waarbij elke set meer dan één kopie van gegevens kan bevatten. In de replicasets worden alle primaire functies (lezen en schrijven) uitgevoerd op de primaire set, terwijl secundaire sets worden gebruikt in geval van storing van de eerste. MongoDB bevat sharding, waarbij gebruik wordt gemaakt van het schalingsproces horizontaal. De taakverdelingseigenschap van deze documentarchiefdatabase wordt gerechtvaardigd door het feit dat deze op meerdere servers draait, waardoor dubbele gegevens en verdeling van de belasting mogelijk zijn. In ruil daarvoor biedt het ook back-up tijdens de hardwarestoring. Het maakt ook gebruik van een rasterbestandssysteem dat het specifieke bestand in verschillende delen verdeelt en afzonderlijk opslaat.
De gemeenschappelijke kenmerken van MongoDB:
- Het ontwerp van het gegevensmodel vermindert de behoefte aan joins en zorgt voor een eenvoudige evolutie van het schema.
- Hoge prestaties, omdat het geen lidmaatschap of transacties bevat die snelle toegang bieden en daardoor worden de prestaties verbeterd.
- Hoge beschikbaarheid dankzij de integratie van replicasets die back-up kunnen bieden tijdens storingen en ook zeer robuust zijn.
- Gemakkelijke schaalbaarheid.
- De sharding-eigenschap van MongoDB stelt het in staat om snel en op een efficiënte manier uit te voeren in de gedistribueerde functies. Dit is ook mogelijk omdat het horizontale schaling van gegevens ondersteunt.
- Taal is zeer rijk aan de zoekopdracht. MongoDB heeft zijn eigen querytaal genaamd Mongo-querytaal, die SQL-query's kan vervangen. Evenzo kunnen utiliteitsfuncties en in kaart brengen of verkleinen gecompliceerde aggregatiefuncties vervangen.
Overzicht van CouchDB
CouchDB, een Apache Software Foundation-product en geïnspireerd door Lotus Notes, is ook een open-source op documenten gebaseerde NoSQL-database die zich voornamelijk richt op eenvoudig gebruik. Het is een database met één knooppunt die precies werkt als andere databases. Het begint over het algemeen met de instantie met één knooppunt, maar kan naadloos worden geüpgraded naar het cluster. Hiermee kan de gebruiker een enkele database op veel servers of VM's uitvoeren. Een CouchDB-cluster biedt een hoge capaciteit en beschikbaarheid in vergelijking met CouchDB met één knooppunt. Het gebruikt Erlang, een algemene taal. Net als MongoDB gebruikt het ook javascript en map/reduce. Het slaat gegevens op in de vorm van een verzameling documenten in plaats van als tabellen. De bijgewerkte CouchDB is lockless, wat betekent dat het niet nodig is om de database te vergrendelen tijdens het schrijven. De documenten in deze database maken ook gebruik van het HTTP-protocol en JSON, samen met de mogelijkheid om er niet-JSON-bestanden aan toe te voegen. CouchDB is dus compatibel met elke applicatie of software die het JSON-formaat ondersteunt.
De gemeenschappelijke kenmerken van CouchDB
- Een CouchDB-server host benoemde databases, die documenten opslaan met een unieke naam in de database, en CouchDB biedt een RESTful HTTP API voor het lezen en bijwerken (toevoegen, bewerken, verwijderen) van databasedocumenten
- CouchDB biedt een browsergebaseerde GUI om de gegevens, toestemming en configuratie te verwerken.
- CouchDB biedt de eenvoudigste vorm van replicatie.
- CouchDB faciliteert authenticatie en sessie-ondersteuning:om authenticatie open te houden via een sessiecookie zoals een webtoepassing.
- CouchDB biedt beveiliging op databaseniveau waarbij de machtigingen per database zijn verdeeld in lezers en beheerders. Lezers mogen lezen en schrijven naar de CouchDB-database.
- CouchDB valideert de ingevoerde gegevens in de database met behulp van authenticatie om te verifiëren dat de maker en de login-sessie-ID hetzelfde zijn.
REST API wordt gebruikt om de gegevens te schrijven en op te vragen . Het biedt ook het lezen, toevoegen, bewerken en verwijderen van documenten. Het gebruikt het ACID-model in plaats van BASE door MVCC-implementatie. Net zoals MongoDB de replicatie van apparaten ondersteunt wanneer ze offline zijn. Het maakt gebruik van een speciaal replicatiemodel genaamd Eventual Consistency. CouchDB is zeer en serieus betrouwbaar in termen van gegevens. Single-node databases maken gebruik van een crash-resistente datastructuur die alleen kan worden toegevoegd en een multimode- of clusterdatabase kan de data redundant opslaan, zodat deze beschikbaar kan worden gemaakt wanneer de gebruiker deze nodig heeft. CouchDB kan worden opgeschaald als grote clusters als globale clusters tot kleine clusters als mobiele apparaten. De mogelijkheid om op elk Android- of iOS-apparaat te draaien, zorgt ervoor dat CouchDB opvalt tussen andere databases.
De CouchDB-architectuur wordt gedistribueerd, wat bidirectionele synchronisatie ondersteunt. Het vereist geen schema omdat het gebruik maakt van een unieke id. Hoewel CouchDB de AP-functie (beschikbaarheid en partitietolerantie) van het CAP-model volgt, volgt het het ACID-model op een praktische basis om de verhandelde consistentie te overwinnen.
Vergelijkingen tussen CouchDB en MongoDB
Vergelijkingsfunctie
CouchDB
MongoDB
Gegevensmodel
Het volgt het documentgeoriënteerde model en gegevens worden gepresenteerd in JSON-indeling.
Het volgt het documentgeoriënteerde model, maar gegevens worden gepresenteerd in BSON-indeling.
Interface
CouchDB gebruikt een HTTP/REST-gebaseerde interface. Het is zeer intuïtief en zeer goed ontworpen.
MongoDB gebruikt het binaire protocol en het aangepaste protocol via TCP/IP.
Objectopslag
In CouchDB bevat de database documenten.
In MongoDB bevat de database verzamelingen en bevat de verzameling documenten.
Snelheid
De leessnelheid is van cruciaal belang voor de database, MongoDB is sneller dan CouchDB
MongoDB biedt hogere leessnelheden.
Mobiele ondersteuning
CouchDB kan worden uitgevoerd op Apple iOS- en Android-apparaten en biedt ondersteuning voor mobiele apparaten.
Geen mobiele ondersteuning
Maat
De database kan groeien met CouchDB; MongoDB is beter geschikt voor snelle groei wanneer de structuur niet vanaf het begin duidelijk is gedefinieerd.
Als we een snelgroeiende database hebben, is MongoDB de betere keuze.
Opvraagmethode
Query's gebruiken kaartverkleiningsfuncties. Hoewel het een elegante oplossing kan zijn, kan het moeilijker zijn voor mensen met traditionele SQL-ervaring om te leren.
MongoDB volgt Map/Reduce (JavaScript) voor het maken van een verzameling + objectgebaseerde querytaal. Voor gebruikers met SQL-kennis is MongoDB gemakkelijker te leren omdat de syntaxis dichterbij is.
Replicatie
CouchDB ondersteunt master-master-replicatie met aangepaste functies voor conflictoplossing.
MongoDB ondersteunt master-slave-replicatie.
Gelijktijdigheid
Het volgt de MVCC (Multi-Version Concurrency Control).
In-place bijwerken.
Voorkeuren
CouchDB geeft de voorkeur aan beschikbaarheid.
MongoDB is voorstander van consistentie.
Consistentie van prestaties
CouchDB is veiliger dan MongoDB.
MongoDB, de database bevat collecties en collectie bevat documenten.
Consistentie
CouchDB is uiteindelijk consistent.
MongoDB is sterk consistent.
Geschreven in
Het is geschreven in Erlang.
Het is geschreven in C++.
Analyse
Als we een database nodig hebben die mobiel draait, master-master-replicatie of duurzaamheid van één server nodig heeft, dan is CouchDB een goede keuze.
Als we op zoek zijn naar maximale doorvoer, of een snelgroeiende database hebben, is MongoDB de juiste keuze.
CouchDB en MongoDB:enorm verschillende zoekopdrachten
CouchDB en MongDB zijn documentgeoriënteerde datastores die werken met JSON-documenten, maar als het op queries aankomt, kunnen beide databases niet meer van elkaar verschillen. CouchDB vereist vooraf gedefinieerde weergaven (die in wezen JavaScript MapReduce-functies zijn) en MongoDB ondersteunt dynamische query's (in feite wat we gewend zijn met normale RDBMS ad-hoc SQL-query's).
Om bijvoorbeeld wat gegevens in CouchDB in te voegen met behulp van Groovy's RESTClient en een RESTful-bericht uit te geven, zoals hieronder:
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"])
Voorbeeldcode van een functie om elk document op te vragen waarvan de officierseigenschap "Micheal Jordan" is:
function(doc) {
if(doc.officer == "Micheal Jordan"){
emit(null, doc);
}
}
Als we een HTTP GET-verzoek sturen naar de naam van die weergave, kunnen we ten minste één document verwachten, zoals hieronder:
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 werkt net zoals we gewend zijn met normale databases:we kunnen tijdens runtime zoeken naar wat ons hartje begeert.
Dezelfde instantie van een parkeerkaart invoegen met behulp van MongoDB's native Java-stuurprogramma:
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);
Om een ticket van MongoDB uitgegeven door agent Micheal Jordan op te vragen door simpelweg een vraag te stellen op het terrein van de agent:
BasicDBObject query = new BasicDBObject();
query.put("officer", "Micheal Jordan");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}
Conclusie
In deze blog hebben we twee op documenten gebaseerde NoSQL-databases vergeleken:MongoDB en CouchDB. De tabel geeft een overzicht van de belangrijkste parametrische vergelijkingen tussen deze twee databases. Zoals we hebben gezien, zal de prioriteit van het project de keuze van het systeem bepalen. Grote verschillen zijn onder meer de replicatiemethode en platformondersteuning. Uit de vergelijkingen blijkt ook dat als de applicatie meer efficiëntie en snelheid vereist, MongoDB een betere keuze is dan CouchDB. Als de gebruiker zijn database op mobiel moet draaien en ook multi-master replicatie nodig heeft, dan is CouchDB een voor de hand liggende keuze. MongoDB is ook beter geschikt dan CouchDB als de database snel groeit. Het belangrijkste voordeel van het gebruik van CouchDB is dat het wordt ondersteund op mobiele apparaten (Android en iOS) in plaats van MongoDB. Dus in principe zullen verschillende applicatievereisten verschillende databases vereisen op basis van scenario's.
We hebben geconstateerd dat MongoDB iets beter is dan CouchDB omdat het de SQL-achtige structuur van query's gebruikt, en hetzelfde is gemakkelijker in de eerste. Ook voor het gebruik van dynamische query's is MongoDB een veel betere keuze. Wat betreft de beveiliging in beide databases, wordt nog steeds onderzoek gedaan en het is moeilijk te zeggen welke van deze een betere en veilige omgeving biedt.