sql >> Databasteknik >  >> NoSQL >> MongoDB

Slaget om NoSQL-databaserna - Jämför MongoDB och CouchDB

MongoDB och CouchDB är båda typerna av dokumentbaserade NoSQL-databaser. En dokumentdatabas kallas också mdocument store, och de används vanligtvis för att lagra dokumentformatet för den semistrukturerade datan och detaljerad beskrivning av den. Det tillåter skapande och uppdatering av program utan att behöva hänvisa till huvudschemat. Innehållshantering och hantering av data i mobilapplikationen är två av de fält där dokumentarkivet kan tillämpas.

Översikt över MongoDB

MongoDB var startupen av 10gen, som har sitt ursprung 2007. Kommer från familjen av dokumentbutiker, är det en av de typiska NoSQL, schemafria databaserna med jämförelsevis hög prestanda, skalbarhet och rik i databehandlingsfunktioner. Denna databas med öppen källkod är skriven i C++ och använder sig av dynamiska scheman. Arkitekturen för MongoDB innehåller dokument grupperade i samlingar baserat på deras struktur. Denna databas använder sig av BSON. BSON är den binära representationen av JSON och stöder dokumentlagring och datautbyte. I MongoDB kan affärsämnen lagras i ett minimalt antal dokument, som kan indexeras primärt eller sekundärt, utan att dela upp dem i flera relationella.

Tillsammans med de ovan nämnda funktionerna hos MongoDB tillhandahåller den också en stor replikuppsättningssamling där varje uppsättning kan innehålla mer än en kopia av data. I replikuppsättningarna utförs alla primära funktioner (läs och skriv) på den primära uppsättningen medan sekundära uppsättningar används vid fel på den förra. MongoDB innehåller skärning, som använder skalningsprocessen horisontellt. Lastbalanseringsegenskapen för denna dokumentlagerdatabas motiveras av det faktum att den körs på flera servrar, vilket ger dubblering av data och balansering av belastningen. I gengäld ger den även backup under hårdvarufelet. Den använder sig också av ett rutnätsfilsystem som delar upp den specifika filen i olika delar och lagrar dem separat.

De vanligaste dragen hos MongoDB:

  • Datamodelldesignen minskar behovet av sammanfogningar och ger enkel utveckling av schemat.
  • Hög prestanda, eftersom den varken innehåller anslutning eller transaktioner som ger snabb åtkomst och därmed förbättras prestanda.
  • Hög tillgänglighet tack vare inkorporeringen av replikuppsättningar som kan ge säkerhetskopiering vid fel och dessutom är mycket robusta.
  • Enkel skalbarhet.
  • Sharding-egenskapen hos MongoDB gör det möjligt för den att utföra snabbt och effektivt sätt i de distribuerade funktionerna. Detta är också möjligt eftersom det stöder horisontell skalning av data.
  • Språket är mycket rikt i frågan. MongoDB har ett eget frågespråk som heter Mongo frågespråk, som kan ersätta SQL-språk. På samma sätt kan verktygsfunktioner och mappa eller reducera ersätta komplicerade aggregerade funktioner.
Figur 1:MongoDB-arkitektur

Översikt över CouchDB

CouchDB, en Apache Software Foundation-produkt och inspirerad av Lotus Notes, är också en dokumentbaserad NoSQL-databas med öppen källkod som huvudsakligen fokuserar på enkel användning. Det är en enda noddatabas som fungerar precis som andra databaser. Den börjar i allmänhet med en enda nodinstans men kan sömlöst uppgraderas till klustret. Det tillåter användaren att köra en enda databas på många servrar eller virtuella datorer. Ett CouchDB-kluster ger hög kapacitet och tillgänglighet jämfört med CouchDB för en nod. Den använder Erlang, ett allmänt språk. Liksom MongoDB använder den också javascript och map/reduce. Den lagrar data i form av en samling dokument snarare än som tabeller. Den uppdaterade CouchDB är låsfri, vilket innebär att det inte finns något behov av att låsa databasen under skrivningar. Dokumenten i denna databas använder sig också av HTTP-protokoll och JSON, tillsammans med möjligheten att bifoga icke-JSON-filer till dem. Så CouchDB är kompatibel med alla program eller program som stöder JSON-format.

De vanligaste funktionerna i CouchDB

  • En CouchDB-server är värd för namngivna databaser, som lagrar dokument med ett unikt namn i databasen, och CouchDB tillhandahåller ett RESTful HTTP API för att läsa och uppdatera (lägga till, redigera, ta bort) databasdokument
  • CouchDB tillhandahåller ett webbläsarbaserat GUI för att hantera data, behörighet och konfiguration.
  • CouchDB tillhandahåller den enklaste formen av replikering.
  • CouchDB underlättar autentisering och sessionsstöd:för att hålla autentiseringen öppen via en sessionscookie som en webbapplikation.
  • CouchDB tillhandahåller säkerhet på databasnivå där behörigheterna per databas är uppdelade i läsare och administratörer. Läsare får läsa och skriva till CouchDB-databasen.
  • CouchDB validerar infogade data i databasen med hjälp av autentisering för att verifiera att skaparen och inloggningssessionens ID är desamma.
Figur 2:CouchDB Architecture

REST API används för att skriva och fråga data . Det erbjuder också dokumentläsning, lägg till, redigera och ta bort. Den använder ACID-modellen snarare än BASE by MVCC-implementering. Precis som MongoDB stöder replikering av enheter när de är offline. Den använder en speciell replikeringsmodell som kallas Eventuell konsistens. CouchDB är mycket och seriöst tillförlitlig när det gäller data. Databaser med en nod använder en kraschresistent datastruktur som endast kan läggas till, och en multimode- eller klusterdatabas kan spara data redundant så att den kan göras tillgänglig när användaren behöver den. CouchDB kan skalas längs lika stora kluster som globala kluster till lika små som mobila enheter. Möjligheten att köras på alla Android- eller iOS-enheter gör att CouchDB sticker ut bland andra databaser.

CouchDB-arkitekturen är distribuerad, vilket stöder dubbelriktad synkronisering. Det kräver inget schema eftersom det använder ett unikt id. Även om CouchDB följer AP-funktionen (tillgänglighet och partitionstolerant) i CAP-modellen, för att övervinna den handlade konsistensen, följer den ACID-modellen på praktisk basis.

Jämförelser mellan CouchDB och MongoDB

Jämförelsefunktion

CouchDB

MongoDB

Datamodell

Den följer den dokumentorienterade modellen och data presenteras i JSON-format.

Den följer den dokumentorienterade modellen, men data presenteras i BSON-format.

Gränssnitt

CouchDB använder ett HTTP/REST-baserat gränssnitt. Den är väldigt intuitiv och mycket väldesignad.

MongoDB använder det binära protokollet och det anpassade protokollet över TCP/IP.

Objektlagring

I CouchDB innehåller databasen dokument.

I MongoDB innehåller databasen samlingar och samlingen innehåller dokument.

Hastighet

Läshastigheten är avgörande för databasen, MongoDB är snabbare än CouchDB

MongoDB ger snabbare läshastigheter.

Mobilsupport

CouchDB kan köras på Apple iOS- och Android-enheter och erbjuder stöd för mobila enheter.

Ingen mobilsupport tillhandahålls

Storlek

Databasen kan växa med CouchDB; MongoDB lämpar sig bättre för snabb tillväxt när strukturen inte är tydligt definierad från början.

Om vi ​​har en snabbt växande databas är MongoDB det bättre valet.

Frågemetod

Frågor använder map-reduce-funktioner. Även om det kan vara en elegant lösning, kan det vara svårare för personer med traditionell SQL-erfarenhet att lära sig.

MongoDB följer Map/Reduce (JavaScript) skapar samling + objektbaserat frågespråk. För användare med SQL-kunskap är MongoDB lättare att lära sig eftersom det är närmare i syntax.

Replikering

CouchDB stöder master-master-replikering med anpassade konfliktlösningsfunktioner.

MongoDB stöder master-slave replikering.

Samtidighet

Det följer MVCC (Multi-Version Concurrency Control).

Uppdatera på plats.

Inställningar

CouchDB gynnar tillgänglighet.

MongoDB förespråkar konsekvens.

Konsistens i prestanda

CouchDB är säkrare än MongoDB.

MongoDB, databasen innehåller samlingar och samling innehåller dokument.

Konsistens

CouchDB är så småningom konsekvent.

MongoDB är starkt konsekvent.

Inskrivet i

Det är skrivet på erlang.

Det är skrivet i C++.

Analys

Om vi ​​behöver en databas som körs på, mobil, behöver master-master-replikering eller hållbarhet för en enda server, så är CouchDB ett utmärkt val.

Om vi ​​letar efter maximal genomströmning, eller har en snabbt växande databas, är MongoDB rätt väg att gå.

CouchDB och MongoDB:Vastly Different Queries

CouchDB och MongDB är dokumentorienterade datalager som fungerar med JSON-dokument, men när det kommer till frågor kan de båda databaserna inte vara mer olika. CouchDB kräver fördefinierade vyer (som i huvudsak är JavaScript MapReduce-funktioner) och MongoDB stöder dynamiska frågor (i princip vad vi är vana vid med vanliga RDBMS ad-hoc SQL-frågor).

Till exempel, för att infoga vissa data i CouchDB med Groovys RESTClient och skicka ett RESTful-inlägg enligt nedan:

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"])

Exempelkod en funktion för att fråga alla dokument vars tjänstemansegendom är "Micheal Jordan":

function(doc) {

  if(doc.officer == "Micheal Jordan"){

emit(null, doc);

  }

}

När  vi utfärdar en HTTP GET-begäran till den vyns namn, kan vi förvänta oss minst ett dokument enligt nedan:

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 fungerar ungefär som vi är vana vid med vanliga databaser:vi kan fråga efter vad vårt hjärta vill under körning.

Infoga samma instans av en parkeringsbot med MongoDB:s inbyggda Java-drivrutin:

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);

För att fråga en biljett från MongoDB utfärdad av officer Micheal Jordan genom att helt enkelt utfärda en fråga på tjänstemannens egendom:

BasicDBObject query = new BasicDBObject();

query.put("officer", "Micheal Jordan");

DBCursor cur = coll.find(query);

while (cur.hasNext()) {

   System.out.println(cur.next());

}

Slutsats

I den här bloggen har vi jämfört två dokumentbaserade NoSQL-databaser - MongoDB och CouchDB. Tabellen ger en översikt över de viktigaste parametriska jämförelserna mellan dessa två databaser. Som vi har sett kommer projektets prioritet att avgöra valet av systemet. Stora skillnader inkluderar replikeringsmetoden och plattformsstöd. Från jämförelserna är det också tydligt att om applikationen kräver mer effektivitet och snabbhet så är MongoDB ett bättre val snarare än CouchDB. Om användaren behöver köra sin databas på mobilen och även behöver multi-master replikering så är CouchDB ett självklart val. MongoDB lämpar sig också bättre än CouchDB om databasen växer snabbt. Den största fördelen med att använda CouchDB är att det stöds på mobila enheter (Android och iOS) snarare än MongoDB. Så i princip kommer olika applikationskrav att kräva olika databaser baserat på scenarier.

Vi har observerat att MongoDB är något bättre än CouchDB eftersom den använder den SQL-liknande strukturen för förfrågning, och samma sak är lättare i den förra. För att använda dynamiska frågor är MongoDB också ett mycket bättre val. När det gäller säkerheten i båda databaserna pågår forskning fortfarande, och det är svårt att säga vilken av dessa som ger en bättre och säker miljö.


  1. Problem med att köra OAuthd-instans

  2. Hur kan jag kontrollera om ett fält finns eller inte i MongoDB?

  3. Redis administrationspanel

  4. MongoDB deleteOne()