← Tilbage til databaser

Neo4j

Graf

Verdens førende native grafdatabase optimeret til at gemme og traversere komplekse relationer.

Beskrivelse

Neo4j er en native grafdatabase der gemmer data som noder (entiteter) og relationer (forbindelser) med egenskaber på begge. I modsætning til relationelle databaser hvor joins er dyre, er relationer førsteklasses borgere i Neo4j og traversering er ekstremt hurtig uanset databasestørrelse. Neo4j bruger Cypher-forespørgselssproget, et intuitivt mønstermatchende sprog der matcher grafstrukturer visuelt. Grafdatabaser udmærker sig ved brugsscenarier hvor relationer er lige så vigtige som selve dataene - sociale netværk, svindelregistrering, videngrafer, anbefalingssystemer. Neo4j kan håndtere milliarder af noder og relationer og er konsistent hurtig til dybe traverseringer. Med ACID-transaktioner og clustering-understøttelse er den enterprise-klar. Store virksomheder som eBay, Walmart, Cisco og NASA bruger Neo4j til at få indsigt fra forbundne data.

Features

  • Native graflagring og -behandling
  • Cypher deklarativt forespørgselssprog
  • ACID-kompatible transaktioner
  • Indeksfri adjacency (hurtig traversering)
  • Grafalgoritmebibliotek
  • Fuldtekstsøgningsintegration
  • Kausal clustering for HA
  • Egenskabsgrafer med labels

Query Eksempel

// Opret noder og relationer
CREATE (maria:Person {name: 'Maria Nielsen', age: 28})
CREATE (peter:Person {name: 'Peter Hansen', age: 35})
CREATE (company:Company {name: 'TechStart ApS'})
CREATE (maria)-[:WORKS_AT {since: 2020, position: 'Udvikler'}]->(company)
CREATE (peter)-[:WORKS_AT {since: 2018, position: 'Leder'}]->(company)
CREATE (maria)-[:FRIENDS_WITH {since: 2019}]->(peter)

// Find venner af venner
MATCH (person:Person {name: 'Maria Nielsen'})
      -[:FRIENDS_WITH]-(friend)
      -[:FRIENDS_WITH]-(friendOfFriend)
WHERE person <> friendOfFriend
RETURN DISTINCT friendOfFriend.name

// Find korteste sti mellem to personer
MATCH path = shortestPath(
  (maria:Person {name: 'Maria Nielsen'})
  -[:FRIENDS_WITH*]-()
  -[:FRIENDS_WITH*]-(target:Person {name: 'Anders Andersen'})
)
RETURN path

// Anbefaling: Personer der arbejder samme sted
MATCH (me:Person {name: 'Maria Nielsen'})
      -[:WORKS_AT]->(company)<-[:WORKS_AT]-(colleague)
WHERE me <> colleague
  AND NOT (me)-[:FRIENDS_WITH]-(colleague)
RETURN colleague.name, company.name
ORDER BY colleague.name

// Aggregering
MATCH (p:Person)-[:FRIENDS_WITH]->()
RETURN p.name, count(*) as friendCount
ORDER BY friendCount DESC
LIMIT 10

Anvendelsesområder

  • Sociale netværk og forbindelser
  • Svindelregistrering via netværksanalyse
  • Anbefalingsmotorer
  • Videngrafer og AI
  • Netværk og IT-operationer

Fordele

  • Lynhurtig traversering af relationer
  • Intuitiv datamodellering
  • Fremragende ydeevne ved dybe forespørgsler
  • Cypher er meget læsbart
  • Perfekt til forbundne data

Ulemper

  • Dyrere end traditionelle databaser
  • Mindre community end SQL/MongoDB
  • Stejl indlæringskurve for graf-tænkning
  • Kræver god datamodellering
  • Sharding er komplekst

Bedst til

  • Stærkt forbundne data
  • Analyse af sociale netværk
  • Anbefalingssystemer
  • Svindel- og anomalidetektion
  • Master Data Management

Ikke anbefalet til

  • Simple CRUD-applikationer
  • Tabeldata uden relationer
  • Højvolumen-transaktionssystemer
  • Når relationer ikke er vigtige
  • Budgetbegrænsede projekter

Relaterede databaser

ArangoDBJanusGraphAmazon NeptuneTigerGraph