sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB vs MySQL NoSQL - Varför Mongo är bättre

Det finns så många databashanteringssystem (DBMS) att välja mellan, allt från relationella till icke-relationella DBMS. Under de senaste åren har Relational DBMS varit mer dominerande men med de senaste datastrukturtrenderna har den icke-relationella DBMS blivit mer populär. Valen för relationell DBMS är ganska uppenbara:MySQL, PostgreSQL och MS SQL. Å andra sidan har MongoDB en icke-relationell DBM kommit att stiga i grunden på grund av dess förmåga att hantera en stor uppsättning data. Varje val har sina för- och nackdelar men ditt val kommer främst att avgöras av dina applikationsbehov eftersom båda tjänar i olika nischer. Men i den här artikeln kommer vi att diskutera fördelarna med att använda MongoDB över MySQL.

Fördelar med att använda MongoDB över MySQL

  1. Hastighet och prestanda
  2. Hög tillgänglighet och Cloud Computing
  3. Schemaflexibilitet
  4. Behöver växa sig större
  5. Inbäddningsfunktion
  6. Säkerhetsmodell
  7. Platsbaserad data
  8. Stöd för rikt frågespråk

Hastighet och prestanda

Detta är en av de stora fördelarna med att använda MongoDB över MySQL, särskilt när en stor uppsättning ostrukturerad data är inblandad. MongoDB uppmuntrar som standard hög insättningshastighet framför transaktionssäkerhet. Denna funktion är inte tillgänglig i MySQL, så om du till exempel ska spara mycket data till din DBM på en gång, när det gäller MySQL måste du göra det en efter en. Men i fallet med MongoDB, med tillgången till funktionen insertMany() kan du säkert göra flera infogar. Genom att observera några av frågebeteendena hos de två, kan vi sammanfatta de olika operationsförfrågningarna för 1 miljon dokument i illustrationen nedan.

När det gäller uppdatering, vilket är en skrivoperation, tar MongoDB 0,002 sekunder att uppdatera alla studenters e-postmeddelanden medan MySQL tar 0,2491 s för att utföra samma uppgift.

Från illustrationen kan vi dra slutsatsen att MongoDB tar mycket mindre tid än MySQL för samma operationer. MongoDB är huvudsakligen uppbyggd så att dokument är grunden för lagring vilket främjar enorma fråge- och datalagring. Detta innebär att prestandan är beroende av två nyckelvärden som är design och utskalning. Å andra sidan har MySQL data lagrade i en enskild tabell, så någon gång måste man slå upp hela tabellen innan man gör en skrivoperation.

Hög tillgänglighet och molnberäkning

För instabila miljöer ger MongoDB en bättre hanteringsteknik än MySQL. Detta beror på att det tar mycket kortare tid för de aktiva sekundära noderna att välja en ny primär nod, vilket är lätt att administrera vid punkten för fel. Dessutom, på grund av omfattande sekundära index och inbyggd replikering, är det ganska enkelt att skapa en säkerhetskopia för en MongoDB-databas jämfört med MySQL eftersom den senare har integrerat replikeringsstöd.

I ett nötskal, att ställa in en uppsättning servrar som kan fungera som Master-Slaves är enkelt och snabbt i MongoDB än MySQL. Återställning från ett klusterfel är dessutom omedelbar, automatisk och säker. För MySQL finns det ingen tydlig officiell lösning för att tillhandahålla failover mellan master och slav i händelse av ett fel.

Molnbaserade lagringslösningar kräver att data sprids smidigt över olika servrar för att skala upp. MongoDB kan ladda en stor mängd data jämfört med MySQL och med inbyggd sharding är det lätt att partitionera och sprida ut data över flera servrar som ett sätt att använda den kostnadsbesparande lösningen enligt de molnbaserade lagringsfördelarna.

Schemaflexibilitet

MongoDB är schemalöst så att olika dokument i samma samling kan ha samma eller olika fält från varandra. Detta innebär att det inte finns några begränsningar för dokumentstrukturen för varje infogning eller uppdatering, varför ändringar i datamodellen inte kommer att ha stor inverkan. Naturligtvis finns det scenarier som kan välja ett för att använda odefinierat schema, till exempel om du avnormaliserar ett databasschema eller när din databas växer men ditt schema är instabilt. MongoDB tillåter därför en att lägga till olika typer av data efter behov.

Å andra sidan är MySQL tabellorienterad där varje rad måste ha samma kolumner som de andra raderna. Att lägga till en ny kolumn skulle kräva att man kör en ALTER-operation som är ganska dyr när det gäller prestanda eftersom den måste låsa upp hela databasen. Detta är särskilt fallet när bordet växer över 10 GB, MongoDB har inte det här problemet.

Med ett flexibelt schema är det enkelt att utveckla och underhålla en renare kod. Dessutom ger MongoDB möjligheten att använda en JSON-validator om du vill säkerställa viss dataintegritet och konsistens för din insamling, så du kan göra en viss validering innan du infogar eller uppdaterar ett dokument.

Behovet av att växa sig större

Databasskalning är inte ett lätt företag, särskilt med MySQL, det kan resultera i försämrad prestanda när 5-10 GB minne per tabell överträffas. Med MongoDB är detta inte ett problem eftersom man kan partitionera och dela databasen med den inbyggda skärningsfunktionen. När en shardnyckel har specificerats och sharding är aktiverad, partitioneras data jämnt enligt shardnyckeln. Om en ny skärva läggs till sker automatisk ombalansering. Sharding tillåter i princip horisontell skalning vilket är svårt att implementera i MySQL. Dessutom har MongoDB inbyggd replikering där replikuppsättningar skapar flera kopior av data. Varje medlem i denna uppsättning har en roll antingen som primär eller sekundär när som helst i processen.

Läser och skriver görs på primären och replikeras sedan till sekundärerna. Med denna merit på plats, i händelse av datainkonsekvens eller instansfel, kan en ny medlem röstas in för att fungera som primär.

Inbäddningsfunktion

Till skillnad från MySQL där du inte kan bädda in data i ett fält, erbjuder MongoDB en bättre inbäddningsteknik för relaterade data. Så mycket som du kan göra en JOIN för tabeller i MySQL, kan du sluta med att ha så många tabeller och några är onödiga, särskilt om de inte involverar så många fält. När det gäller MongoDB kan du bestämma dig för att bädda in data i ett fält för relaterad data eller referens från en annan samling om du förväntar dig att dokumentet i framtiden växer utöver JSON-dokumentets storlek.

Till exempel om vi har data för användare som vi vill fånga deras adresser och annan information, när det gäller MongoDB kan vi enkelt ha en enkel struktur som

{
    id:1,
    name:'George Bush',
    gender: 'Male',
    age:45,
    address:{
        City: 'New York',
        Street: 'Florida',
        Zip_code: 1342243
    }
}

Men i fallet MySQL måste vi göra 2 tabeller med en id-referens i det här fallet. Dvs

Tabell med användarinformation

id namn kön ålder
1 George Bush Man 45

Användaradresstabell

id Stad Gata Postnummer
1 George Bush Man 134224

I MySQL kommer du att ha så många tabeller som kan vara så hektiska att hantera, speciellt när skalning är inblandad. Så mycket som man också kan göra en tabellsammanfogning i en enda fråga när man hämtar dessa data i MySQL, är latensen ganska större jämfört med MongoDB och detta är en av anledningarna som gör att prestanda hos MongoDB överträffar prestandan för MySQL.

Severalnines Become a MongoDB DBA - Bringing MongoDB to ProductionLäs om vad du behöver veta för att distribuera, övervaka, hantera och skala MongoDBDownload gratis

Säkerhetsmodell

Databasadministration (DBA) är ganska viktigt i MySQL men inte nödvändigt när det gäller MongoDB. Detta innebär att du måste ha DBA för att ändra ett schema när det gäller MySQL när en applikation ändras. Å andra sidan kan man göra schemamodifiering utan DBA i MongoDB eftersom det är bra för klassbeständighet och en klass kan likaså serialiseras till JSON och lagras. Detta är dock den bästa praxisen om du inte förväntar dig att data ska växa sig stora, annars måste du följa några bästa praxis för att undvika fallgropar.

Platsbaserad data

För att förbättra genomströmningsoperationerna, särskilt läsoperationerna, tillhandahåller MongoDB inbyggda specialfunktioner som förbättrar att hitta relevant data från specifika platser som är korrekta, vilket gör processen snabbare. Detta är inte möjligt i fallet med MySQL.

Rich Query Language Support

På ett personligt intresse som MongoDB-entusiast, fick jag min attraktion med flexibilitet i fråga om funktionen hos MongoDB. När det gäller aggregeringsramverket i de senare versionerna och MapReduce-funktionen kan man optimera resultatdata för att passa egna specifikationer. Så mycket som MySQL också erbjuder operationer som gruppering, sortering och många fler, är MongoDB ganska omfattande speciellt med inbäddade datastrukturer. Som tidigare nämnts, returneras frågor med mindre latens i aggregeringsramverket än när en JOIN skulle göras i fallet med MySQL. Till exempel erbjuder MongoDB ett enkelt sätt att modifiera ett schema med hjälp av operationerna $set och $unset för det inbäddade schemat. Men i fallet med MySQL måste man göra ALTER-kommandot för den enda tabell som fältet finns inom och detta är ganska dyrt när det gäller prestanda.

Slutsats

När det gäller fördelarna som diskuterats ovan, så mycket som databasvalet beror absolut på applikationsdesign, MongoDB erbjuder mycket flexibilitet på olika sätt. Om du letar efter något som kommer att tillgodose bättre prestanda, som hanterar komplexa data och därför inga begränsningar för schemadesign, framtida förväntningar på databastillväxt och rik frågespråksteknik, skulle jag rekommendera dig att välja MongoDB.


  1. MongoDB $eller Aggregation Pipeline Operator

  2. MongoDb:hitta djupt kapslade objekt med $lookup

  3. Användarmatchningsalgoritm

  4. Azure Redis Cache - Flera fel TimeoutException:Timeout utför GET {nyckel}