Inhoudsopgave:
Video: What is Database & SQL? 2024
Als u de toetsen op de juiste manier beheert, bent u klaar om te ontwerpen hoe u gegevens opslaat met NoSQL en ervoor te zorgen dat het veilig en altijd toegankelijk is voor het werk je moet.
Datatypes in sleutelwaardewinkels
Sleutelwaardewinkels werken meestal als & ldquo; emmers & rdquo; voor binaire gegevens. Sommige databases bieden een sterke interne data-typering en zelfs schema-ondersteuning. Anderen bieden eenvoudig handige hulpfuncties in hun clientstuurprogramma's voor het serialiseren van veelvoorkomende applicatiegegevensstructuren in een sleutelwaardewinkel. Voorbeelden zijn kaarten, lijsten en gesorteerde sets.
Oracle NoSQL kan in twee modi werken:
-
Eenvoudige binaire opslag
-
Zeer gestructureerde Avro-schemalesteun
Een Avro-schema lijkt op een relationeel databaseschema - een zeer strenge set afdwingend van indelingsregels voor JavaScript Object Notation (JSON) -gegevens die zijn opgeslagen in de database, zoals hier wordt geïllustreerd:
{gebruikersnaam: & ldquo; afowler & rdquo;, sessionid: 13452673, since: 1408318745, theme: & ldquo; bluesky & rdquo;}
U definieert een Avro-schema met behulp van een JSON-document. Dit is een voorbeeld van het Avro-schema voor de eerder getoonde opgeslagen gegevens:
{& ldquo; Type & rdquo;: & ldquo; registratie & rdquo;, & ldquo; namespace & rdquo;: & ldquo; com. Zo & rdquo;, & ldquo; naam & rdquo;: & ldquo; UserSession & rdquo;, & ldquo; velden & rdquo;: [{& ldquo; naam & rdquo;: & ldquo; gebruikersnaam & rdquo;, & ldquo; Type & rdquo;: [& ldquo; snaar & rdquo;, & rdquo; null & rdquo;]}, {& ldquo; naam & rdquo;: & ldquo; sessionid & rdquo;, & ldquo; Type & rdquo;: & ldquo; int & rdquo;}, {& ldquo; naam & rdquo;: & ldquo; sinds & rdquo;, & ldquo; Type & rdquo;: & ldquo; lang & rdquo;}, {& ldquo; naam & rdquo;: & ldquo; theme & rdquo;, & ldquo; Type & rdquo;: [& ldquo; snaar & rdquo;, & rdquo; null & rdquo;]}]}
Een Avro-schema biedt zeer sterke typen in de database voor wanneer schema belangrijk is. In het voorgaande voorbeeld ziet u reeksgegevens, een numerieke sessie-id, een datum (milliseconden, sinds Unix Time Epoch, als een lang geheel getal) en een personalisatie-instelling voor het thema dat op de website moet worden gebruikt.
Merk ook op dat het type gebruikersnaam en thema twee opties heeft - string en null, dat is hoe je Oracle NoSQL instrueert dat null-waarden zijn toegestaan. U had thema als een tekenreeks kunnen verlaten en een extra configuratieparameter van & ldquo; default & rdquo;: & ldquo; bluesky & rdquo;.
Andere NoSQL-databases bieden secundaire indexen voor elke willekeurige eigenschap van een waarde met JSON-inhoud. Riak biedt bijvoorbeeld secundaire indexen op basis van documentpartitionering - in principe wordt een bekende eigenschap in een JSON-document geïndexeerd met een type.Hiermee kunnen bereikquery's (kleiner dan of groter dan) naast eenvoudige gelijke en niet-gelijke vergelijkingen worden uitgevoerd. Riak kan bereikquery's leveren zonder een strikt schema - gewoon een eenvoudige indexdefinitie. Als de gegevens er zijn, wordt deze aan de index toegevoegd.
Gegevens repliceren
Door meerdere exemplaren van dezelfde gegevens op andere servers of zelfs racks van servers te bewaren, kunt u ervoor zorgen dat gegevens beschikbaar zijn als een server faalt. Serverstoring gebeurt voornamelijk in dezelfde cluster.
U kunt replica's op twee manieren gebruiken:
- Master-slave: Alle gelezen en geschreven documenten gebeuren met de master. Slaves nemen het over en ontvangen alleen verzoeken als de master faalt.
Master-slave-replicatie wordt meestal gebruikt in ACID-compatibele sleutel / waarde-winkels. Om een maximale consistentie mogelijk te maken, wordt de primaire store beschreven en worden alle replica bijgewerkt voordat de transactie is voltooid. Dit mechanisme wordt een tweefasige commit genoemd en creëert extra netwerk- en verwerkingstijd op de replica's.
- Master-master: Lezen en schrijven kan gebeuren op alle knooppunten die een sleutel beheren. Er is geen concept van een & ldquo; primaire & rdquo; partitie eigenaar.
Mastormasterreplica's zijn doorgaans uiteindelijk consistent, waarbij het cluster een automatische bewerking uitvoert om de laatste waarde voor een sleutel te bepalen en oudere, oude waarden te verwijderen.
In de meeste winkels met sleutelwaardes gebeurt dit langzaam - tijdens het lezen. Riak is hier de uitzondering omdat het een anti-entropiedienst heeft die controleert op consistentie tijdens normale bewerkingen.
Versie-gegevens
Om automatische conflictoplossing mogelijk te maken, hebt u een mechanisme nodig om de nieuwste versie van gegevens aan te geven. Uiteindelijk bereiken consistente sleutelwaardewinkels conflictoplossing op verschillende manieren.
Riak gebruikt een vectorklokmechanisme om te voorspellen welke kopie de meest recente is. Andere winkels met sleutelwaardes gebruiken eenvoudige tijdstempels om op matheid te wijzen. Wanneer conflicten niet automatisch kunnen worden opgelost, worden beide kopieën van gegevens naar de client verzonden. Conflicterende gegevens die naar de client worden verzonden, kunnen optreden in de volgende situatie:
-
Client 1 schrijft naar replica A 'Adam: {likes: Cheese}'.
-
Replica A kopieert gegevens naar replica B.
-
Cliënt 1 werkt gegevens bij van replica A naar 'Adam: {likes: Cheese, hates: sunlight}'.
Op dit moment heeft replica A niet genoeg tijd om de nieuwste gegevens naar replica B te kopiëren.
-
Client 2 werkt gegevens op replica B bij naar 'Adam: {likes: Dogs, hates: kangaroos}'.
Op dit moment zijn replica A en replica B in conflict en kan het databasecluster de verschillen niet automatisch oplossen.
Een alternatief mechanisme is om tijdstempels te gebruiken en ze te vertrouwen om de nieuwste gegevens aan te geven. In dergelijke situaties is het logisch dat de toepassing controleert of de tijdstempels de laatste waarde hebben gelezen voordat de waarde wordt bijgewerkt.
Ze controleren op controleren en instellen mechanisme,, wat in feite betekent 'Als de nieuwste versie nog steeds versie 2 is, sla dan mijn versie 3 op'. Dit mechanisme wordt soms lees match-update (RMU) of lees match-write (RMW) genoemd. Dit mechanisme is het standaardmechanisme dat wordt gebruikt door Oracle NoSQL, Redis, Riak en Voldemort.