1.1 Hur en NoSQL-databas fungerar

NoSQL-databaser använder en mängd olika datamodeller för att komma åt och manipulera data. Dessa typer av databaser är optimerade för dataintensiva applikationer som kräver låg latens och flexibla datamodeller. Allt detta uppnås genom att mildra de strikta datakonsistenskraven som är typiska för andra typer av databaser.

Betrakta ett exempel på schemamodellering för en enkel databas med böcker.

  • I en relationsdatabas är en bokpost ofta uppdelad i flera delar (eller "normaliserad") och lagras i separata tabeller vars relationer definieras av primära och främmande nyckelbegränsningar. I det här exemplet har tabellen Böcker kolumnerna ISBN , Boktitel och "ISBN"ochAuthor""Författare-ISBNochFörfattarnamnochFörfattar-IDkolumnernaFörfattaretabellenEditionsnummer. Relationsmodellen är utformad för att upprätthålla referensintegritet mellan tabeller i en databas. Datan är normaliserad för att minska redundans och är generellt optimerad för lagring.

  • I en NoSQL-databas lagras en bokpost vanligtvis som ett JSON-dokument. För varje bok eller element lagras värdena för ISBN , Boktitel , Editionsnummer , Författarnamn och Författar-ID som attribut i ett enda dokument. I denna modell är data optimerad för intuitiv utveckling och horisontell skalbarhet.

1.2 Vad kan NoSQL-databaser användas till?

NoSQL-databaser är väl lämpade för många moderna applikationer, såsom mobil, spel, webbapplikationer, som kräver flexibla, skalbara databaser med hög prestanda och rik funktionalitet som kan ge maximal användbarhet.

  • Flexibilitet . Vanligtvis erbjuder NoSQL-databaser flexibla scheman, vilket möjliggör snabbare utveckling och möjliggör inkrementell implementering. På grund av användningen av flexibla datamodeller är NoSQL-databaser väl lämpade för semistrukturerad och ostrukturerad data.

  • Skalbarhet . NoSQL-databaser är utformade för att skala med hjälp av distribuerade hårdvarukluster, inte genom att lägga till dyra, pålitliga servrar. Vissa molntjänsteleverantörer kör dessa operationer i bakgrunden och tillhandahåller en helt hanterad tjänst.

  • Hög prestanda . NoSQL-databaser är optimerade för specifika datamodeller och åtkomstmönster för att uppnå högre prestanda än relationsdatabaser.

  • Bred funktionalitet . NoSQL-databaser tillhandahåller rika API:er och datatyper som är specifikt utformade för deras respektive datamodeller.

1.3 Typer av NoSQL-databaser

NoSQL-databaser används där det inte är särskilt bekvämt att lagra data i form av tabeller. Därför lagras de i väldigt olika format. Vanligtvis finns det 6 huvuddatatyper av NoSQL-databaser.

DB baserad på nyckel-värde-par

Databaser som använder nyckel-värdepar stöder hög separerbarhet och ger oöverträffad horisontell skalning som inte kan uppnås med andra typer av databaser. Bra användningsfall för nyckelvärdedatabaser är spel-, reklam- och IoT-applikationer.

Till exempel säkerställer Amazon DynamoDB stabil databasdrift med en fördröjning på inte mer än några millisekunder i vilken skala som helst. Denna robusta prestanda var huvudskälet till att migrera Snapchat Stories till DynamoDB, eftersom denna Snapchat-funktion är associerad med den största lagringsbelastningen.

Dokumentera

I applikationskod representeras data ofta som ett objekt eller dokument i ett JSON-liknande format eftersom det är en effektiv och intuitiv datamodell för utvecklare. Dokumentdatabaser tillåter utvecklare att lagra och fråga data i en databas med samma dokumentmodell som de använder i sin applikationskod. Den flexibla, semistrukturerade, hierarkiska karaktären hos dokument och dokumentdatabaser gör att de kan utvecklas med tillämpningsbehov.

Dokumentmodellen fungerar bra i kataloger, användarprofiler och innehållshanteringssystem där varje dokument är unikt och förändras över tid. Amazon DocumentDB (kompatibel med MongoDB) och MongoDB är vanliga dokumentdatabaser som tillhandahåller funktionella och intuitiva API:er för agil utveckling.

Grafiska databaser

Grafdatabaser gör det enklare att utveckla och köra applikationer som fungerar med uppsättningar av komplexa data. Typiska exempel på användning av grafdatabaser är sociala nätverk, rekommendationstjänster, system för upptäckt av bedrägerier och kunskapsdiagram. Amazon Neptune är en helt hanterad grafdatabastjänst. Neptune stöder Property Graph and Resource Description Framework (RDF), vilket ger två graf-API:er att välja mellan: TinkerPop och RDF/SPARQL. Vanliga grafdatabaser inkluderar Neo4j och Giraph.

DB i minnet

Ofta använder spel- och reklamapplikationer topplistor, sessionslagring och realtidsanalys. Sådana funktioner kräver ett svar inom några mikrosekunder, medan en kraftig ökning av trafiken är möjlig när som helst.

Amazon MemoryDB för Redis är en Redis-kompatibel, pålitlig databastjänst i minnet som minskar läsfördröjningen till millisekunder och ger hållbarhet över flera tillgänglighetszoner. MemoryDB är specialbyggt för ultrahög prestanda och tillförlitlighet, så den kan användas som den primära databasen för moderna mikrotjänstbaserade applikationer.

Amazon ElastiCache är en fullt hanterad Redis och Memcached-kompatibel cachingtjänst i minnet för att betjäna arbetsbelastningar med låg latens och hög genomströmning. Klienter som Tinder som behöver sina appar för att svara i realtid använder in-memory snarare än disklagringssystem. Ett annat exempel på ett specialbyggt datalager är Amazon DynamoDB Accelerator (DAX). DAX gör att DynamoDB kan läsa data flera gånger snabbare.

Sök i databaser

Många applikationer genererar loggar för att göra det lättare för utvecklare att felsöka och åtgärda problem. Amazon OpenSearch är en specialbyggd tjänst för nästan realtidsvisualisering och analys av automatiskt genererade dataströmmar genom att indexera, aggregera och söka i semistrukturerade loggar och mätvärden.

Dessutom är Amazon OpenSearch en kraftfull, högpresterande fulltextsöktjänst. Expedia utnyttjar över 150 Amazon OpenSearch-tjänstdomäner, 30 TB data och 30 miljarder dokument för en mängd uppdragskritiska användningsfall, från driftövervakning och felsökning till distribuerad applikationsstackspårning och kostnadsoptimering.

1.4 Jämförelse av SQL (relationell) och NoSQL (icke-relationell) databaser

NoSQL har många fördelar, så du bör åtminstone i teorin veta att verktyget du behöver redan finns innan du skriver det själv. Nedan kommer jag att ge en jämförelse av NoSQL- och SQL-databaser:

Lämpliga arbetsbelastningar

Relationsdatabaser är designade för transaktionsbaserade och mycket konsekventa OLTP-applikationer (realtidstransaktionsbehandling) och är väl lämpade för analytisk bearbetning i realtid (OLAP).

NoSQL-databaser är designade för att fungera med en rad dataåtkomstmönster, inklusive applikationer med låg latens. NoSQL sökdatabaser är designade för analys av semistrukturerad data.

Datamodell

Relationsmodellen normaliserar data och omvandlar den till tabeller med rader och kolumner. Ett schema definierar strikt tabeller, rader, kolumner, index, relationer mellan tabeller och andra databaselement. En sådan databas säkerställer integriteten hos referensdata i relationer mellan tabeller.

NoSQL-databaser tillhandahåller en mängd olika datamodeller som nyckel-värdepar, dokument och grafer som är optimerade för hög prestanda och skalbarhet.

SYRA egenskaper

Relationsdatabaser tillhandahåller en uppsättning ACID-egenskaper: atomicitet, konsistens, isolering, tillförlitlighet.

  • Atomicitet kräver att en transaktion utförs i sin helhet eller inte alls.
  • Konsistens innebär att så snart en transaktion slutförs måste data överensstämma med databasschemat.
  • Isolering kräver att parallella transaktioner körs separat från varandra.
  • Tillförlitlighet avser förmågan att återställa till det senast sparade tillståndet efter ett oväntat systemfel eller strömavbrott.

NoSQL-databaser erbjuder ofta en kompromiss och släpper på de stela kraven på ACID-egenskaper till förmån för en mer flexibel datamodell som möjliggör horisontell skalning. Detta gör NoSQL till ett utmärkt val för användningsfall med hög bandbredd och låg latens som kräver horisontell skalning bortom en enda instans.

Prestanda

Prestanda beror huvudsakligen på diskundersystemet. Optimering av frågor, index och tabellstruktur krävs ofta för maximal prestanda.

Prestanda beror vanligtvis på storleken på det underliggande hårdvaruklustret, nätverkslatens och den anropande applikationen.

Skalning

Relationsdatabaser skalas vanligtvis genom att öka maskinvarans datorkraft eller genom att lägga till separata kopior för läsarbetsbelastningar.

NoSQL-databaser stöder vanligtvis hög separerbarhet genom skalbara åtkomstmönster baserade på en distribuerad arkitektur. Detta förbättrar genomströmningen och ger konsekvent prestanda i nästan obegränsad skala.

API

Begäran om att skriva och hämta data skrivs i SQL. Dessa frågor analyseras och exekveras av en relationsdatabas.

Objektorienterade API:er tillåter applikationsutvecklare att enkelt skriva och hämta datastrukturer. Med hjälp av partitionsnycklar kan applikationer söka i nyckel-värdepar, kolumnuppsättningar eller semistrukturerade dokument som innehåller serieobjekt och applikationsattribut.