bolt在java,java neo4j bolt
java neo4j bolt
您好,很高興為您解答:
neo4j是一個(gè)嵌入式,基于磁盤(pán)的,支持完整事務(wù)的java持久化引擎,它在圖像中而不是表中存儲(chǔ)數(shù)據(jù)。neo4j提供了大規(guī)模可擴(kuò)展性,在一臺(tái)機(jī)器上可以處理數(shù)十億節(jié)點(diǎn)/關(guān)系/屬性的圖像,可以擴(kuò)展到多臺(tái)機(jī)器并行運(yùn)行。
相對(duì)于關(guān)系數(shù)據(jù)庫(kù)來(lái)說(shuō),圖形數(shù)據(jù)庫(kù)善于處理大量復(fù)雜、互連接、低結(jié)構(gòu)化的數(shù)據(jù),這些數(shù)據(jù)變化迅速,需要頻繁的查詢(xún)——在關(guān)系數(shù)據(jù)庫(kù)中,這些查詢(xún)會(huì)導(dǎo)致大量的表連接,因此會(huì)產(chǎn)生性能上的問(wèn)題。
neo4j重點(diǎn)解決了擁有大量連接的傳統(tǒng)rdbms在查詢(xún)時(shí)出現(xiàn)的性能衰退問(wèn)題。通過(guò)圍繞圖形進(jìn)行數(shù)據(jù)建模,neo4j會(huì)以相同的速度遍歷節(jié)點(diǎn)與邊,其遍歷速度與構(gòu)成圖形的數(shù)據(jù)量沒(méi)有任何關(guān)系。
此外,neo4j還提供了非常快的圖形算法、推薦系統(tǒng)和olap風(fēng)格的分析,而這一切在目前的rdbms系統(tǒng)中都是無(wú)法實(shí)現(xiàn)的。
轉(zhuǎn)載,僅供參考。
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 IndexnodeIndex;
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 IterablefindShortestPath(Node node1, Node node2) {
PathFinderfinder = GraphAlgoFactory.shortestPath(
Traversal.expanderForTypes(RelTypes.KNOWS, Direction.OUTGOING), 5);
Iterablepaths = 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();
}
}
0
0
0
0
評(píng)論(0)
“還沒(méi)有人發(fā)表評(píng)論,快去搶占沙發(fā)吧”
總結(jié)
以上是生活随笔為你收集整理的bolt在java,java neo4j bolt的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php yii框架和laravel,yi
- 下一篇: java添加不了源代码,JAVA初学者的