用户登录
用户注册

分享至

java 一次连接neo4j多次使用

  • 作者: 説好的25905213
  • 来源: 51数据库
  • 2020-10-02
您好,很高兴为您解答:
  neo4j是一个嵌入式,基于磁盘的,支持完整事务的java持久化引擎,它在图像中而不是表中存储数据。neo4j提供了大规模可扩展性,在一台机器上可以处理数十亿节点/关系/属性的图像,可以扩展到多台机器并行运行。
  相对于关系数据库来说,图形数据库善于处理大量复杂、互连接、低结构化的数据,这些数据变化迅速,需要频繁的查询——在关系数据库中,这些查询会导致大量的表连接,因此会产生性能上的问题。
  neo4j重点解决了拥有大量连接的传统rdbms在查询时出现的性能衰退问题。通过围绕图形进行数据建模,neo4j会以相同的速度遍历节点与边,其遍历速度与构成图形的数据量没有任何关系。
  此外,neo4j还提供了非常快的图形算法、推荐系统和olap风格的分析,而这一切在目前的rdbms系统中都是无法实现的。

  转载,仅供参考。



  package com.neo4j;
import java.io.File;
import java.io.IOException;

import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Path;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.index.Index;
import org.neo4j.graphdb.traversal.Evaluators;
import org.neo4j.graphdb.traversal.Traverser;
import org.neo4j.graphdb.traversal.TraversalDescription;
import org.neo4j.kernel.Traversal;
import org.neo4j.kernel.impl.util.FileUtils;
import org.neo4j.kernel.impl.util.StringLogger;
import org.neo4j.cypher.ExecutionEngine;
import org.neo4j.cypher.ExecutionResult;
import org.neo4j.graphalgo.PathFinder;
import org.neo4j.graphalgo.GraphAlgoFactory;

public class Example {

// private static final String DB_PATH = "target/neo4jexample";
private static final String DB_PATH = "testgraph.db";
private static final String PRIMARY_KEY = "name";
private GraphDatabaseService graphDB;
private Index nodeIndex;
private long startNodeId;

private static enum RelTypes implements RelationshipType {
NEO_NODE,
KNOWS,
CODED_BY
}

private void clearDB() {
try {
FileUtils.deleteRecursively(new File(DB_PATH));
}
catch(IOException e) {
throw new RuntimeException(e);
}
}

public void createDB() {
clearDB();

graphDB = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
nodeIndex = graphDB.index().forNodes("nodes");
registerShutdownHook(graphDB);

Transaction tx = graphDB.beginTx();
try {
Node startNode = graphDB.createNode();
startNodeId = startNode.getId();

Node thomas = graphDB.createNode();
thomas.setProperty( "name", "Thomas Anderson" );
thomas.setProperty( "age", 29 );
nodeIndex.add(thomas, PRIMARY_KEY, thomas.getProperty("name"));

startNode.createRelationshipTo( thomas, RelTypes.NEO_NODE );

Node trinity = graphDB.createNode();
trinity.setProperty( "name", "Trinity" );
nodeIndex.add(trinity, PRIMARY_KEY, trinity.getProperty("name"));
Relationship rel = thomas.createRelationshipTo( trinity,
RelTypes.KNOWS );
rel.setProperty( "age", "3 days" );
Node morpheus = graphDB.createNode();
morpheus.setProperty( "name", "Morpheus" );
morpheus.setProperty( "rank", "Captain" );
morpheus.setProperty( "occupation", "Total badass" );
nodeIndex.add(morpheus, PRIMARY_KEY, morpheus.getProperty("name"));
thomas.createRelationshipTo( morpheus, RelTypes.KNOWS );
rel = morpheus.createRelationshipTo( trinity, RelTypes.KNOWS );
rel.setProperty( "age", "12 years" );
Node cypher = graphDB.createNode();
cypher.setProperty( "name", "Cypher" );
cypher.setProperty( "last name", "Reagan" );
nodeIndex.add(cypher, PRIMARY_KEY, cypher.getProperty("name"));
trinity.createRelationshipTo( cypher, RelTypes.KNOWS );
rel = morpheus.createRelationshipTo( cypher, RelTypes.KNOWS );
rel.setProperty( "disclosure", "public" );
Node smith = graphDB.createNode();
smith.setProperty( "name", "Agent Smith" );
smith.setProperty( "version", "1.0b" );
smith.setProperty( "language", "C++" );
nodeIndex.add(smith, PRIMARY_KEY, smith.getProperty("name"));
rel = cypher.createRelationshipTo( smith, RelTypes.KNOWS );
rel.setProperty( "disclosure", "secret" );
rel.setProperty( "age", "6 months" );
Node architect = graphDB.createNode();
architect.setProperty( "name", "The Architect" );
nodeIndex.add(architect, PRIMARY_KEY, architect.getProperty("name"));
smith.createRelationshipTo( architect, RelTypes.CODED_BY );

tx.success();
}
finally {
tx.finish();
}
}

public Traverser getFriends(final Node person) {
TraversalDescription td = Traversal.description()
.breadthFirst()
.relationships(RelTypes.KNOWS, Direction.OUTGOING)
.evaluator(Evaluators.excludeStartPosition());
return td.traverse(person);
}

public void printNodeFriends(Node node) {
// Node neo = graphDB.getNodeById(startNodeId)
// .getSingleRelationship(RelTypes.NEO_NODE, Direction.OUTGOING)
// .getEndNode();
int friendsNumbers = 0;
System.out.println(node.getProperty(PRIMARY_KEY) + "'s friends:");
for(Path friendPath: getFriends(node)) {
System.out.println("At depth " + friendPath.length() + " => "
+ friendPath.endNode().getProperty(PRIMARY_KEY));
friendsNumbers++;
}
System.out.println("Number of friends found: " + friendsNumbers);
}

public void printCypherFriends(String name) {
graphDB = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
ExecutionEngine engine = new ExecutionEngine(graphDB, StringLogger.logger(DB_PATH));
// ExecutionResult result = engine.execute(
// "start n=node:nodes(name=\"" + name + "\") "
// + "match n-[:KNOWS*..]->f "
// + "return distinct f, f.name");
ExecutionResult result = engine.execute("start n=node(500000) return n;");
System.out.println(result.dumpToString());
}

public void printThomasFriends() {
printNodeFriends(nodeIndex.get(PRIMARY_KEY, "Thomas Anderson").getSingle());
}

public Iterable findShortestPath(Node node1, Node node2) {
PathFinder finder = GraphAlgoFactory.shortestPath(
Traversal.expanderForTypes(RelTypes.KNOWS, Direction.OUTGOING), 5);
Iterable paths = finder.findAllPaths(node1, node2);
return paths;
}

public void printShortestPaths() {
Node node1 = nodeIndex.get(PRIMARY_KEY, "Thomas Anderson").getSingle();
Node node2 = nodeIndex.get(PRIMARY_KEY, "Agent Smith").getSingle();
for(Path shortestPath: findShortestPath(node1, node2)) {
System.out.println(shortestPath.toString());
}
}

private static void registerShutdownHook(final GraphDatabaseService graphDB) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
graphDB.shutdown();
}
});
}

private void shutdown() {
graphDB.shutdown();
}

/**
* @param args
*/
public static void main(String[] args) {
Example example = new Example();
// example.createDB();
long t1 = System.currentTimeMillis();
// example.printThomasFriends();
example.printCypherFriends("Thomas Anderson");
long t2 = System.currentTimeMillis();
System.out.print(t2-t1);
//example.printShortestPaths();
example.shutdown();
}

}
软件
前端设计
程序设计
Java相关