Bedste svar
Opslagstabeller er ikke så meget en “SQL-ting” så meget som de bruges i databasedesign. De bruges generelt til at hjælpe med Databasens normalisering til data, der er relativt statiske, såsom tabeller, der indeholder navne på lande, stater, byer osv.
Jeg er ikke sikker på, om der er en formel akademisk definition af “opslagstabeller” i databasedesignkonteksten, men når jeg tænker på dem, tænker jeg normalt på tabeller med følgende egenskaber:
- De har konfigurations- eller beskrivende data i kontra data, der vedrører individuelle applikationshændelser.
- De er små i forhold til begivenhedsrelaterede tabeller.
- De er indsæt-og- læse tabeller, og hvis opdateringer finder sted, er de sjældne.
- For det meste begynder sammenføjninger eller slutter i dem.
- Jeg tænker ofte på dem som analoger til “Ordbog” i Ordbogskomprimeringsalgoritmer .
Nogle eksempler på opslagstabeller:
- Applikationskonfigurationstabeller.
- Geografisk (som nævnt ovenfor) eller andre beskrivende tabeller s uch som en liste over leverandører og leverandører, en produktkatalogtabel til en webbutik osv.
- Lister over maskinnavne og maskinhardwaregenskaber til et program, der administrerer et datacenter.
- Brugerlisten og brugerprofildata (billede, brugerbeskrivelse osv.) For et websted. Ting som den sidst besøgte side ville \_not\_ være i opslagstabeller.
Svar
Hastighed er ikke rigtig den drivende faktor bag at skifte til en NoSQL-database. Hvis du tager SQL- og NoSQL-database side om side og sammenligner enkle opdateringer og læsninger fra en tabel, skal begge reagere meget hurtigt på sådanne forespørgsler.
Hovedforskellen er, at NoSQL-databaser er designet specifikt til at håndtere enkle forespørgsler på lavt niveau, de giver dig mulighed for at få, indstille og måske et par andre enkle ting som intervaller eller sortering. En stor ulempe er, at du skal beslutte, hvordan du skal bruge de data, du lægger derinde, og designe et passende skema foran, der giver dig mulighed for at få adgang til dataene i det format, du har brug for.
SQL på den anden side, hvis de data, du indsætter, er denormaliseret korrekt, kan håndtere enormt komplekse forespørgsler. Du behøver ikke at designe et skema omkring din særlige brugssag, og det har den enorme fleksibilitet i forespørgselssproget, der kan returnere data i ethvert format uden at skulle ændre det underliggende skema.
Årsagen til, at SQL har dette ry for at være langsom, er, at behandling af en kompleks forespørgsel på et stort datasæt uundgåeligt tager tid, mens NoSQL simpelthen ikke giver mulighed for at køre langsomme komplekse forespørgsler i første omgang.
Der er ingen grund til at du ikke kunne bruge en SQL-database på nøjagtig samme måde som en NoSQL-database. Sæt alle dine data i store tabeller, og brug bare de mest basale forespørgsler. Det ville så fungere meget godt sammen med en ækvivalent NoSQL-database, men tydeligt spilder det meste af dets mest nyttige funktioner. Dette er faktisk tilfældet i mange store SQL-databaser. Denormalisering bliver brudt og fleksibilitet ofres for at “optimere” til specifikke forespørgsler.
Der er dog visse ulemper ved SQL, og i nogle tilfælde bliver disse ulemper et sådant problem, at vi er villige til at ofre den fleksibilitet, det giver overvinde dem.
For det første skalerer det ikke vandret. Forsøg på at opdele dine data på tværs af mange mindre maskiner, selvom det ikke er umuligt, kan have en enorm indvirkning på ydeevnen. Store SQL-databaser har en tendens til at køre på meget kraftig meget dyr hardware for at forsøge at opretholde tilstrækkelig ydeevne, mens NoSQL-databaser har tendens til let og billigt at skalere til enhver størrelse ved blot at tilføje ekstra råvarehardware til en klynge. og vigtigst af alt er SQL ikke fejltolerant. Ja, det er muligt at replikere dine data på en anden backup-maskine, men så fordobler du dine omkostninger til specialiseret hardware med høj effekt, og at hardware skal være endnu mere kraftfuld for at klare den ekstra belastning ved at holde sig synkroniseret. Sammenlign det for eksempel med en Cassandra-klynge, og du kan køre et dusin mindre maskiner med datareplikering, endda spredt over flere datacentre, hvis du ønsker det. Belastningen distribueres automatisk, opdateringer skubbes ud over klyngen, og tabet af en hvilken som helst maskine bemærkes ikke af slutbrugeren.
Disse to er de virkelige grunde til, at du skal vælge mellem de to teknologier. Hvis din database er lille nok til at passe på en enkelt maskine, og lejlighedsvis nedetid, mens du gendanner fra en sikkerhedskopi ikke er et problem, skal du bruge SQL, det vil massivt forenkle din udvikling og have fleksibiliteten til at tilpasse, hvis dine behov ændres. Hvis dit datasæt bliver enormt, eller hvis du har stramme SLAer at ramme, gå til NoSQL. Overalt imellem skal du foretage et dømmekald, men husk at NoSQL-færdigheder er meget efterspurgte lige nu.Det kan være værd at gå den vej bare for at få oplevelsen.