MongoDB og CouchDB er begge typer af dokumentbaserede NoSQL-databaser. En dokumentdatabase kaldes også mdocument store, og de bruges normalt til at gemme dokumentformatet af de semi-strukturerede data og detaljeret beskrivelse af det. Det tillader oprettelse og opdatering af programmer uden behov for at henvise til masterskemaet. Indholdsstyring og håndtering af data i mobilapplikationen er to af de felter, hvor dokumentlageret kan anvendes.
Oversigt over MongoDB
MongoDB var opstarten af 10gen, som opstod i 2007. Kommer fra familien af Document Stores, er det en af de typiske NoSQL, skemafrie databaser med forholdsvis høj ydeevne, skalerbarhed og rig. i databehandlingsfunktioner. Denne open source-database er skrevet i C++ og gør brug af dynamiske skemaer. Arkitekturen af MongoDB indeholder dokumenter grupperet i samlinger baseret på deres struktur. Denne database gør brug af BSON. BSON er den binære repræsentation af JSON og understøtter dokumentlagring og dataudveksling. I MongoDB kan forretningsemner gemmes i et minimum af dokumenter, som kan indekseres primært eller sekundært uden at opdele dem i flere relationelle.
Sammen med de ovennævnte muligheder i MongoDB giver det også en stor samling af replikasæt, hvor hvert sæt kan indeholde mere end én kopi af data. I replikasættene udføres alle primære funktioner (læse og skrive) på det primære sæt, mens sekundære sæt bruges i tilfælde af fejl på det tidligere. MongoDB inkorporerer sharding, som gør brug af skaleringsprocessen horisontalt. Belastningsbalanceringsegenskaben for denne dokumentlagerdatabase er begrundet i det faktum, at den kører på flere servere, hvilket giver duplikering af data og balancering af belastningen. Til gengæld giver den også backup under hardwarefejlen. Det gør også brug af et gitterfilsystem, som opdeler den pågældende fil i forskellige dele og gemmer dem separat.
Fællestræk ved MongoDB:
- Datamodeldesignet reducerer behovet for joinforbindelser og giver nem udvikling af skemaet.
- Høj ydeevne, da den hverken indeholder join- eller transaktioner, som giver hurtig adgang og dermed øges ydeevnen.
- Høj tilgængelighed på grund af inkorporeringen af replikasæt, der er i stand til at levere backup under fejl og også er meget robuste.
- Nem skalerbarhed.
- Sharding-egenskaben i MongoDB gør det muligt at udføre hurtig og effektiv måde i de distribuerede funktioner. Dette er også muligt, da det understøtter horisontal skalering af data.
- Sproget er meget rigt i forespørgslen. MongoDB har sit eget forespørgselssprog kaldet Mongo forespørgselssprog, som kan erstatte SQL. På samme måde kan hjælpefunktioner og kortlægning eller reduktion erstatte komplicerede aggregerede funktioner.
Oversigt over CouchDB
CouchDB, et Apache Software Foundation-produkt og inspireret af Lotus Notes, er også en open source dokumentbaseret NoSQL-database, der hovedsageligt fokuserer på nem brug. Det er en enkelt knudedatabase, der fungerer præcis som andre databaser. Det starter generelt med den enkelte node-instans, men kan problemfrit opgraderes til klyngen. Det giver brugeren mulighed for at køre en enkelt database på mange servere eller VM'er. En CouchDB-klynge giver høj kapacitet og tilgængelighed sammenlignet med CouchDB med en enkelt knude. Det bruger Erlang, et sprog til generelle formål. Ligesom MongoDB bruger den også javascript og kort/reducer. Det gemmer data i form af en samling af dokumenter i stedet for som tabeller. Den opdaterede CouchDB er låsefri, hvilket betyder, at der ikke er behov for at låse databasen under skrivning. Dokumenterne i denne database gør også brug af HTTP-protokol og JSON, sammen med muligheden for at vedhæfte ikke-JSON-filer til dem. Så CouchDB er kompatibel med enhver applikation eller software, der understøtter JSON-format.
De fællestræk ved CouchDB
- En CouchDB-server er vært for navngivne databaser, som gemmer dokumenter med et unikt navn i databasen, og CouchDB leverer en RESTful HTTP API til læsning og opdatering (tilføj, rediger, slet) databasedokumenter
- CouchDB leverer en browserbaseret GUI til at håndtere data, tilladelser og konfiguration.
- CouchDB giver den enkleste form for replikering.
- CouchDB letter godkendelse og sessionssupport:for at holde godkendelse åben via en sessionscookie som en webapplikation.
- CouchDB giver sikkerhed på databaseniveau, hvor tilladelserne pr. database er opdelt i læsere og administratorer. Læsere har lov til at læse og skrive til CouchDB-databasen.
- CouchDB validerer de indsatte data i databasen ved hjælp af godkendelse for at bekræfte, at skaberen og login-sessions-id'et er det samme.
REST API bruges til at skrive og forespørge dataene . Det giver også mulighed for at læse, tilføje, redigere og slette dokumenter. Den bruger ACID-modellen i stedet for BASE by MVCC-implementering. Ligesom MongoDB understøtter replikering af enheder, når de er offline. Den bruger en speciel replikeringsmodel kaldet Eventual Consistency. CouchDB er meget og seriøst pålidelig med hensyn til data. Single-node-databaser gør brug af en datastruktur, der kun kan tilføjes crash-resistente, og en multimode- eller klyngedatabase kan gemme dataene redundant, så de kan gøres tilgængelige, når som helst brugeren har brug for det. CouchDB kan skaleres langs så store klynger som globale klynger til så små som mobile enheder. Muligheden for at køre på enhver Android- eller iOS-enhed gør, at CouchDB skiller sig ud blandt andre databaser.
CouchDB-arkitekturen er distribueret, som understøtter tovejssynkronisering. Det kræver ikke noget skema, da det gør brug af et unikt id. Selvom CouchDB følger AP-funktionen (tilgængelighed og partitionstolerant) i CAP-modellen, for at overvinde den handlede konsistens, følger den ACID-modellen på et praktisk grundlag.
Sammenligninger mellem CouchDB og MongoDB
Sammenligningsfunktion | CouchDB | MongoDB |
Datamodel | Det følger den dokumentorienterede model, og data præsenteres i JSON-format. | Det følger den dokumentorienterede model, men data præsenteres i BSON-format. |
Grænseflade | CouchDB bruger en HTTP/REST-baseret grænseflade. Det er meget intuitivt og meget godt designet. | MongoDB bruger den binære protokol og den brugerdefinerede protokol over TCP/IP. |
Objektlager | I CouchDB indeholder databasen dokumenter. | I MongoDB indeholder databasen samlinger, og samlingen indeholder dokumenter. |
Hastighed | Den læsehastighed er afgørende for databasen, MongoDB er hurtigere end CouchDB | MongoDB giver hurtigere læsehastigheder. |
Mobilsupport | CouchDB kan køres på Apple iOS- og Android-enheder og tilbyder understøttelse af mobile enheder. | Ingen mobilsupport leveret |
Størrelse | Databasen kan vokse med CouchDB; MongoDB er bedre egnet til hurtig vækst, når strukturen ikke er klart defineret fra begyndelsen. | Hvis vi har en hurtigt voksende database, er MongoDB det bedre valg. |
Forespørgselsmetode | Forespørgsler bruger kort-reducerende funktioner. Selvom det kan være en elegant løsning, kan det være sværere for folk med traditionel SQL-erfaring at lære. | MongoDB følger Map/Reduce (JavaScript) oprettelse af samling + objektbaseret forespørgselssprog. For brugere med SQL viden er MongoDB nemmere at lære, da det er tættere på syntaks. |
Replikering | CouchDB understøtter master-master-replikering med tilpassede konfliktløsningsfunktioner. | MongoDB understøtter master-slave-replikering. |
Samtidig | Det følger MVCC (Multi-Version Concurrency Control). | Opdater på stedet. |
Indstillinger | CouchDB foretrækker tilgængelighed. | MongoDB går ind for sammenhæng. |
Ydeevnekonsistens | CouchDB er sikrere end MongoDB. | MongoDB, databasen indeholder samlinger og samling indeholder dokumenter. |
Konsistens | CouchDB er efterhånden konsistent. | MongoDB er meget konsekvent. |
Skrevet i | Det er skrevet på Erlang. | Det er skrevet i C++. |
Analyse | Hvis vi har brug for en database, der kører på, mobil, har brug for master-master replikering eller en enkelt server holdbarhed, så er CouchDB et godt valg. | Hvis vi leder efter maksimal gennemstrømning eller har en hurtigt voksende database, er MongoDB vejen at gå. |
CouchDB og MongoDB:Vastly Different Queries
CouchDB og MongDB er dokumentorienterede datalagre, som fungerer med JSON-dokumenter, men når det kommer til forespørgsler, kunne begge databaser ikke være mere forskellige. CouchDB kræver foruddefinerede visninger (som i det væsentlige er JavaScript MapReduce-funktioner), og MongoDB understøtter dynamiske forespørgsler (dybest set, hvad vi er vant til med normale RDBMS ad-hoc SQL-forespørgsler).
For eksempel, for at indsætte nogle data i CouchDB ved hjælp af Groovys RESTClient og udstede et RESTful-indlæg som nedenfor:
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"])
Eksempelkode en funktion til at forespørge på ethvert dokument, hvis officersejendom er "Micheal Jordan":
function(doc) {
if(doc.officer == "Micheal Jordan"){
emit(null, doc);
}
}
Når vi udsteder en HTTP GET-anmodning til det pågældende dataudvalgs navn, kan vi forvente mindst ét dokument som nedenfor:
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 fungerer meget som vi er vant til med normale databaser:vi kan forespørge efter, hvad vores hjerte begærer under kørsel.
Indsættelse af den samme forekomst af en parkeringsbøde ved hjælp af MongoDBs oprindelige Java-driver:
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);
For at forespørge på enhver billet fra MongoDB udstedt af officer Micheal Jordan ved blot at udstede en forespørgsel på officersejendommen:
BasicDBObject query = new BasicDBObject();
query.put("officer", "Micheal Jordan");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}
Konklusion
I denne blog har vi sammenlignet to dokumentbaserede NoSQL-databaser - MongoDB og CouchDB. Tabellen giver et overblik over de vigtigste parametriske sammenligninger mellem disse to databaser. Som vi har set, vil prioriteringen af projektet afgøre valget af systemet. Store forskelle omfatter replikeringsmetoden og platformunderstøttelse. Også fra sammenligningerne er det klart, at hvis applikationen kræver mere effektivitet og hastighed, så er MongoDB et bedre valg frem for CouchDB. Hvis brugeren skal køre sin database på mobil og også har brug for multi-master replikering, så er CouchDB et oplagt valg. MongoDB er også egnet bedre end CouchDB, hvis databasen vokser hurtigt. Den største fordel ved at bruge CouchDB er, at den understøttes på mobile enheder (Android og iOS) i stedet for MongoDB. Så grundlæggende vil forskellige applikationskrav kræve forskellige databaser baseret på scenarier.
Vi har observeret, at MongoDB er lidt bedre end CouchDB, da den bruger den SQL-lignende struktur for forespørgsler, og det samme er lettere i den tidligere. For at bruge dynamiske forespørgsler er MongoDB også et langt bedre valg. Hvad angår sikkerheden i begge databaser, er der stadig forskning i gang, og det er svært at sige, hvilken af disse giver et bedre og sikkert miljø.