Neo4j
GrafVerdens 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 10Anvendelsesområ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