1.1 Hvordan en NoSQL-database fungerer

NoSQL-databaser bruker en rekke datamodeller for å få tilgang til og manipulere data. Disse typer databaser er optimalisert for dataintensive applikasjoner som krever lav ventetid og fleksible datamodeller. Alt dette oppnås ved å myke opp de strenge datakonsistenskravene som er typiske for andre typer databaser.

Tenk på et eksempel på skjemamodellering for en enkel database med bøker.

  • I en relasjonsdatabase er en bokoppføring ofte delt opp i flere deler (eller "normalisert") og lagret i separate tabeller hvis relasjoner er definert av primære og fremmede nøkkelbegrensninger. I dette eksemplet har Bøker- tabellen ISBN- , Boktittel- og "ISBN"og"Author"Forfatter-ISBN-, ogkolonneneForfatternavn-ogForfatter-IDtabellenForfatter--Utgavenummer. Relasjonsmodellen er designet for å opprettholde referanseintegritet mellom tabeller i en database. Dataene er normalisert for å redusere redundans og er generelt optimalisert for lagring.

  • I en NoSQL-database lagres en bokpost vanligvis som et JSON-dokument. For hver bok eller element lagres ISBN- , boktittel- , utgavenummer- , forfatternavn- og forfatter-ID- verdier som attributter i et enkelt dokument. I denne modellen er dataene optimalisert for intuitiv utvikling og horisontal skalerbarhet.

1.2 Hva kan NoSQL-databaser brukes til?

NoSQL-databaser er godt egnet for mange moderne applikasjoner, som mobil, spill, webapplikasjoner, som krever fleksible, skalerbare databaser med høy ytelse og rik funksjonalitet som kan gi maksimal brukervennlighet.

  • Fleksibilitet . Vanligvis tilbyr NoSQL-databaser fleksible skjemaer, noe som muliggjør raskere utvikling og muliggjør inkrementell implementering. På grunn av bruken av fleksible datamodeller er NoSQL-databaser godt egnet for semistrukturerte og ustrukturerte data.

  • Skalerbarhet . NoSQL-databaser er designet for å skalere ved hjelp av distribuerte maskinvareklynger, ikke ved å legge til dyre, pålitelige servere. Noen skytjenesteleverandører kjører disse operasjonene i bakgrunnen, og gir en fullstendig administrert tjeneste.

  • Høy ytelse . NoSQL-databaser er optimalisert for spesifikke datamodeller og tilgangsmønstre for å oppnå høyere ytelse enn relasjonsdatabaser.

  • Bred funksjonalitet . NoSQL-databaser gir rike APIer og datatyper som er spesielt designet for deres respektive datamodeller.

1.3 Typer NoSQL-databaser

NoSQL-databaser brukes der det ikke er særlig praktisk å lagre data i form av tabeller. Derfor lagres de i svært forskjellige formater. Vanligvis er det 6 hoveddatatyper av NoSQL-databaser.

DB basert på nøkkel-verdi-par

Databaser som bruker nøkkel-verdi-par støtter høy separerbarhet og gir enestående horisontal skalering som ikke er oppnåelig med andre typer databaser. Gode ​​brukstilfeller for nøkkelverdidatabaser er spill-, reklame- og IoT-applikasjoner.

Amazon DynamoDB sikrer for eksempel stabil databasedrift med en forsinkelse på ikke mer enn noen få millisekunder uansett skala. Denne robuste ytelsen var hovedårsaken til å migrere Snapchat Stories til DynamoDB, siden denne Snapchat-funksjonen er assosiert med den største lagringsbelastningen.

Dokument

I applikasjonskode er data ofte representert som et objekt eller dokument i et JSON-lignende format fordi det er en effektiv og intuitiv datamodell for utviklere. Dokumentdatabaser lar utviklere lagre og spørre etter data i en database ved å bruke samme dokumentmodell som de bruker i applikasjonskoden. Den fleksible, semistrukturerte, hierarkiske karakteren til dokumenter og dokumentdatabaser gjør at de kan utvikle seg med applikasjonsbehov.

Dokumentmodellen fungerer godt i kataloger, brukerprofiler og innholdsstyringssystemer der hvert dokument er unikt og endres over tid. Amazon DocumentDB (kompatibel med MongoDB) og MongoDB er vanlige dokumentdatabaser som gir funksjonelle og intuitive APIer for smidig utvikling.

Grafdatabaser

Grafdatabaser gjør det enklere å utvikle og kjøre applikasjoner som fungerer med sett med komplekse data. Typiske eksempler på bruk av grafdatabaser er sosiale nettverk, anbefalingstjenester, svindeldeteksjonssystemer og kunnskapsgrafer. Amazon Neptune er en fullt administrert grafdatabasetjeneste. Neptune støtter Property Graph and Resource Description Framework (RDF), og gir to graf-APIer å velge mellom: TinkerPop og RDF/SPARQL. Vanlige grafdatabaser inkluderer Neo4j og Giraph.

DB i minnet

Ofte bruker spill- og reklameapplikasjoner poengtavler, øktlagring og sanntidsanalyse. Slike evner krever respons innen noen få mikrosekunder, mens en kraftig økning i trafikken er mulig når som helst.

Amazon MemoryDB for Redis er en Redis-kompatibel, pålitelig databasetjeneste i minnet som reduserer leseforsinkelse til millisekunder og gir holdbarhet på tvers av flere tilgjengelighetssoner. MemoryDB er spesialbygd for ultrahøy ytelse og pålitelighet, så den kan brukes som den primære databasen for moderne mikrotjenestebaserte applikasjoner.

Amazon ElastiCache er en fullt administrert Redis- og Memcached-kompatibel caching-tjeneste i minnet for å betjene arbeidsbelastninger med lav ventetid og høy gjennomstrømning. Klienter som Tinder som trenger appene deres for å svare i sanntid, bruker minnet i stedet for disklagringssystemer. Et annet eksempel på et spesialbygd datavarehus er Amazon DynamoDB Accelerator (DAX). DAX lar DynamoDB lese data flere ganger raskere.

Søk i databaser

Mange applikasjoner genererer logger for å gjøre det enklere for utviklere å feilsøke og fikse problemer. Amazon OpenSearch er en spesialbygd tjeneste for nesten sanntidsvisualisering og analyse av automatisk genererte datastrømmer ved å indeksere, aggregere og søke i semistrukturerte logger og beregninger.

I tillegg er Amazon OpenSearch en kraftig fulltekstsøketjeneste med høy ytelse. Expedia utnytter over 150 Amazon OpenSearch-tjenestedomener, 30 TB med data og 30 milliarder dokumenter for en rekke oppdragskritiske brukssaker, fra operasjonell overvåking og feilsøking til distribuert programstabelsporing og kostnadsoptimalisering.

1.4 Sammenligning av SQL (relasjonelle) og NoSQL (ikke-relasjonelle) databaser

NoSQL har mange fordeler, så du bør i det minste i teorien vite at verktøyet du trenger allerede finnes før du skriver det selv. Nedenfor vil jeg gi en sammenligning av NoSQL- og SQL-databaser:

Passende arbeidsmengder

Relasjonsdatabaser er designet for transaksjonelle og svært konsistente applikasjoner for sanntidstransaksjonsbehandling (OLTP) og er godt egnet for analytisk sanntidsbehandling (OLAP).

NoSQL-databaser er designet for å fungere med en rekke datatilgangsmønstre, inkludert applikasjoner med lav ventetid. NoSQL-søkedatabaser er designet for analyse av semistrukturerte data.

Datamodell

Den relasjonsmodellen normaliserer data og transformerer dem til tabeller med rader og kolonner. Et skjema definerer strengt tabeller, rader, kolonner, indekser, relasjoner mellom tabeller og andre databaseelementer. En slik database sikrer integriteten til referansedata i relasjoner mellom tabeller.

NoSQL-databaser gir en rekke datamodeller som nøkkelverdi-par, dokumenter og grafer som er optimalisert for høy ytelse og skalerbarhet.

ACID egenskaper

Relasjonsdatabaser gir et sett med ACID-egenskaper: atomitet, konsistens, isolasjon, pålitelighet.

  • Atomicity krever at en transaksjon utføres i sin helhet eller ikke i det hele tatt.
  • Konsistens betyr at så snart en transaksjon er fullført, må dataene samsvare med databaseskjemaet.
  • Isolasjon krever at parallelle transaksjoner kjøres adskilt fra hverandre.
  • Pålitelighet refererer til evnen til å gjenopprette til den sist lagrede tilstanden etter en uventet systemfeil eller strømbrudd.

NoSQL-databaser tilbyr ofte et kompromiss, og reduserer de rigide kravene til ACID-egenskaper til fordel for en mer fleksibel datamodell som tillater horisontal skalering. Dette gjør NoSQL til et godt valg for brukstilfeller med høy båndbredde og lav latens som krever horisontal skalering utover en enkelt forekomst.

Opptreden

Ytelsen avhenger hovedsakelig av diskundersystemet. Optimalisering av spørringer, indekser og tabellstruktur er ofte nødvendig for maksimal ytelse.

Ytelsen avhenger vanligvis av størrelsen på den underliggende maskinvareklyngen, nettverksforsinkelse og anropsapplikasjonen.

Skalering

Relasjonsdatabaser skaleres vanligvis ved å øke datakraften til maskinvaren eller ved å legge til separate kopier for lesearbeidsbelastninger.

NoSQL-databaser støtter vanligvis høy separerbarhet gjennom skalerbare tilgangsmønstre basert på en distribuert arkitektur. Dette forbedrer gjennomstrømningen og gir konsistent ytelse i nesten ubegrenset skala.

API

Forespørsler om å skrive og hente data skrives i SQL. Disse spørringene analyseres og utføres av en relasjonsdatabase.

Objektorienterte APIer lar applikasjonsutviklere enkelt skrive og hente datastrukturer. Ved å bruke partisjonsnøkler kan applikasjoner søke i nøkkelverdi-par, kolonnesett eller semistrukturerte dokumenter som inneholder serielle objekter og applikasjonsattributter.