
Een van de belangrijkste beslissingen die een ontwikkelaar moet nemen, is welke database hij moet gebruiken. Jarenlang waren de opties beperkt tot verschillende varianten van relationele databases die de Structured Query Language (SQL) ondersteunden. Deze omvatten MS SQL Server, Oracle, MySQL, PostgreSQL, DB2 en vele anderen.
In de afgelopen 15 jaar zijn er veel nieuwe databases op de markt verschenen binnen de No-SQL benadering. Deze omvatten key-value stores zoals Redis en Amazon DynamoDB, brede kolomdatabases zoals Cassandra en HBase, document stores zoals MongoDB en Couchbase, evenals grafdatabases en zoekmachines zoals Elasticsearch en Solr.
In dit artikel gaan we proberen SQL en NoSQL te begrijpen, zonder in hun functionaliteit te duiken.
Bovendien gaan we tijdens het proces een beetje plezier maken.
Leg SQL uit aan je grootmoeder
Grootmoeder, stel je voor dat ik niet jouw enige kleinkind ben. In plaats daarvan hielden mama en papa zo veel van elkaar dat ze 100 kinderen kregen, en daarna adopteerden ze er nog 50.
Dus, je houdt van ons allemaal en wilt geen van onze namen, verjaardagen, favoriete ijsjes, kledingmaat, hobby's, namen van echtgenoten, namen van nakomelingen en andere super belangrijke feiten vergeten. Maar laten we eerlijk zijn. Je bent 85 jaar oud, en je goede oude geheugen kan dat gewoon niet bijhouden.
Gelukkig kan ik, als het slimste van jouw kleinkinderen, helpen. Daarom kom ik bij je thuis, haal een paar velletjes papier tevoorschijn en vraag je om koekjes te bakken voordat we beginnen.
Op een vel papier maken we een lijst met de titel "Kleinkinderen". Elk kleinkind wordt genoteerd met een aantal belangrijke informatie over hen, inclusief een uniek nummer dat nu zal aangeven welk kleinkind het is. Daarnaast schrijven we voor de organisatie de benoemde attributen bovenaan de lijst, zodat we altijd weten welke informatie deze lijst bevat.
id
naam
verjaardag
laatste bezoek
kledingmaat
favoriete ijs
geadopteerd
1
Jimmy
09-22-1992
09-01-2019
L
Munt-chocolade
false
2
Jessica
07-21-1992
02-22-2018
M
Rocky road
true
…we gaan door met de lijst!
Kleinkinderenlijst
Na een tijdje begrijp je het allemaal en zijn we bijna klaar met de lijst! Maar je draait je naar mij en zegt: "We vergeten een plek voor echtgenoten, hobby's, kleinkinderen toe te voegen!" Maar nee, we hebben het niet vergeten! Dit komt daarna en vereist een nieuw vel papier.
Dus haal ik nog een vel papier tevoorschijn, en daarop noemen we de lijst Echtgenoten. We voegen opnieuw de belangrijke attributen toe aan het begin van de lijst en beginnen ze in de regels toe te voegen.
id
grandchild_id
naam
verjaardag
1
2
John
06-01-1988
2
9
Fernanda
03-05-1985
…meer echtgenoten!
Lijst van echtgenoten
In deze fase leg ik aan oma uit dat als ze wil weten wie met wie getrouwd is, ze alleen maar hoeft te vergelijken id in de lijst kleinkinderen met grandchild_id in de lijst van echtgenoten.
Na een paar dozijn koekjes moet ik even rusten. "Kun je doorgaan, oma?" Ik ga even lekker slapen.
Ik kom een paar uur later terug. Wat ben je goed, oma! Alles ziet er fantastisch uit, behalve de lijst hobby's. In de lijst staan ongeveer 1000 hobby's. De meeste zijn herhalingen; wat is er gebeurd?
grandchild_id
hobby
1
fietsen
4
fietsen
3
fietsen
7
running
11
fietsen
…laten we doorgaan!
Sorry, ik ben het helemaal vergeten te zeggen! Met één lijst kun je alleen bijhouden hobby's. Dan moeten we in een andere lijst bijhouden kleinkinderen, die hiermee bezig zijn hobby's. We gaan dit noemen "Algemene lijst". Zie je dat je dit niet leuk vindt, begin ik me zorgen te maken en ga ik terug naar de lijstmodus.
id
hobby
1
fietsen
2
running
3
zwemmen
…nog meer hobby's!
Lijst van hobby's
Zodra we onze lijst met hobby's hebben, maken we onze tweede lijst en noemen we deze "Hobby's van kleinkinderen».
grandchild_id
hobby_id
4
1
3
1
7
2
…meer!
Algemene lijst kleinkind hobby's
Na al dit werk heeft oma nu een geweldige geheugensysteem om haar ongelooflijk grote familie bij te houden. En dan, om me langer te blijven houden, stelt ze de magische vraag: "Waar heb je dit allemaal geleerd?"
Relationele databases
Een relationele database is een set formeel beschreven tabellen (in ons voorbeeld zijn dit lijsten), waarvan toegang kan worden verkregen gegevens of ze op verschillende manieren kunnen worden samengevoegd zonder de tabellen opnieuw te structureren databases. Er zijn veel verschillende soorten relationele databases, maar helaas is een lijst op papier er niet een van.
Een kenmerk van de meest populaire relationele databases is de SQL-querytaal (Structured Query Language). Hierdoor kan oma, als ze haar geheugensysteem naar de computer verplaatst, snel antwoorden krijgen op vragen zoals: "Wie heeft me vorig jaar niet bezocht, is getrouwd en heeft geen hobby's?"
Een van de meest populaire SQL-databasesystemen is MySQL, dat open source is. Het is in de eerste plaats ontwikkeld als een relationeel databasesysteem (RDBMS) voor webtechnologie-applicaties.
Enkele belangrijke kenmerken van MySQL:
- Het is vrij bekend, wordt veel gebruikt en grondig getest.
- Er zijn veel gekwalificeerde ontwikkelaars met ervaring in SQL en relationele databases.
- Gegevens worden in verschillende tabellen opgeslagen, wat het gemakkelijk maakt om relaties te leggen met behulp van primaire en vreemde sleutels (identificatoren).
- Het is eenvoudig te gebruiken en efficiënt, waardoor het ideaal is voor zowel grote als kleine bedrijven.
- De broncode is beschikbaar onder de GNU General Public License.
Vergeet het nu ALLE.
Leg het aan oma uit NoSQL
Oma, we hebben een groot gezin. We zijn met 150 kleinkinderen! Velen van hen zijn getrouwd, hebben kinderen, hebben hobby's, enzovoort. Op jouw leeftijd is het onmogelijk om alles van ons te onthouden. Wat je nodig hebt, is een systeem om te onthouden!
Gelukkig kan ik, niet die wil dat je mijn verjaardag en mijn favoriete ijsje vergeet, helpen. Dus ik ren naar de dichtstbijzijnde winkel, haal een notitieboek en kom weer bij jou thuis.
De eerste stap die ik doe, is "Kleinkinderen" met grote, vette letters op de kaft van het notitieboek schrijven. Dan blader ik naar de eerste pagina en begin alles op te schrijven wat je over mij moet onthouden. Na een paar minuten ziet de pagina er ongeveer zo uit.
{
"_id":"dkdigiye82gd87gd99dg87gd",
"name":"Cody",
"birthday":"09-12-2006",
"last_visit":"09-02-2019",
"clothing_size":"XL",
"favorite_ice_cream":"Fudge caramel",
"adopted":false,
"hobbies":[
"video games",
"computers",
"cooking"
],
"spouse":null,
"kids":[
],
"favorite_picture":"file://scrapbook-103/christmas-2010.jpg",
"misc_notes":"Verkiest 'ijstaart' op zijn verjaardag in plaats van chocoladecake!"
} Ik: “Het lijkt allemaal klaar te zijn!”
Oma: “Wacht eens, hoe zit het met de andere kleinkinderen?”
Ik: “Ja, precies. Laten we voor ieder een pagina toewijzen.”
Oma: “Moet ik dan dezelfde informatie voor iedereen opschrijven, zoals ik voor jou heb gedaan?”
Ik: “Nee, alleen als je dat wilt. Laat me het je laten zien.”
Nadat ik de pen van oma heb gepakt, blader ik de pagina om en schrijf snel informatie op over mijn minst favoriete neef.
{
"_id":"dh97dhs9b39397ss001",
"name":"Tanner",
"birthday":"09-12-2008",
"clothing_size":"S",
"friend_count":0,
"favorite_picture":null,
"remember":"Geboren op dezelfde dag als Cody, maar niet zo belangrijk"
}Elke keer als oma iets moet herinneren van een van de kleinkinderen, hoeft ze alleen maar naar de juiste pagina in het notitieboek van de kleinkinderen te gaan. Alle informatie over hen wordt daar bewaard, op hun pagina, die ze snel kan wijzigen en bijwerken.
Wanneer alles gedaan is, stelt ze de magische vraag: "Waar heb je geleerd om dit allemaal te doen?"
NoSQL-databases
Er zijn veel NoSQL-databases ("niet alleen SQL"). In onze voorbeelden hebben we documentdatabase. NoSQL-databases modelleren gegevens op manieren die de tabelrelaties uitsluiten die in relationele databases worden gebruikt. Deze databases werden populair in het begin van de jaren 2000 bij bedrijven die cloud-clustering van databases nodig hadden vanwege hun duidelijke schaalvereisten (bijvoorbeeld Facebook). In dergelijke toepassingen was de consistentie van gegevens veel minder belangrijk dan prestaties en schaalbaarheid.
In het begin werden NoSQL-databases vaak gebruikt voor niche data management taken. Vooral wanneer het ging om web- en cloudtoepassingen, verwerkten en verdeelden NoSQL-databases aanzienlijke hoeveelheden gegevens. Ingenieurs die met NoSQL werkten, hielden ook van de flexibele datastructuur (of het volledige gebrek daaraan), zodat snelle wijzigingen in bijgewerkte toepassingen mogelijk waren.
Kernkenmerken van NoSQL:
- Een zeer flexibele manier om gegevens op te slaan
- Horizontale schaling naar clusters
- Verwachte consistentie qua duurzaamheid / verspreiding
- Documenten die worden geïdentificeerde met unieke sleutels
Gedetailleerde vergelijking
MySQL vereist een bepaalde en gestructureerde schema.
NoSQL maakt het mogelijk om elke soort gegevens in een "document" op te slaan.
MySQL heeft een enorme gemeenschap.
NoSQL heeft een kleine en snelgroeiende gemeenschap.
NoSQL staat bekend om zijn eenvoud in schaling.
MySQL heeft meer beheersbaarheid nodig.
MySQL gebruikt SQL, dat in veel soorten databases wordt toegepast.
NoSQL is een op ontwerp gebaseerde database met populaire implementaties.
MySQL gebruikt de standaard querytaal (SQL).
NoSQL gebruikt geen standaard querytaal.
MySQL heeft veel geweldige rapportagetools.
NoSQL heeft verschillende rapportagetools die moeilijk te standardiseren zijn.
MySQL kan prestatieproblemen veroorzaken bij grote gegevens.
NoSQL biedt uitstekende prestaties bij grote gegevens.
Denk aan 8base
In het bedrijf , waarin ik werk, bieden wij voor elk project een werkruimte met de relationele database Aurora MySQL, gehost op AWS. Hoewel NoSQL een logische keuze is wanneer de vereisten van uw toepassing hoge prestaties en schaalbaarheid vereisen, zijn wij van mening dat strikte gegevensconsistentie, geleverd door een DBMS, noodzakelijk is bij het ontwikkelen van SaaS-toepassingen en andere zakelijke software.
Voor startups en ontwikkelaars die zakelijke toepassingen creëren die verslaglegging, transactie-integriteit en duidelijk gedefinieerde datamodellen vereisen, is investeren in relationele databases volgens ons de juiste keuze.
Leer meer over ontwikkelen met Aurora, Serverless en GraphQL via 8base.com .
Bron: habr.com
