Neo4j
GrafVerdens førende native graph database optimeret til at gemme og traversere komplekse relationer.
Beskrivelse
Neo4j er en native graph database der gemmer data som nodes (entiteter) og relationships (forbindelser) med properties på begge. I modsætning til relationelle databaser hvor joins er dyre, er relationships first-class citizens i Neo4j og traversering er ekstremt hurtig uanset database størrelse. Neo4j bruger Cypher query language, et intuitivt pattern-matching sprog der matcher graph strukturer visuelt. Graph databaser excellerer ved use cases hvor relationer er lige så vigtige som data selv - sociale netværk, fraud detection, knowledge graphs, anbefalingssystemer. Neo4j kan håndtere milliarder af nodes og relationships og er konsistent hurtig til deep traversals. Med ACID transactions og clustering support, er den enterprise-ready. Store virksomheder som eBay, Walmart, Cisco og NASA bruger Neo4j til at få indsigt fra forbundne data.
Features
- •Native graph storage og processing
- •Cypher declarative query language
- •ACID compliant transactions
- •Index-free adjacency (hurtig traversal)
- •Graph algorithms library
- •Full-text search integration
- •Causal clustering for HA
- •Property graphs med labels
Query Eksempel
// Opret nodes og relationships
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: 'Developer'}]->(company)
CREATE (peter)-[:WORKS_AT {since: 2018, position: 'Manager'}]->(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
// Recommendation: 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
// Aggregation
MATCH (p:Person)-[:FRIENDS_WITH]->()
RETURN p.name, count(*) as friendCount
ORDER BY friendCount DESC
LIMIT 10Anvendelsesområder
- •Sociale netværk og forbindelser
- •Fraud detection via network analysis
- •Recommendation engines
- •Knowledge graphs og AI
- •Network og IT operations
Fordele
- ✓Lynhurtig traversering af relationer
- ✓Intuitiv data modellering
- ✓Excellent performance ved deep queries
- ✓Cypher er meget læsbart
- ✓Perfekt til connected data
Ulemper
- ✗Dyrere end traditionelle databaser
- ✗Mindre community end SQL/MongoDB
- ✗Steep learning curve for graph thinking
- ✗Kræver god data modeling
- ✗Sharding er komplekst
Bedst til
- →Highly connected data
- →Social network analysis
- →Recommendation systems
- →Fraud og anomaly detection
- →Master Data Management
Ikke anbefalet til
- ⚠Simple CRUD applikationer
- ⚠Tabular data uden relationer
- ⚠High-volume transactional systems
- ⚠Når relationer ikke er vigtige
- ⚠Budget-begrænsede projekter