Video: System Design Interview – Step By Step Guide 2024
Om du står inför designfasen för din ansökan och du tror att HBase skulle passa bra, så utformar du radnycklarna och scheman för att passa HBase-datamodellen och arkitekturen är rätt tillvägagångssätt. Men ibland är det meningsfullt att flytta en databas som ursprungligen utformades för en RDBMS till HBase.
Ett vanligt scenario där detta tillvägagångssätt är vettigt är en MySQL-databasinstans som har nått sina gränser för skalbarhet. Tekniker finns för att horisontellt skala en MySQL-instans ( sharding, med andra ord) men denna process är vanligtvis besvärlig och problematisk eftersom MySQL helt enkelt inte ursprungligen var avsedd för sharding.
Övergång från relationsmodellen till HBase-modellen är en relativt ny disciplin. Men vissa etablerade tankegångar framträder och har sammanslagits i tre huvudprinciper att följa när man närmar sig en övergång. Dessa principer är denormalisering, dubbelarbete, och intelligenta nycklar (DDI) .
-
Denormalisering: Den relationella databasmodellen beror på a) ett normaliserat databasschema och b) sammanfogar mellan tabeller för att svara på SQL-operationer. Databas normalisering är en teknik som skyddar mot förlust av data, redundans och andra anomalier eftersom data uppdateras och hämtas.
Det finns ett antal regler som experterna följer för att komma fram till ett normaliserat databasschema (och databas normalisering är en hel studie själv), men processen innebär vanligtvis att dela större tabeller i mindre tabeller och definiera relationer mellan dem. Databasdormalisering är motsatsen till normalisering, där mindre, mer specifika tabeller sammanfogas till större, mer allmänna tabeller.
Detta är ett vanligt mönster när man övergår till HBase, eftersom anslutningar inte finns över tabellerna, och anslutningar kan vara långsamma eftersom de innebär kostsamma diskoperationer. Bevakning av uppdatering och återhämtning avvikelser är nu jobbet för din HBase-klientprogram, eftersom de skydd som du får genom normalisering är ogiltiga.
-
Duplikering: När du avormaliserar ditt databasschema kommer du sannolikt att sluta duplicera data eftersom det kan hjälpa dig att undvika kostsamma läsoperationer över flera tabeller. Var inte bekymrad över det extra lagringsutrymmet (i naturen självklart); Du kan använda den automatiska skalbarheten hos HBase till din fördel.
Observera att det extra arbetet kommer att krävas av din kundansökan för att duplicera data och kom ihåg att nativt HBase tillhandahåller endast radnivå atomoperationer inte överst i rad (med undantag beskriven i HBASE-5229 JIRA) eller kors tabell.
-
Intelligent Keys: Eftersom den data som lagras i HBase är ordnad med radnyckel och radnyckeln är det enda inbyggda index som tillhandahålls av systemet, kan en noggrann och intelligent design av radnyckeln göra en stor skillnad. Till exempel kan din radnyckel vara en kombination av ett servicenummer och kundens ID-nummer som placerar tjänsteordern.
Med den här radnyckeln kan du slå upp data relaterade till serviceordern eller slå upp data relaterad till kunden med samma radnyckel i samma tabell. Denna teknik kommer att bli snabbare för vissa frågor och undvika kostsamma tabeller.
För att klargöra dessa speciella tankegångar, ta en tabell med kundkontaktinformation och placera den inom ramen för en typisk serviceorderdatabas. Figuren visar vad ett normaliserat serviceorderdatabasschema kan se ut.
I enlighet med reglerna för RDBMS-normalisering, ställer du in testklientkontaktinformationstabellen så att den är skild från tjänsteordertabellen för att undvika att kunddata förloras när serviceorder stängs och eventuellt raderas. Ta samma tillvägagångssätt för produkttabellen, vilket innebär att nya produkter kan läggas till den fiktiva företagsdatabasen oberoende av serviceorder.
Genom att förlita sig på RDBMS-anslutningsoperationer stödjer detta schema frågor som visar antalet serviceorder som öppnas mot en viss produkt tillsammans med kundens plats där produkten används.
Det är bra och dammigt, men det är ett schema du skulle använda med RDBM. Hur övergår du detta schema till ett HBase schema? Nästa figur illustrerar ett möjligt HBase-system - en som följer DDI-designmönstret.
Tabellen Kundinformation har deformaliserats genom att inkludera kundnamn och kontaktinformation i stället för de främmande nycklar som tidigare använts. Dessutom kopieras dataen genom att hålla tabellen Kundkontaktinformation som den är. Anslut nu till Service Order-tabellen och tabellen Kundkontaktinformation är inte nödvändig.
Dessutom har en intelligent radnyckelsdesign använts som kombinerar produktnumret med kundnumret för att bilda serviceordernumret (exempelvis A100 | 00001). Med hjälp av den här intelligenta nyckeln kan serviceordertabellen ge viktiga rapporter om produktbrist och kunder som för närvarande upplever produktproblem.
Alla dessa frågor kan alla stödjas av HBase i radnivå atomform för applikationen. Eftersom du vet att HBase beställer radnycklar och sorterar dem på ett lexikografiskt sätt, kan din ansökan göra vissa utbildade gissningar om dataläge när du utfärdar skanningar för rapportering. (Samtliga A * -serienummer kommer att lagras tillsammans, till exempel.)
Serviceorderdatabasen som representeras av HBase-schemat är ett relativt enkelt exempel, men det illustrerar hur HBase i vissa fall kan korsa RDBMS-världen och ge betydande värde. Om det fiktiva företaget har terabytes eller till och med petabytes av serviceanropsdata för att lagra, skulle HBase göra en stor skillnad vad gäller kostnad, tillförlitlighet, prestanda och skala.
Du kan självklart utforma ditt HBAS-scheman på flera olika sätt. Visserligen beror designen helt på de frågor som måste stödjas, men du har möjlighet att överföra vissa relationsdatabaser till mycket kraftfulla HBase-applikationer för produktionsanvändning så länge du arbetar med en solid förståelse av HBase-arkitekturen och DDI-designmönstret.
I detta exempel har antagits att frågor gjordes av en Java-applikation som utnyttjar HBase-klient-API: erna, eller kanske via ett annat språk med Apache Thrift. Den här applikationsmodellen kan passa precis bra och ge användbara prestanda och anpassningsalternativ för det fiktiva serviceföretaget.