Bästa svaret
Uppslagstabeller är inte så mycket en “SQL-sak” lika mycket som de används i databasdesign. De används vanligtvis för att hjälpa till med Databasnormalisering för data som är relativt statiska, till exempel tabeller med namn på länder, stater, städer osv.
Jag är inte säker på om det finns en formell akademisk definition av ”uppslagstabeller” i databasdesignkontexten, men när jag tänker på dem tänker jag vanligtvis på tabeller med följande egenskaper:
- De har konfigurations- eller beskrivande data i sig, kontra data som hänför sig till enskilda applikationshändelser.
- De är små i förhållande till händelserelaterade tabeller.
- De är infoga och- läs tabeller, och om uppdateringar görs är de sällsynta.
- För det mesta börjar föreningar eller slutar i dem.
- Jag tänker ofta på dem som analoger till “Ordbok” i Ordbokskomprimeringsalgoritmer .
Några exempel på uppslagstabeller:
- Applikationskonfigurationstabeller.
- Geografiska (som nämnts ovan) eller andra beskrivande tabeller s uch som en lista över leverantörer och leverantörer, en produktkatalogtabell för en webbutik etc.
- Listor över maskinnamn och maskinvaruegenskaper för en applikation som hanterar ett datacenter.
- Användarlistan och användarprofildata (bild, användarbeskrivning, etc) för en webbplats. Saker som den senast besökta sidan skulle inte vara i uppslagstabeller.
Svar
Hastighet är inte riktigt den drivande faktorn bakom att byta till en NoSQL-databas. Om du tar SQL- och NoSQL-databaser sida vid sida och jämför enkla uppdateringar och läsningar från en tabell, bör båda svara mycket snabbt på sådana frågor.
Den viktigaste skillnaden är att NoSQL-databaser är utformade specifikt för att hantera enkla frågor på låg nivå, de låter dig få, ställa in och kanske några andra enkla saker som intervall eller sortering. En stor nackdel är att du måste bestämma hur du ska använda de data du lägger in där och utforma ett lämpligt schema på framsidan som gör att du kan komma åt data i det format du behöver.
SQL å andra sidan, om du tillhandahåller de data du lägger in är korrekt denormaliserad, kan hantera enormt komplexa frågor. Du behöver inte utforma ett schema kring ditt specifika användningsfall och det har den enorma flexibiliteten i frågespråket som kan returnera alla data i vilket format som helst utan att behöva ändra det underliggande schemat.
Anledningen till att SQL har detta rykte för att vara långsam, är att bearbetning av en komplex fråga i en stor dataset, oundvikligen tar tid medan NoSQL helt enkelt inte ger möjlighet att köra långsamma komplexa frågor i första hand.
Det finns ingen anledning att du inte kunde använda en SQL-databas på exakt samma sätt som en NoSQL-databas. Lägg all din data i stora tabeller och använd bara de mest grundläggande frågorna. Det skulle då fungera mycket bra tillsammans med en ekvivalent NoSQL-databas, men uppenbarligen slösar de flesta av de mest användbara funktionerna. Detta är faktiskt fallet i många stora SQL-databaser. Denormalisering blir trasig och flexibiliteten offras för att ”optimera” för specifika frågor.
Det finns dock vissa nackdelar med SQL och under vissa omständigheter blir dessa nackdelar ett sådant problem att vi är villiga att offra den flexibilitet det ger övervinna dem.
För det första skalas det inte bra horisontellt. Att försöka dela upp dina data över många mindre maskiner, men inte omöjligt, kan ha en enorm inverkan på prestanda. Stora SQL-databaser tenderar att köras på mycket hög hårdvara för att försöka upprätthålla tillräcklig prestanda, medan NoSQL-databaser tenderar att enkelt och billigt skala till vilken storlek som helst genom att helt enkelt lägga till extra råvaruhårdvara i ett kluster.
Andra , och viktigast av allt, SQL är inte feltolerant. Ja, det är möjligt att replikera dina data på en andra reservmaskin, men då fördubblar du kostnaderna för specialiserad hårdvara med hög effekt och den hårdvaran måste vara ännu mer kraftfull för att hantera den extra belastningen att hålla sig synkroniserad. Jämför det till exempel med ett Cassandra-kluster, och du kan köra ett dussin mindre maskiner med datareplikering, till och med spridda över flera datacenter om du vill. Lasten distribueras automatiskt, uppdateringar skjuts ut över klustret och förlusten av en maskin kommer inte att märkas av slutanvändaren.
Dessa två är de verkliga anledningarna till att du ska välja mellan de två teknikerna. Om din databas är tillräckligt liten för att passa på en enda maskin och tillfällig driftstopp medan du återställer från en säkerhetskopia inte är ett problem, använd SQL, det förenklar din utveckling massivt och har flexibiliteten att anpassa om dina behov förändras. Om din dataset kommer att bli enorm, eller om du har snäva SLA att slå, gå till NoSQL. Var som helst däremellan måste du ringa en bedömning, men kom ihåg att NoSQL-färdigheter är mycket efterfrågade just nu.Det kan vara värt att gå på det sättet bara för att få erfarenheten.