Neo4j
← Tilbage til databaser

Neo4j

Graf

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

Foto: GuerrillaBuzz / Unsplash

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