Anwendungsbeispiel
					ein soziales Netzwerk
					in relationaler Datenbank
					- typischerweise zwei Tabellen für Daten und Relationen
 
					
direkte Freunde eines Benutzers
					
						select distinct uf.* from t_user_friend uf where
							uf.user_1 = ?
					
					Freunde von Freunden eine Benutzers
					
						select distinct uf2.* from t_user_friend uf1 inner
							join t_user_friend uf2 on uf1.user_1 = uf2.user_2 where
							uf1.user_1 = ?
					
				Freunde von Freunden von Freunden eine Benutzers
					
						select distinct uf3.* from t_user_friend uf1 inner
							join t_user_friend uf2 on uf1.user_1 = uf2.user_2 inner join
							t_user_friend uf3 on uf2.user_1 = uf3.user_2 where uf1.user_1 = ?
					
					- JOIN-Operation pro Ebene
 
						- bei großen Graphenstrukturen potentielle
							Performance-Probleme
 
					
in Neo4j Graphdatenbank
					- speichert Daten als Nodes und Relationships
 
						- User als Nodes, Freundschaft als Relationship zwischen
							User-Nodes
 
					
direkte Freunde eines Benutzers
					
						START me=node:Users(name = 'me' MATCH
							me-[:KNOWS]->friends RETURN friends
					
					Freunde von Freunden eine Benutzers
					
						 START me=node:Users(name = 'me') MATCH
							me-[:KNOWS]->friend-[:KNOWS]->friend2 WHERE
							not(me-[:KNOWS]-friend2) RETURN DISTINCT friend2 ORDER BY
							friend2.name"
					
					Freunde von Freunden von Freunden eine Benutzers
					
						START me=node:Users(name = 'me') MATCH
							me-[:KNOWS]->friend-[:KNOWS]->friend2-[:KNOWS]->friend3 RETURN
							DISTINCT friend3 ORDER BY friend3.name
					
					Alternativ: Graph-Traversals
					- mächtige und effiziente API zur Abfrage Graphen-basierte
							Daten
 
						- fundamentale Operation: Durchlaufe eine Menge von Nodes,
							folge den definierten Relationships, während die Kriterien
							erfüllt sind
 
					
						TraversalDescription traversalDescription =
						Traversal.description().relationships(“IS_FRIEND_OF”,Direction.OUTGOING)
						.evaluator(Evaluators.atDepth(2))
						.uniqueness(Uniqueness.NODE_GLOBAL); Iterable nodes =
						traversalDescription.traverse(nodeById).nodes();
					
				Welcher Freund mag was?
					START me=node:Users(name = 'me') MATCH
						me-[:KNOWS]->friends-[:LIKES]->websites RETURN websites.url,
						friends
					Was wird am meisten von meinen Freunden gemocht?
					START me=node:Users(name = 'me') MATCH
						me-[:KNOWS]->friends-[:LIKES]->websites RETURN websites.url,
						COUNT(*) ORDER BY COUNT(*) DESC