Neo4j
GrafVerdens 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 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