Vad Är en grafdatabas, och Vad Används Det för?

0
1392
Eduard Muzhevskyi/Shutterstock

Grafdatabaser är en speciell typ av databas för lagring av komplexa datastrukturer som skulle vara omöjligt att spara i en traditionell relationsdatabas. De är framför allt används för sociala nätverk, eftersom de är mycket mer prestanda för vissa frågor.

Vad Är en grafdatabas?

Grafdatabaser används oftast för mycket sammanlänkad data, och för situationer där innehållet i de uppgifter som i sig spelar mindre roll än den övergripande strukturen.

Den enklaste användningen fallet för diagram data för sociala nätverk. Anser att ett nätverk av personer, varje person som har en lista med vänner och har relationer till andra människor. Varje person som gör inlägg, ofta hundratals av dem. Varje inlägg kan ha tusentals människor som interagerar med det. Så, trots tweet endast är 280 tecken lång, det finns så mycket mer att lagra om det.

Detta är verkligen inte de enda som använder fallet, bara det mest lättsmälta en graf databaser används för alla möjliga saker. Ett annat exempel är bedrägeri upptäckt, säg att du är en bank, och vill flagga misstänkta konton. Det kan vara lite skumt för två separata konton för att ha samma adress eller dela telefonnummer. Med en grafdatabas du kan göra ett diagram över sambandet mellan två konton, och identifiera problem som detta mycket mer effektivt än en relationsdatabas någonsin kunde.

I en grafdatabas varje objekt kallas för en nod. En nod kan ha ett obegränsat antal fastigheter, mycket likt hur ett dokument databas fungerar. Ett dokument databas skulle helt enkelt lagra varje nod som ett separat dokument i en samling (array) av dokument, utan att ta hänsyn till hur de ansluter.

I en grafdatabas, anslutningar mellan noder kallas kanter, och de kan ansluta två noder från var som helst i tabellen. Kanterna definiera relationer mellan noder, och kan ha specifika typer. Till exempel, två vänner skulle vara anslutna med en “Vänner” – kanten, men en användare skulle vara anslutna till ett inlägg med en “Postat” eller “Liked” edge.

Vad Är Det Som Gör Dem Snabbare?

Det är inte så att relationsdatabaser såsom MySQL kan inte lagra grafen-liknande strukturer—länkar som dessa är fortfarande centrala begrepp för SQL-tabeller. Länkar form anslutningar mellan borden, så att data kan lagras och uppdateras i separata tabeller samtidigt som en länk på andra ställen i databasen, mycket likt hur pekare fungerar i C. I det sociala nätverket exempel, du skulle inte vilja att lagra namnet för varje vän som en viss användare har som vän kan ändra deras namn, så att du istället förvara din väns ID, och sedan utföra en sökning när du behöver rätt information. Kanske du cache resultaten för att ta lite belastning på databasen, men de flesta system kommer att fungera på liknande sätt som denna.

Att lagra en uppsättning länkar (som en vänner-lista) är bra, men problemet kommer när du börjar att göra någon typ av komplex analys. Det klassiska exemplet är vänner-av-vänner-sökning. För att få en lista på alla som har en gemensam vän med en viss person, skulle du behöva gå över den med tanke på personens vänner-lista, och sedan slinga över varje väns vänner lista och sedan utföra en sökning för varje post. Du har också att se till att du inte returnera dubblerade poster, vilket är en extra loop.

Om du är bekant med Big O Notation, du kan se den här frågan redan. Det är ett problem med exponentiell komplexitet; att göra flera kapslade slingor som bryter datorn mycket snabbt. Det är också inte en smart väg att gå om detta problem.

Ta en titt på detta riktmärke neo4j köra vänner-av-vänner-fråga, jämfört med en traditionell relationsdatabas databas (MySQL):

På djupet är 2, det är en enkel fråga för båda databaserna. På djupet är 3, MySQL blir oförmögen att utföra denna fråga i en normal tidsram, det tar 30 sekunder att returnera ett svar. Till sin kredit, det lyckas återvända djup 4 fråga efter 25 minuter, men djup 5 kraschar databasen.

Grafen databasen har inga problem att återvända någon av dessa frågor, med alla tidsåtgången att vara under 2 sekunder, vilket gör det tusentals gånger snabbare.

Hur går detta till? Mycket komplicerad matematik, mestadels. Diagram är en matematisk struktur i hjärtat, och det är en hel del teori bakom det, som vi noggrant okvalificerade att diskutera i detalj. Men relationella grafer är ganska enkelt att förstå visuellt, vilket gör arbetet med grafdatabaser i praktiken lätt.

Om du vill komma igång med att arbeta med en, måste du hämta och installera en grafdatabas. Neo4j är gratis och öppen källkod, och ett mycket populärt alternativ. AWS har sina Neptunus databas, där du kan prova på gratis, men måste värd på AWS. Vissa multi-modell databaser grafer stöd som ett alternativ, till exempel Microsoft SQL Server, Oracle Database, och ArrangoDB.