Beste antwoord
Opzoektabellen zijn niet zozeer een “SQL-ding” maar ze worden gebruikt in database-ontwerp. Ze worden over het algemeen gebruikt om te helpen bij Database-normalisatie voor gegevens die relatief statisch zijn, zoals tabellen met namen van landen, staten, steden, enz.
Ik weet niet zeker of er een formele academische definitie is van “opzoektabellen” in de databaseontwerpcontext, maar als ik eraan denk, denk ik meestal aan tabellen met de volgende eigenschappen:
- Ze bevatten configuratie- of beschrijvende gegevens, in tegenstelling tot gegevens met betrekking tot individuele toepassingsgebeurtenissen.
- Ze zijn klein in vergelijking met aan gebeurtenissen gerelateerde tabellen.
- Ze zijn insert-and- tabellen lezen, en als er updates plaatsvinden, zijn ze zeldzaam.
- Voor het grootste deel beginnen of eindigen joins erin.
- Ik beschouw ze vaak als analogen van de “Woordenboek” in Woordenboekcompressie-algoritmen .
Enkele voorbeelden van opzoektabellen:
- Applicatieconfiguratietabellen.
- Geografische (zoals hierboven vermeld) of andere beschrijvende tabellen uch als een lijst met verkopers en leveranciers, een productcatalogustabel voor een webwinkel, enz.
- Lijsten met machinenamen en machinehardware-eigenschappen voor een applicatie die een datacenter beheert.
- De gebruikerslijst en gebruikersprofielgegevens (afbeelding, gebruikersbeschrijving, enz.) Voor een website. Dingen zoals de meest recent bezochte pagina zouden \_niet\_ in opzoektabellen staan.
Antwoord
Snelheid is niet echt de drijvende factor achter het overschakelen naar een NoSQL-database. Als u SQL- en NoSQL-databases naast elkaar gebruikt en eenvoudige updates en uitlezingen van een tabel vergelijkt, zouden beide zeer snel op dergelijke vragen moeten reageren.
Het belangrijkste verschil is dat NoSQL-databases specifiek zijn ontworpen om eenvoudige zoekopdrachten op laag niveau, ze stellen je in staat om een paar andere eenvoudige dingen op te halen, in te stellen en misschien een paar andere eenvoudige dingen zoals bereiken of sorteren. Een groot nadeel is dat je moet beslissen hoe je de gegevens die je erin stopt, gaat gebruiken en van tevoren een geschikt schema moet ontwerpen, waarmee je toegang hebt tot de gegevens, in het formaat dat je nodig hebt.
SQL aan de andere kant, mits de gegevens die u invoert correct zijn gedenormaliseerd, kan enorm complexe vragen aan. U hoeft geen schema te ontwerpen rond uw specifieke gebruikssituatie en het heeft de enorme flexibiliteit van de zoektaal die alle gegevens in elk formaat kan retourneren zonder het onderliggende schema te hoeven wijzigen.
De reden dat SQL heeft de reputatie traag te zijn, is dat het verwerken van een complexe query op een grote dataset onvermijdelijk tijd kost, terwijl NoSQL simpelweg niet de mogelijkheid biedt om langzame complexe querys uit te voeren.
Er is geen mogelijkheid. reden waarom u een SQL-database niet op precies dezelfde manier zou kunnen gebruiken als een NoSQL-database. Zet al uw gegevens in grote tabellen en gebruik alleen de meest eenvoudige zoekopdrachten. Het zou dan heel goed presteren naast een gelijkwaardige NoSQL-database, maar uiteraard verspillen de meeste van zijn nuttigste functies. Dit is in feite het geval in veel grote SQL-databases. Denormalisatie wordt verbroken en flexibiliteit wordt opgeofferd om te optimaliseren voor specifieke zoekopdrachten.
Er zijn echter bepaalde nadelen aan SQL en in sommige omstandigheden worden deze nadelen zon probleem dat we bereid zijn de flexibiliteit die het biedt op te offeren aan overwin ze.
Ten eerste, het schaalt niet goed horizontaal. Als u probeert uw gegevens over veel kleinere machines te verdelen, is dit niet onmogelijk, maar dit kan een enorme impact hebben op de prestaties. Grote SQL-databases draaien meestal op zeer dure hardware om te proberen adequate prestaties te behouden, terwijl NoSQL-databases de neiging hebben om eenvoudig en goedkoop op te schalen naar elke grootte door simpelweg extra standaardhardware aan een cluster toe te voegen.
Ten tweede , en nog belangrijker, SQL is niet fouttolerant. Ja, het is mogelijk om uw gegevens op een tweede back-upmachine te repliceren, maar dan verdubbelt u uw kosten voor gespecialiseerde hardware met hoog vermogen en die hardware moet nog krachtiger zijn om de extra belasting van zichzelf gesynchroniseerd te houden. Vergelijk dat bijvoorbeeld met een Cassandra-cluster, en je zou een dozijn kleinere machines kunnen draaien met datareplicatie, zelfs verspreid over meerdere datacenters als je dat wilt. De belasting wordt automatisch verdeeld, updates worden over het cluster verspreid en het verlies van een machine wordt niet opgemerkt door de eindgebruiker.
Deze twee zijn de echte redenen om tussen de twee technologieën te kiezen. Als uw database klein genoeg is om op een enkele machine te passen en incidentele downtime terwijl u herstelt vanaf een back-up geen probleem is, gebruikt u SQL, het zal uw ontwikkeling enorm vereenvoudigen en heeft de flexibiliteit om u aan te passen als uw behoeften veranderen. Als uw dataset enorm wordt, of als u krappe SLAs moet halen, kiest u voor NoSQL. Overal daar tussenin moet u een oordeel vellen, maar houd er rekening mee dat er momenteel veel vraag is naar NoSQL-vaardigheden.Het kan de moeite waard zijn om die kant op te gaan om ervaring op te doen.